◆ [Delphi] TFrameを上手に使ってメンテナンス性を向上させる 5 ~メインフォームの作成~
どーもボキです。

今回は、前回までに作成した子フレームを呼び出すメインフォームを作成する。

実装するコードは以下。
Create時のフレーム作成&Init呼び出し、ボタンクリックイベントでのProc呼び出しの
どちらもFR_Commonで処理しているのがわかるだろうか?(下線部)

メインフォーム(uFM_Main.pas)のソースコード
unit uFM_Main;

interface

uses
uFR_Common,
uFR_Test1,
uFR_Test2,
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls, StdCtrls, CheckLst;

type
TForm1 = class(TForm)
Pnl_Top: TPanel;
GBx_Left: TGroupBox;
Pnl_Main: TPanel;
LBx: TListBox;
Button1: TButton;
procedure FormCreate(Sender: TObject);
procedure LBxClick(Sender: TObject);
procedure Button1Click(Sender: TObject);
private
{ Private 宣言 }
public
{ Public 宣言 }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
// ----------------------------------------------
procedure _initFrame(_FR : TFR_Common);
var
i : Integer;
begin
_FR.Parent := Pnl_Main; // フレームの親を指定
_FR.Align := alClient; //
i := LBx.Items.Add(_FR.Name); // フレーム名をリストに表示
LBx.Items.Objects[i] := _FR; // リストのObjectsにTFR_Commonのオブジェクトを格納
end;
// ----------------------------------------------
var
i : Integer;
begin
Pnl_Main.Align := alClient;
LBx.Align := alClient;

// FR_Testを作成
_initFrame(TFR_Test1.Create(Self));
_initFrame(TFR_Test2.Create(Self));

// Initを実行
for i := 0 to LBx.Count -1 do
TFR_Common(LBx.Items.Objects[i]).Init;

// FR_Test1を全面に表示
LBx.ItemIndex := 0;
TFR_Common(LBx.Items.Objects[0]).BringToFront;
end;



procedure TForm1.LBxClick(Sender: TObject);
var
i : Integer;
begin
i := LBx.ItemIndex;

// 該当するフレームを全面に表示
TFR_Common(LBx.Items.Objects[i]).BringToFront;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
i : Integer;
begin
i := LBx.ItemIndex;

// 該当するフレームのProcを実行
TFR_Common(LBx.Items.Objects[i]).Proc;
end;

end.
以下は、EXEの実行イメージ。
親フレームで処理させているにも関わらず、ちゃんと子フレームで実装した処理が実行されることが分かる。

これが、仮想メソッドをオーバーライドするってこと。
a0021757_22553231.gif
このようにTFrameを上手に利用すれば、
子フレームには、それぞれ独自処理をゴリゴリと実装でき、
それを呼び出すメインフォームでは、子フレームを意識することなく処理させることが出来る。

上手に活用して、無駄なくプログラムを管理してほしい。サンプルプログラム

[PR]
by yozda | 2011-02-12 23:16 | プログラミング | Trackback | Comments(0)
トラックバックURL : http://yozda.exblog.jp/tb/12102220
トラックバックする(会員専用) [ヘルプ]
<< [Delphi] TFrame... [Delphi] TFrame... >>