◆□□□□□□□□□□□□□□□□□□□□□□□□□□□◆ HSPであなたもプログラマー 発行者そらとす 第二十五回 “バックナンバー整理”2002/3/23 MAIL:soratosu@24i.net HP: http://www3.to/soratosu/ ◆□□□□□□□□□□□□□□□□□□□□□□□□□□□◆ こんにちは〜。 やったぜぃみなさん!!公立合格ですです!! これでやっとパソコンがやりまくれる…とおもったら 早速宿題がでちゃったんだよね。 あんなんもんはほっといて発行発行。 ☆はじめて購読の方。(今回は100名くらいかな) 是非バックナンバーも見てください。 http://www.spa.dyn.to/~soratosu/mailmagazine/ ☆前回 EXEの作り方をしました。 ☆今回 今回は、だんだんと増えてきたバックナンバーを読みやすくする ソフトを作ってみたいと思います。 ◎まずデザインを考えます。 (これが崩れて見える方はMS ゴシックに変えてみてください) ┌─────────────────┬┬┬┐ ├─────────────────┴┴┴┤ │┏━━━━━━━━━━━━━━━━━━┓│ │┃バックナンバー一覧 ┃│ │┗━━━━━━━━━━━━━━━━━━┛│ ├────────────────────┤ │┏━━━━━━━━━━━━━━━━━━┓│ │┃選択されたものを表示 ┃│ │┃(メッセージボックス) ┃│ │┃ ┃│ │┃ ┃│ │┃ ┃│ │┃ ┃│ │┃ ┃│ │┗━━━━━━━━━━━━━━━━━━┛│ └────────────────────┘ とまあ機能が思いつかなかったのでこれでいいでしょう。(^^; バックナンバー表示はリストボックスを使用します。 これはまだ書いたことが無いので説明します。 listbox (数値型変数),Y(縦)サイズ,(文字列型変数) として使います。 文字列方変数は、選択させたいものを入れておく変数です。 たとえば、 そらとす\nりっど\nぷーたろー\nrobotetsuさん\nAntliaさん というデータが入っていたとすると そらとす りっど ぷーたろー robotetsuさん Antliaさん という中から選択するボックスになります。 数値型変数は、リストボックス内のどこが選択されているかを 保持する変数です。 たとえば、一番上のそらとすが選択されると数値型変数には、 0が代入されます。 ぷーたろーが選択されると2、 robotestuさんが選択されると3と言う風になります。 文章ではわかりにくいのでスクリプトにしてみます。 ;# リストボックステスト mojiretsu = "そらとす\nりっど\nぷーたろー\nrobotetsuさん\nAntliaさん" suchi = 0 listbox suchi,150,mojiretsu *rupu mes suchi ;# 数値型変数表示 wait 100 ;# 一秒待つ goto *rupu ;# *rupuに行く ちなみに\nは改行を意味します。 ↑のスクリプトで mes mojiretsu とすると そらとす りっど ぷーたろー robotetsuさん Antliaさん と表示されます。 次にメッセージボックスの説明をします。 これはメモ帳を作ったときに一回つかいましたが、 忘れられている方もおられると思いますのでかきます。 mesbox (文字列型変数),X(横)サイズ,Y(縦)サイズ,タイプ タイプは0,1,2,4,5のいずれかを書きます。 0 スクロール可能なエディットボックス(書き換え不可) 1 スクロール可能なエディットボックス(書き換え可能) 2 スクロールなし、スタティックテキスト 4 横スクロールバー付きエディットボックス(書き換え不可) 5 横スクロールバー付きエディットボックス(書き換え可能) 文字列型変数には、このメッセージボックスに表示したいものを入れます。 X,Yサイズはそのまま。50ドット×50ドットのメッセージボックスなら50,50、 1024X1024なら1024,1024と書きます。 ではスクリプトにしてみます。 screen 0,800,480 ;# ウィンドウ0を800*400で初期化 objsize 800,0 ;# オブジェクト(button,listbox,inputなどのサイズを設定) pos 0,0 : listbox number,150,hyojibutsu pos 0,300 : mesbox naiyo,800,330,5 stop はいできました。 実行してみてください。 エラーが出ましたでしょ? なぜなら、HSPのデフォルト変数は必ず数値型だからです。 文字列型変数を指定したければいけない所に数値型のを設定すると エラーが出ます。 したがって正しいスクリプトは、 screen 0,800,480 ;# ウィンドウ0を800*400で初期化 objsize 800,0 ;# オブジェクト(input,listbox,buttonなど)のサイズを設定 ; メインオブジェクト設置 hyojibutsu = "" ;# 文字列型で初期化 naiyo = "" ;# (同) pos 0,0 : listbox number,150,hyojibutsu pos 0,150 : mesbox naiyo,800,330,5 stop となります。 はいこれでデザインは完成! (全角スペースを入れるなどのイジワルはしておりませんのでこぴぺして即実行できます。) ◎次に、どのバックナンバーがあるかを調べなければいけません。 但しこのスクリプトまたは作成したEXEがバックナンバーファイルのあるディレクトリにあるとする。 しかし、いちいちメーラーからこぴぺして1.txtとかはめんどいですよね。 そんな人のために、容易しました。 http://www.h3.dion.ne.jp/~fyoshio/back.lzh 解凍してスクリプトのある位置に内容(*.txt)をコピーします。 では、そのバックナンバー(テキストファイル)を調べます。 ; ディレクトリを調べるのでデフォルトの64では足りない。 ; したがって、多めに確保、文字列化 sdim hyojibutsu,5000 hyojibutsu = "" ; テキストファイルを調べる dirlist hyojibutsu,"*.txt" stop これで調べれます。 ちなみに dirlist 調べたものをいれとく変数,"ファイル名",調べるモード(今回は不要。知りたい方は、HELPをどうぞ) ファイル名には、 1.txtなどをいれます。 *(アスタリスク).txtとすると.txtを全て読み込みます。 また、複数のファイルがヒットした場合は、\nで区切られたデータとなります。 これでバックナンバーが文字列型変数hyojibutsiに読み込まれました。 これを上で作ったlistbox内に表示される内容も確保できました。 少し改良してこうすれば、 ; ディレクトリを調べるのでデフォルトの64では足りない。 ; したがって、多めに確保、文字列化 sdim hyojibutsu,5000 hyojibutsu = "" ; テキストファイルを調べる dirlist hyojibutsu,"*.txt" screen 0,800,480 ;# ウィンドウ0を800*400で初期化 objsize 800,0 ;# オブジェクト(input,listbox,buttonなど)のサイズを設定 ; メインオブジェクト設置 naiyo = "" ;# (同) pos 0,0 : listbox number,150,hyojibutsu pos 0,150 : mesbox naiyo,800,330,5 stop はい 1.txt 2.txt ... と表示されましたでしょ? で、listboxないで選択されたものを下のmesboxに表示しなければなりません。 listboxないのどこが選択されているかは、数値型変数numberに入っています。 では、その選択されたファイル名を読みこんで、下のmesboxに表示すればいいわけです。 それをスクリプトにしてみます。 ; 読み込み用バッファ。30KB分確保 sdim yomikomi,30000 notesel hyojibutsu *rupu ; 前回読み込んだファイルと if zennum!number { yomikomi = "" file = "" noteget file,number ; 読み込み bload ""+ file +"",yomikomi ; mexbox内書き換え objprm 1,yomikomi ; 今回読み込んだナンバーをコピー zennum = number } ; ウェイとしてループ wait 1 goto *rupu では解説。 まずファイル読み込みようの変数にたくさんのバッファを確保します。 次に、変数hyojibutsuをメモリノートパッド命令で使用できるようにします。 どういうことかというと、 1.txtが選択されると、numberには0が入ります。 しかし、0では、何を読み込んだらいいかわかりません。 どのファイルを読み込んだらいいかは、hyojibutsu変数の中にあります。 この何行目かを取り出すには notegetという命令を使用します。 noteget 読み出したものを格納する変数,インデックス インデックスは、行番号−1です。 zennumには、最後に読み込んだインデックスを保存しとく変数です。 if zennum〜は何でこんなことをするかというと、 これを省くと、同じファイルを何度も読みこむからです。 HDDにもあんまり良くない(と思う)ですからはずさないほうがいいと思います。 あとは、わかりますよね?? 結構便利?? 同でしょう。感想おまちしております。 終了。 次回は、拡張命令 #include をやりたいと思います。 そうそう、メーリングリストは、時々HSPに関することを送っていきたいと思います。 あっもちろんみなさんもおくれますよ。 hsp_soratosu@freeml.com ■どくしゃこーなー■ なし!!(はじめてかも) みなさん送ってください!! soratosu@24i.net soratosu@spa.dyn.to のどちらかにお気軽に送ってきてください。(^o^) ▲じこちゅ〜▲ 何書こうかな〜〜。 今回なにもないや。 それとMTV1000、とても画質いいね〜。 でもビットレート4M以下にできないのがちょっと困るけど。 早く自宅サーバーたてたい〜〜〜。もうマジでFTPめんどい。 CGI研究所のスクリプト、ほとんど全部バージョンアップしてるのに〜〜〜。 今、C++をやってみてるんですが、 #include ; int main(void) { cout << "入力してみて\n"; cin >> a; cout << "あなた" << a << "と入力したでしょ?"; return 0; } までしかやってない。先が思いやられる...。