15番会議室「FAQ編纂委員会」に寄せられた「よくある質問の答え」
[Q]
フォームにコンポーネントを配置するのに、設計時ではなく実行時に動的に
配置する事は出来るのでしょうか?
[A]
コントロールの変数を宣言、コントロールの生成、プロパティ、メソッドの定
義、
といった順番で行います。
以下の例を参考にして下さい。フォームにはまずボタンを一つ置き(Button1)
これをクリックすると新たなボタンコントロール(NewBtn)を作成するようにし
ます。
var
NewBtn: TButton;
procedure TForm1.Button1Click(Sender :TObject);
begin
NewBtn := TButton.Create(self);
NewBtn.Parent := self;
NewBtn.Caption := 'NewButton'l
NewBtn.Left := 10;
NewBtn.Top := 10;
NewBtn.Width := 150;
NewBtn.Height := 30;
NewBtn.OnClick := NewBtnClick;
end;
procedure TForm1.NewBtnClick(Sender: TObject);
Begin
{NewBtnが押された時の処理}
End;
1行目の(Self)とは、この場合NewBtnのオーナーがTForm1である事を示して
います。たいていの場合オーナーはSelfでいいと思います。
2行目のParentは、NewBtnの親を示しています。フォームに直接貼り付けたい
時は、selfで良いですし、フォームにパネル(Panel1)があって、その上に貼り
付けたければ、NewBtn.Parent := Panel1; というようにします。
*親と、オーナーの違いについてはヘルプを参照して下さい。
3、4行目で Left、Top プロパティを指定していますが、これは2行目で
指定した親コントロールの左上からの相対座標になる事に注意して下さい。
フォームだとクライアント領域の左上からの相対位置です。
最後の行で、クリックされた時のメソッドを指定しています。指定しないと
当然クリックしても何も起こりません(^^)。この要領でその他のメソッドも
(必要であれば)指定して下さい。
この例では、オーナーはフォームなので、フォームが破棄される時には、
NewBtnも一緒に破棄されます。NewBtnだけを消したければ
NewBtn.Free; とやればいいです。
ここにあるドキュメントは NIFTY SERVEの Delphi Users' Forum FDELPHIに寄せられる質問の中から、よくある質問への回答を FDELPHIのメンバーがまとめたものです。 したがって、これらの回答はボーランド株式会社がサポートする公式のものではなく、掲示されている内容についての問い合わせは受けられない場合があります。
Copyright 1996-1998 Delphi Users' ForumFAQ編纂委員会
|