ここまで作ってきた名簿検索プログラムでは、生データ (右上のメモ) や検索過程 (右下のメモ) が利用者に丸見えでした。これらは、フォーム上の面積を有効に使うため、また利用者がデータに勝手に手を加えたり出来ないようにするために、画面上から消してしまうべきです。Visible プロパティを False にすることによって画面上から消してしまっても良いのですが、もっと根本的な解決法として、(これら作業用メモコンポーネントを) より単純な変数へと格下げしてしまいましょう。
メモコンポーネントは、TStringList 型の変数で代用することが出来ます。フォームから MemoRawData を削除し、代わりに次の1行を付け加えてください。
type TForm1 = class(TForm) ButtonNew: TButton; EditSearch: TEdit; ButtonSearch: TButton; ButtonOpen: TButton; ButtonSave: TButton; EditAdd: TEdit; ButtonAdd: TButton; EditOrgName: TEdit; Label1: TLabel; MemoMemberList: TMemo; OpenDialog1: TOpenDialog; SaveDialog1: TSaveDialog; procedure ButtonOpenClick(Sender: TObject); procedure ButtonSaveClick(Sender: TObject); procedure ButtonNewClick(Sender: TObject); procedure ButtonAddClick(Sender: TObject); procedure ButtonSearchClick(Sender: TObject); private { Private 宣言 } RawData: TStringList; // 右上のメモの代わり public { Public 宣言 } end;
そして、プログラム中の MemoRawData.Lines という記述を全て RawData へと置換してください。例えば、「開く」ボタンのイベントハンドラは次のようになります。
// 「開く」ボタン procedure TForm1.ButtonOpenClick(Sender: TObject); begin if (OpenDialog1.Execute = true) then begin RawData.LoadFromFile(OpenDialog1.FileName); // ファイル読み込み end ; end;
また、メモコンポーネントを TStringList 型の変数に置き換えた場合、フォームをクラスに退化させた時のように Create メソッドが必要です。「新規」ボタンのイベントハンドラに次のように書き加えて下さい。
// 「新規」ボタン procedure TForm1.ButtonNewClick(Sender: TObject); begin // 生データを保持する入れ物を作る RawData := TStringList.Create; RawData.Clear; RawData.Add('団体名:' + EditOrgName.Text); // 団体名を設定 end;
同様に、「検索」ボタンのイベントハンドラに次のように書き加えて下さい。
// 「検索」ボタン procedure TForm1.ButtonSearchClick(Sender: TObject); var MemberList: TStringList; // 右下のメモの代わり temp: String; // 1行取り出し用変数 i: Integer; // for 文用カウンタ begin MemberList := TStringList.Create; // 行頭が「メンバー:」である行を抽出、結果は複数行出てくる 〔後略〕
全ての置換が終わったら、プログラムを実行して、今まで通りに動作することを確認しましょう。
MemoRawData と同様に MemoMemberList を MemberList という変数へ置き換えてください。
変数 MemberList は「検索」ボタンのイベントハンドラにしか登場しません。そのため、グローバル変数ではなく、「検索」ボタンのイベントハンドラのローカル変数にすることが出来ます。また、ローカル変数で済むものは可能な限りローカル変数にする、という原則から言って、その方が望ましいのです。
type TForm1 = class(TForm) ButtonNew: TButton; EditSearch: TEdit; ButtonSearch: TButton; ButtonOpen: TButton; ButtonSave: TButton; EditAdd: TEdit; ButtonAdd: TButton; EditOrgName: TEdit; Label1: TLabel; OpenDialog1: TOpenDialog; SaveDialog1: TSaveDialog; procedure ButtonOpenClick(Sender: TObject); procedure ButtonSaveClick(Sender: TObject); procedure ButtonNewClick(Sender: TObject); procedure ButtonAddClick(Sender: TObject); procedure ButtonSearchClick(Sender: TObject); private { Private 宣言 } RawData: TStringList; // 右上のメモの代わり MemberList: TStringList; // 右下のメモの代わり public { Public 宣言 } end;
の行を削除し、代わりに「検索」ボタンのイベントハンドラの冒頭部に
// 「検索」ボタン procedure TForm1.ButtonSearchClick(Sender: TObject); var MemberList: TStringList; // 右下のメモの代わり temp: String; // 1行取り出し用変数 i: Integer; // for 文用カウンタ begin
と付け加えてください。