日曜日にBCB!



Do It Yourselfでひとつプログラムでも作ってみませんか。


第4話「データの流れ道」

第2話で「アルゴリズムとはデータの流れである」と言いました。データは生物です。画面で入力されたデータをさまざまに加工し、核となるアルゴリズムで処理し、再度加工して出力する。この流れをプログラムの中で明確にする必要があります。
寿分割を構成するコントロールにデータの取り扱いを割り当てます。 データフローダイアグラム このように個々のコントロール必要なデータを割り当てることにより、データの所在とその流れが明らかになります。ここで「所在」は「責任」と言い換えることができます。誰が責任を持ってデータを保持するのか、これは組織構造よく似ています。データの責任がはっきりすると、プログラムの動きからデータの流れが明らかになります。データの流れ図(データフローダイアグラム)を示します。

イベントが発生すると図のようにデータが流れます。 データフローダイアグラムには書いていませんが、分割ファイルクリアのイベント(「ファイル」「新規作成」メニュー選択)は分割元ファイル名と分割先ファイル名一覧をクリアします。


1.44Mって何バイト?

さて、ここで問題です。1.44Mフロッピーディスクには何バイトのデータが入るでしょうか?
正解は1,457,664バイトです。フォーマット済みの2HDフロッピーディスクのドライブプロパティーを開くと表示されます。720Kフロッピーディスクには728,832バイト入ります。1,457,664バイトや728,832バイトは固定データです。これらのデータはどこに記憶すればよいでしょうか。
  1. プログラム中に埋め込む
    一般的な方法です。しかしこの方法だと分割サイズメニューを見て、該当するサイズをプログラム中から読み取る必要があります。
  2. データファイルに書き込む
    プログラムをフレキシブルにするためには、固定データはできるだけプログラム外で定義することが必要です。しかし、フロッピーディスク容量は変更される可能性は極めて低く、プログラムのファイル構成を単純化するという面からは不利です。
  3. メニューに組み込む
  4. BCB特有の方法です。メニューに限らず多くのコントロールにはTagプロパティというものがあります。ここには整数値を自由に記憶できます。Tagプロパティはオブジェクトインスペクタでも設定できますので、メニュー設計時にSize1440MNUTagに1,457,664を、Size0720MNUTagに728,832を設定します。こうすると選択されているメニューコントロールさえ選られれば分割サイズをダイレクトに得ることができます。
寿分割では「メニューに組み込む」方法を採用します。2つのメニューのTagプロパティをオブジェクトインスペクタで設定します。
コントロール Size1440MNU Size0720MNU
Tag 1457664 728832


イメージはカッコ良く

データフローダイアグラムまで設計が終わりました。これでプログラミングを開始できます。が、その前にGUIのGを作りましょう。こちらはアルゴリズムとは全く関係ありません。
寿分割に必要なイメージは、 イメージリスト 以上の3つです。プログラムのアイコンは16×16ドットのものも同時に登録できるようですが、残念ながらBCB3では標準的な方法ではできません。また、リストビューに表示する分割ファイルと結合バッチファイルのイメージには大きいアイコン表示をするためには32×32ドットのものも必要になります。ここでは詳細表示にのみ使用する小さいアイコンだけを作成・登録しておきます。これらイメージは自由に作成してください。基本的には内容が憶測できるものが好ましいでしょう。

イメージを作るのが面倒な方は、こちらから私が作ったものをダウンロードできます ダウンロード(706バイト)。ご自由にお使いください。

作ったイメージをBCBに登録します。アイコンは「プロジェクト」「オプション」「アプリケーション」で、ファイルのビットマップは16×16ドット用イメージリストコンポーネント(SmallIconIMG)に追加し、それそれに登録します。
リストビュー(ListVEW)のSmallImagesプロパティにSmallIconIMGを設定します。
コントロール SmallIconIMG
Height 16
Width 16
イメージ0 16×16分割ファイル
イメージ1 16×16結合バッチファイル


イメージはカッコ良くU

バージョン情報画面 ついでにバージョン情報画面も作ってしまいましょう。こちらもアルゴリズムとは全く関係ありません。プログラムのバージョンを表示する画面です。BCBで「ファイル」「フォームの新規作成」を選択し、AboutDLGと名づけます。この画面はご自由にデザインしてください。
バージョン情報画面を閉じるボタンを一つ設けます。この画面はメイン画面MainWNDからモードレスに表示しますので、ボタンを押すと画面を閉じるようにモーダル結果を設定します。このようにするとバージョン情報画面に画面を閉じるプログラミングをする必要がなくなります。
ではメイン画面MainWNDからバージョン情報画面を使用できるようにします。作成したバージョン情報画面AboutDLGをファイルに保存します。次にメイン画面をアクティブにして「ファイル」「ユニットを使う」でこの画面を選択します。
メイン画面MainWNDから「ヘルプ」「バージョン情報」メニューを選択します。プログラムエディタに切り替わりますので、1行追加します。
//---------------------------------------------------------------------------
void __fastcall TMainWND::AboutMNUClick(TObject *Sender)
{
    AboutDLG->ShowModal();    // この1行を追加
}
//---------------------------------------------------------------------------
実行するとバージョン情報画面が表示されるはずです。表示位置はバージョン情報画面AboutDLGPositionで簡易的にコントロールできます。

こちらから今回作成したBCBのプロジェクト一式をダウンロードできます。ダウンロード(6,128バイト) BCBのバージョン3、4、5でビルドできます。参考にしてください。


次回はいよいよプログラミングに着手します。BCBのオブジェクト指向が生きてきます。ご期待ください。

今回のプログラミング行数: 1行
今回までのプログラミング行数: 2行


目次に戻る目次に戻る トップに戻るトップに戻る