今回は、コンポーネントパレットからフォームにコンポーネントを配置するのではなく、動的に Edit を作成するようにしてみましょう。また、作成した Edit に入力された文字を表示出来るようにもしてみます。フォームに Button を2つ貼り付けて下さい。ここでは Button1 で実際に Edit を作成して、Button2 で、その Edit に入力されている文字を表示させるようにしてみたいと思います。
プログラムは以下のようになります。unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class(TForm) Button1: TButton; Button2: TButton; procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); procedure FormCreate(Sender: TObject); private { Private 宣言 } public { Public 宣言 } end; var Form1: TForm1; MyEdit: TEdit;// 追加 implementation {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject); begin // Edit を作成 MyEdit := TEdit.Create(Self); // オーナーをフォームに設定 MyEdit.Parent := Self; // 親をフォームに設定 MyEdit.Text := 'MyEdit'; MyEdit.Left := 10; MyEdit.Top := 10; Button1.Enabled := False; // 再び Edit を作成出来ないようにする Button2.Enabled := True; end; procedure TForm1.Button2Click(Sender: TObject); var s: string; begin s := MyEdit.Text; ShowMessage(s); // Edit に表示されている文字を表示 end; procedure TForm1.FormCreate(Sender: TObject); begin Button2.Enabled := False; // 最初は使用不可に end; end.
ここで、少し注意しなければならないのは、Edit が作成される前に、Button2 が押されることが無いようにしなければなりません。 実際に Edit を作成する際、この Edit のオーナー( Owner ) と親 ( Parent ) を設定しました。このオーナーは、作成された Edit を使い終わったら破棄する役割を持っています。ですから、Edit の破棄に関しては気にする必要はありません。自動的に行われます。