動的に Edit を作成する

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


up next
Last update: 2002/9/24