概 要 209 テキスト整形美男 5. 7 概要 パソコン通信ネットワークでテキストを送るときに、非常に便利なツールです。 な禁則処理や、ファイル保存、印刷なども行えます。 テキスト整形美男は、テキストを指定した桁数で改行するためのプログラムです。単純 約 30 K バイトになりましたが、用途上、特に問題はないでしよう。 また、ファイルを一つの文字列型変数に代入しているため、編集できるファイル容量は D:$DATA*\/B8VCP$(Äl-:; めに . Tnq ー整形弄男 VIEW まさにビギナからシニアまで、誰でもがそれなりに援える、とても柔軟性の そうした特性を利用してかなり高度なプログラムを作り出すこともでさます。 も可能にします。そのため、プログラミングにある程度慣れている人であれば、 外のプログラムから提供される部品を i s ual B ” i c の一部として利用すること わうことがでさます。また、ウインドウズという動作環境は、 i sual Bas i c 以 らのプログラムはでさてしまうので、始めたばかりの人でもすぐに逹成感を味 誰でもが気軽に楽しめるものです。ちょっと部品を組み立てるだけでも何かし 玩具のプロックを組み立てる感覚でプログラミングを行える i sual Ba s i c は、 ラミング言なのです。 i c は、“プログラムを書く " のではなく、 - プログラムを組み立てる " プログ の当たりにでき、とてもやりがいがあって楽しいものです。そう、 i sual B as 立てていたプラモデルのようで、だんだんプログラム炉形になっていくを目 はありません。プログラムを作り上げていく過程は、まるで子どもの時に組み あるからには多少はそうした部分もありますが、その比重は従来のそれの比で ラミングは、決して文字や記号の固まりではなく、もちろんプログラミングで Y i sual B a s i c はその名のりビジュアルでした。 Y i sual Bas i c によるプログ それだけの魅力と可能性を感じさせてくれたのです。 YisuaI B sic の登場は、そんな筆者の考えを 180 度転換させるのに充分でした。 趣味にしている人の気が知れませんでした。 一目どころか、何度見返してもよくわからない代物でした。プログラミングを かってプログラミングは一部のマニアのものでした。 C やらアセンプラやら、 第イル旧編集旧設定 ( 工 ) モード、 ( M ) ■テキスト整形美男 一部のエデイタで作られたテキストファイルは、読み込めない場合があります。
224 第二 部 5 テキスト整形美男 linesformfile = linesformfile 十 Mid$ (nextline, st, 10 十 1) 十 Chr$ ( 13 ) 十 ④ ⑥ Chr$ ( 10 ) st = st 十 10 十 1 ” Chr$ ( 13 ) 十 Chr$ ( 10 ) linesformfile = linesformfile 十 Mid$(nextline, st, 10 ー 1 ) 十 : ① ElseIf be 1 = 2 And af 1 = 2 And af 2 = 1 And be 2 = 0 Then st = st 十 10 ー 1 ー・ Chr$ ( 10 ) linesformfile = linesformfile 十 Mid$ (nextline, st, lo ー 1 ) 十 Chr$ ( 13 ) 十 : ⑥ ElseIf be 1 = 2 And af 1 = 2 And af 2 = 0 And be 2 = 0 Then st = st 十 lo ー 1 ~ Chr$(10) linesformfile = linesformfile 十 Mid$ (nextline, st, 10 ー 1) 十 Chr$ ( 13 ) 十 : ⑧ ElseIf be 1 = 2 And af 1 = 1 And af 2 = 1 And be 2 = 0 Then st = st 十 10 十 1 linesformfile = linesformfile 十 Mid$ (nextline, st, 10 十 1 ) 十 Chr$(13) 十 : ① EIseIf be 1 = 2 And af 1 = 1 And af 2 = 0 Then st = st 十 lo ー 1 ~ Chr$ ( 10 ) linesformfile = linesformfile 十 Mid$ (nextline, st, lo ー 1 ) 十 Chr$ ( 13 ) 十 : ⑨ EIseIf be 1 = 2 And af 1 = 0 And af 2 = 1 And be 2 = 0 Then st = st 十十 1 ーー Chr$ ( 10 ) linesformfile = linesformfile 十 Mid$(nextline, st, 10 十 1 ) 十 Chr$(13) 十 : ⑥ EIseIf be 1 = 2 And af 1 = 0 And af 2 = 0 Then End If st = st 十 10 ・① Else st = st 十 10 ー 1 linesformfile = linesformfile 十 Mid$ (nextline, st, 10 ) 十 Chr$(13) 十 行付きのテキストを変数「 linesformfile 」に出力しています。 gyomatu 関数と gyoto 関数で得られた結果をもとに、 10 通りのパターンを想定し、改 「 Chr$(13) 十 Chr $ ( 10 ) 」は改行を表す文字コードです。 この場合には、指定桁数より 1 文字少なくしてその行を改行します。 次の行の頭に来る文字とその次の文字が行頭禁則文字だった場合 この場合には、指定桁数より 1 文字多くその行の文字列として改行します。 次の行の頭に来る文字が行頭禁則文字だった場合 また、 linesformfile は、最終的にまとめてテキストボックスに代人されます。
付録 7 サンプルプログラムプロシーシャー覧 257 Sub harituke—CIick ( ) Sub hiraku—Click() Sub insatu—Click() Sub kopi—Click ( ) Sub mnu—edit—Click() Sub mnu—figer—Click() Sub mnu—file—Click() Sub mnu—mode—Click() Sub modo—CIick (index As lnteger) Sub nahozon—Click() Sub sinki—Click ( ) syuryo—CIick ( ) Sub uwagaki—Click() Sub FO 「 m-Ket. f 「 m Sub Command 3 D—settei—Click ( ) Sub Command 3 D—tyusi—Click ( ) Sub Form—Load ( ) Sub Spin—keta—SpinDown() Sub Spin—keta—SpinUp ( ) Wood 「 pg. bas Sub armorCLS ( ) Sub hueruEP() Sub itemCLS() Sub swordCLS ( ) Sub zokusei() FO 「 m-Bag. f 「 m Sub armor—DblCIick (lndex As lnteger) Sub Command 3 D—taiki—Click ( ) Sub Form—QueryUnload(Cancel As lnteger, 迷いの森の RPG クリップポードのテキストをコピーする キャラクターの情報を form_bag に表示する 剣を一つ失ったときの処理 アイテムを一つ失ったときの処理 体力と気力の回復 鎧を一つ失ったときの処理 内容 桁数を 2 ずっ増やす 桁数を 2 すっ減らす 現在の状態を反映する フォームを終了する 新しい桁に変更する 内容 ファイルの保存 プログラムの終了 テキストボックスのデータを初期化する ファイル名を指定しての保存 モードの変更 チェックマークの位置を決める 状態に応してメニュー表示を変える form—keta を表示する クリップポードの状態に応じてメニュー表示を変える 選択中のテキストをクリップポードに転送する テキストボックスのデータの印刷 ファイルを開くためのダイアログボックスを表示する Mode As lnteger) Sub lmage I—DblClick() Sub item—DbICIick(Index As lnteger) Sub sword—DbICIick (lndex As lnteger) F 「 Om-BOS. f 「 m Sub Form—DragDrop (source As ControI , Y As SingIe) Sub Form—Load ( ) Sub hitB() FO 「 m—Dee. f 「 m Sub Form—DblCIick ( ) Sub Form—DragDrop (source As Control , Unload- X As Single, 鎧を捨てる 戦闘中の小休止 現在位置を変数に記録 プログラムの強制終了 アイテムを捨てる 剣を捨てる キャラクターの攻撃 表示位置の設定 キャラクターの攻撃はポスにダメージを与えたか ? 内容 内容 X As Single, 情報の表示 内容 Y As SingIe) Sub Form—Load ( ) FO 「 m-Fie . f 「 m Sub Command 3 1)—arr ℃ w—Click (lndex As lnteger) Sub daimaou ( ) Sub Form—Load ( ) Sub Form—QuerYUnload(Cancel As lnteger, Unload- Mode As lnteger) 仲間から物を受け取る、 表示位置の設定 森の中を 1 歩ずっ進む 大魔王との決着 二つ以上の起動を防ぐ 内容 プログラムの終了 もしくは商人からの買い物
ノ概要 ⑩迷いの森の RPG 迷いの森の RPG は、その名のとおり、ロールプレイングゲームです。キャラクタ 7 概要 23 ー ーの ウインドウ表示、ドラッグ & ドロップによる攻撃など、 Windows のための RPG です。 市販のゲームにはとうてい及びもつきませんが、 Visual Basic の可能性は体感してもら えると信じています。 また、プログラムは、同じような箇所が多いので、メインルーティンを重点的に解説し ます。 強さなどの数字を変化させ、リプレイするのも面白いでしよう。 ー迷いの森の RPG 6. 1 コントロ ラ / ヾノレ ール名 3 D パネル 3 D コマンドボタン コモンダイアログ 所属 標準のコントロール 標準のコントロール gauge. vbx ( カスタムコントロール ) threed. vbx ( カスタムコントロール ) threed. vbx ( カスタムコントロール ) cmdialog. vbx ( カスタムコントロール ) cmdialog. vbx には commdlg. d11 が必要ですが、添付 FD には収録してあります。
28 第一部 3 プログラムを組み立てる 3. 3 処理を実行するコードを記述する コードウインドウには、フォームウインドウに配置したコントロールの数や、メニュー の数に応じて処理を記述します。 フォームウインドウに配置したコントロールやメニューバーは、それだけでは何の処理 も行えません。クリックやドラッグによって見た目に変化することはありますが、それだ けでは何も起こりません。操作 ( イベント ) に対する処理をコードとして記述することで、 はじめて何かを起こせます。 ■コントロールとコード フォーム フォームウインドウ コ ドウインドウ コントロー コントロール a の〇〇イベントの Sub プロシージャ コントロール b の X X イベントの Sub プロシージャ sub プロシージャはそれぞれの イベントこ・とに記述する コントロー丿レ b ・・・・・・ インドウの該当箇所に記述する必要があります。 ームの上に配置するだけでは駄目です。クリックしたときの処理を次のように、コードウ とします。それだけの処理でも、「キャンセル」と表示された 3 D コマンドボタンをフォ たとえば、「キャンセル」ボタンを押してそのダイアログボックスを閉じるようにしたい
66 第一部 びプログラムの実行過程を追う ントロールごと、また用意したフォームごとに記述します。 フォームで見た目を作った後は、プログラムを動作させるためのコードを、配置したコ 実行過程を追う プロクラムの 7 イベント単位でコードを記述する コードを記述する手順は次のようになります。 0 コードを記述するフォームのフォームウインドウをアクテイプにします。 がアクテイプになります。 3 ダブルクリックしたコントロールに対する、コードを記述するためのコードウインドウ てもプログラムには何の変化も現れません。 トにだけコードを記述します。何のコードも記述されていないイベントは、それが発生し イベントすべてにコードを記述する必要はありません。何らかの処理を行いたいイベン プロシージャがいくつも存在することになります。 いに独立した存在です。フォームをいくつも使用する場合には、さらにそれごとに Sub ャというプロックに分かれているので、影響を与え合うようにとくに設計しない限り、互 Visual Basic では、それぞれのコントロールのそれぞれのイベントは、 Sub プロシージ コードの記述は、どのコントロールに対するものからはじめてもかまいません。 2 コードウインドウにコードを記述します。 ます。 どのコントロールを実行したときの処理を記述するのか決め、それをダブルクリックし
163 アラーム時計の使い方 2 5 ■ 時計の下にあるバーをクリックする ②表示される次の設定ダイアログボックスの位置変更ボタンをクリックします。 ■設定ダイアログボックスの位置変更ボタンをクリックする 定 第色日「の : 声 0 3 旧判分 C 1993 年間月 21 日 20 時 19 分 0 1993 年 1 ロ月日ロ分 0 瞿日 1 翻 6 分 0 19 年月日寺分 3 時計が次のダイアログボックスに変わるので、タイトルバーをドラッグして任意の位置 に移動します。 ・時計の変化したダイアログボックス 十 移動先 0 決定ボタンをクリックすると、ダイアログボックスが時計の姿に戻ります。 タイマーアラームを鳴らす アラーム時計には、簡易タイマー機能が用意されています。 時計の下のバーをクリックして、設定ダイアログボックスを表示します。 2 タイマーフレームの中のいずれかの数字ボタンを押すと、そばのパネルにその数値が表 示されます。その数値分後にアラームが鳴ることになります。 2.5.2
イ 3 情報を伝えるコントロール LEVEL7 ATTACK DEFENSE SPEED 0 フーリカンの能力と持ち物 も、形を変えた 3 D / ヾネル ( 迷いの森の RPG) ■迷いの森の RPG の「通常斬」や「鳥往斬」と表示されているコントロール ます。たとえば、ドラッグ & ドロップ処理の対象として使ってみても良いでしよう。 ラベルよりも見た目を大きく変化できるので、用途としてはさまざまなものが考えられ やスピンボタンなどの他のコントロールを介して値の変更を行うことになります。 ラベルと良く似た機能を持つコントロールです。ラベルと同じようにテキストボックス 3 D バネル して入力・訂正を行うことになります。 のセルに直接入力することはできません。テキストボックスなどの他のコントロールを介 グリッドの見た目は、一般的な表計算アプリケーションとよく似ていますが、それぞれ クリッド することもできなくはありませんが一般的ではありません。 などのイベントを利用することもできるので、そうした操作で直接ューザーの意志を受信 介してユーサーの意志を反映させることになります。ただし、やはり DblClick や Click リストボックスと同じで、一般的には ( 3 D) コマンドボタンなどの他のコントロールを 45 ⅱ 通常斬翩主斬 ⅱ プログラムや処理の状態などを表すためのコントロールです。見ることでそれを確認し たり、テキストボックスやスピンボタンなどの他のコントロールを介してその値を変更し たりします。
170 第二部 ーム 0 デ、イ残量監視目玉 0 : 目玉アイコンをアニメーションさせるための部品を持つメインフォ .9 ディスク残量監視目玉 タイマー これは、 イメージ す。 このメインフォームがプログラム実行時には表示されないことを表していま このメインフォームは、ドライプフォームにアイコンを提供することと、ドライプを 監視することだけしか行なわないのです。 しかし、メインフォームの画面表示は行いませんが、メモリへのロードは行います。使 う人に見えない形でドライプフォームを管理し、いくつかの処理を行うのです。野球で言 うなら、実際にプレイは行わないけれども、選手に適確な指示を与える監督のような立場 ということになります。 ab Ⅱ 3.3.2 ことになります。 ク残量を示します。プログラム実行時のタイトルバーには、そのドライプ名が表示される このドライプフォームは、使う人が設定したドライプごとに存在し、それぞれのディス を行えるようにします。 と、ウインドウ状態でゲージとラベルを使ってディスク残量を確認してもらう方法の二つ ディスク残量監視目玉では、目玉アイコンの変化によってディスク残量を知らせる方法 ラベノレ ト e Ⅳ人 ラベノレ ー指定ドライプごとに存在するドライプフォーム ドライプフォーム ( fo 「 m ー d 「 v. frm)
イとりあえず動かしてみる フォームウインドウに配置した 3 D コマンドボタンをクリックしたとき ■ の処理を、コードウインドウに記述する Fo 「 ml Fo 「 ml . f 「 m Command3D1 Sub Command3 D 1 ー引 i ck ( ) IJnload fo 「 rnl End Sub Click ) セル このように、ダイアログボックスを閉じる程度の処理なら、わすか 1 行 2 単語を記述す るだけで済みます。 1 行目と 3 行目の記述は、フォームウインドウにコントロールを配置 した時点で、自動的に用意されます。この親切さと簡潔さがプログラミングをより楽にし ます。プログラムを作る側は、細かい部分を Visual Basic にまかせつきりにできます。 重要な部分のみ十分に手をかければ良いのです。 また、フォームを使うことなく「ファイル」メニューの「新規コードモジュール」を選 択すると拡張子が bas のコードモジュールを作ることができます。 つ 3. 4 とりあえす動かしてみる VisuaI Basic によるプログラミングは、イベントと呼ばれる単位で行います。イベン トとは、ユーザーが何らかのアクションを起こしたときや、 Windows やプログラムに何 らかの変化が起きたときのことです。何らかのイベントが発生したときに、どのような処 理を行うのかをコードウインドウにそれぞれ記述していくわけです。 たとえば、「コマンドボタンが押されたとき」も「マウスポインタがウインドウもしく はダイアログボックスの上に来たとき」もイベントです。 Visual Basic にはさまざまな イベントが用意されていて、作る側はそれに応じて処理をコードで記述していくのです。 イベントに対する処理を何も記述しなくてもエラーにはなりません。ただ、何も起こら