今回は、コンポーネントパレットからフォームにコンポーネントを配置するのではなく、動的に 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 の破棄に関しては気にする必要はありません。自動的に行われます。