|
フレームは一つフォームファイルに集中しがちなイベントハンドラを効率よく分割できる便利な機能だけどそのままでは使いづらく落とし穴にはまりがちなので注意点をまとめてみる。
以上の問題を解決した薄いラッパーライブラリのサンプルの抜粋 フォーム側のコード。Frame_で始まる手続き・関数はFrameExユニットのもの。 // uses に FrameEx を追加
type
TForm1 = class(TFormEx) // 継承元をTFormExに変更
...
private
{ Private 宣言 }
// フレームインスタンスを保持する変数を宣言
FrameLog: TFrameLog;
FrameTreeView: TFrameTreeView;
public
{ Public 宣言 }
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
// フレームインスタンスを生成
FrameLog := Frame_Create(
TFrameLog, // フレーム型を指定
Self, // Ownerを指定
TabSheetLog, // Parentコントロールを指定。ここではタブシート
alClient // 100% 設定し忘れるのでここでFrame.Alignを指定するとよい
) as TFrameLog;
FrameTreeView := Frame_Create(TFrameTreeView, Self, Panel1, alClient) as TFrameTreeView;
end;
TFrameExを継承したくない場合は以下の手続きをフォームのイベントハンドラから明示的に呼び出す。 procedure Frame_CallShow(AOwnerForm: TComponent); procedure Frame_CallHide(AOwnerForm: TComponent); procedure Frame_CallDestroy(AOwnerForm: TComponent); procedure Frame_CallClose(AOwnerForm: TComponent); // procedure Frame_CallCreate(AOwnerForm: TComponent); これはFrame_Createから自動的に呼ばれる。 フレーム側のコード。[ファイル|新規作成|その他]フレームで作成したフレーム。 type
TFrameLog = class(TFrame)
... // ここまでは普通のフレームのコード
published
// イベントハンドラ相当のメソッドをpublishedで宣言する
// FrameExユニットでは以下の5つをサポート
procedure DoCreate;
procedure DoDestroy;
procedure DoShow;
procedure DoHide;
procedure DoClose;
end;
添付のサンプルは左側のPanel1にツリービューのフレームを埋め込み、下のPageControl1のTabSheetLogにログ出力用のListViewを埋め込んだもの。 |
DelWiki 内検索広告 |