◆□□□□□□□□□□□□□□□□□□□□□□□□□□□◆ HSPであなたもプログラマー 発行者そらとす 第二十回 “メモ帳” 2001/12/5 MAIL:soratosu@24i.net HP:http://www3.to/soratosu/ ◆□□□□□□□□□□□□□□□□□□□□□□□□□□□◆ どうもこんにちは。(^^) とうとう二十回目です。 今回のはちょっと難しいかもしれないけどよく読めばわかると思います。 ☆初めて購読の方 「まったくプログラミングはじめてだ!!」という方は是非 第一回から購読してください。 メール配信:http://www.dragoncity.ne.jp/~soratosu/merumaga.html 一括(1〜20):http://www.dragoncity.ne.jp/~soratosu/ikkatsu.lzh ☆前回 時計を作りました。(gettime) ☆今回 今回なんにしましょう?? こまった。ネタを書いたノート捨ててしまった。(^^; ……。身近なものでもつくってみよ。 身近なものといえば、 ・メモ帳 ・電卓 ・そろばん(?) ぐらいかな? とりあえず、メモ帳でもつくってみましょう!! ●メモ帳● ではまずデザインを考えます。別に考えなくてもいいけど考えた方がつくりやすいと思います。 ┌───────────┬┬┬┐ ├───────────┴┴┴┤ │ NEW LOAD SAVE NEWSAVE VER. │ │┌────────────┐│ ││入力ボックス┃ ││ ││ ││ ││ ││ ││ ││ ││ ││ ││ ││ │└────────────┘│ └──────────────┘ こんな感じかな? では早速仕組みは後回しにしてオブジェクト(ボタンとか)を配置してみます。 screen 0,500,400 ;1 cls ;2 title "じさくめもちょー" ;3 objsize 100,25 ;4 pos 0,0 : button "NEW",*new ;5 pos 100,0 : button "LOAD",*load ;6 pos 200,0 : button "SAVE",*save ;7 pos 300,0 : button "NEW SAVE",*newsave ;8 pos 400,0 : button "VER.",*verr ;9 sdim a,32000 ;10 a="" ;11 pos 0,40 ;12 mesbox a,500,360,5 ;13 p="" stop *new *load *save *newsave *verr stop はい。できました。実行してみて下さい。 ほぼデザインと同じでしょ? ◎解説 1行目から3行目まではわかると思います。 (わからん!という方はバックナンバーもしくはメール) 4行目はオブジェクト(buttonやinput)のサイズを変更するものです。 objsize (Xのサイズ),(Yのサイズ)です。 5〜9はボタンを配置。 10は変数aにバッファを確保。(これ以上多くしたら動かないかも) 11その変数を文字列型に。 13メッセージボックスを配置。 実行するとわかります。あれです。 パラメータは、 mesbox (表示する文字列型変数),Xsize,Ysize,(メッセージボックスのスタイル) メッセージボックスのスタイルというのは 0 スクロール可能なエディットボックス(書き換え不可) 1 スクロール可能なエディットボックス(書き換え可能) 2 スクロールなし、スタティックテキスト 4 横スクロールバー付きエディットボックス(書き換え不可) 5 横スクロールバー付きエディットボックス(書き換え可能) です。 変数pはファイルパスを格納する為に使います。(後でわかります。) では次に「VER.」というボタンの役割を書きます。 *verr dialog "バージョン:1.00\n\nこぴーらいと→your name",0,"バージョン情報" stop はいできました。実行してみて「VER。」ボタンを押してください。 う〜ん。なんかかっこいい!!(^^; dialogは以前紹介したはずですが、もう一度簡単に紹介します。 dialog "表示するメッセージ",スタイル,"タイトルバーに表示する文字" です。「\n」というのは、改行です。 (どのボタンを押してもstopを入れてないためラベルverrまでくるのでダイアログが表示されます。) 次にLOADぼたんの役割を書きます。 *load dialog "txt",16,"テキストファイル" if stat=0 : stop bload refstr,a sdim p,500 p=refstr objprm 5,a はいできました。意味不明かな? dialog "tx・・・・ で、ロードするファイルを選ぶダイアログを表示します。 「txt」はロード拡張子を示します。(asとかでもOK) 「16」はロードダイアログ。(こんな名前ではないと思う) 「テキストファイル」はその拡張子の補足説明です。(省略可) この選ばれたファイルのパスがシステム変数refstrに代入されるので そのパスのファイルをbloadで変数aにロードします。 もしキャンセルがおされればシステム変数statに0が代入されるので停止します。 pにバッファを少し大きめに確保し、このファイルパスをコピーしておきます。 これは「SAVE」ボタン(上書き用)で使います。 objprmメッセージボックスなどを書き換える命令です。 ちょっと難しいのですがせつめいします。 objprm 5,aの5はオブジェクトIDを示します。 画面に表示されているオブジェクトに一つずつ割り当てられています。 置いた順番に0,1,2,3,4,5,6,7,8,9,10,11…と割り当てられます。 つまりこのスクリプトでは、 「NEW」 =オブジェクトID 0 「LOAD」=オブジェクトID 1 「SAVE」=オブジェクトID 2 「NEW SAVE」=オブジェクトID 3 「VER.」=オブジェクトID 4 メッセージ =オブジェクトID 5 ボックス となります。 もし objprm 2,aとすれば「SAVE」ボタンが書き換えられてしまいます。 …わかっていただけました? わからなかったら是非質問してくださいね。 次にNEWボタン。 これはobjprmさえわかっていたら簡単! *new objprm 5,"" p="" stop こんだけ。メッセージボックスを空にするだけ。 そして、ファイルパスを入れておく変数pを空にします。 なんでかというと上書き用のSAVEボタンでつかうからです。 次にSAVEボタンの役割を書きます。 これは上書き用のボタンです。 では書いてみます。 *save if p="" : goto *newsave ;@ strlen nn,a ;A bsave ""+p+"",a,nn ;B stop ほい。できました。 まず、変数pが空(デフォルト)だったらどこにセーブしたらいいかわからないので、 チェックします。そうだったらnewsaveに移動。 次に変数aの長さを測ります。(数値型変数nnに格納) そして、保存します。 最後にNEW SAVEボタンの役割を書きます。 これは名前を付けて保存みたいなものです。 *newsave dialog "*",17 if stat=0 : stop sdim p,500 p="" p=refstr strlen nn,a bsave ""+p+"",a,nn stop はい出来上がり。 dialogでロードと逆のセーブダイアログを表示します。 但しどんな拡張子でもかまわないので「*」を入れます。これは何でもOKみたいなものです。 そしてsaveのときとおなじようにすれば          ・  ┏━━┻━━┓ ┏━━╋ ━━━━ ┣┓┏╋┛ ━━┳━┳━━ ┃ ┃┃  ━┛ ┗━ ┛ ┗┛(完成) どうですか? 次回は電卓を。 ■読者コーナー なっすぃんぐ! ▲重要 12/6〜12/13までまったくインターネットができない為、メールの受信ができません。 ご了承ください。 期末テスト真っ最中…。