フォームを拡張しよう

例えば、コンポーネントパレットの Dialog ページにある ColorDialog は、ダイアログが表示されると、「色の作成」ボタンがあり、そのボタンを押すとダイアログが大きくなって、色の詳細を設定できるようになります。(これを試して見たい人は、まずフォームにボタンと ColorDialog を貼り付けて、ボタンの OnClick に以下のように書いてください。)

procedure TForm1.Button1Click(Sender: TObject);
begin
  if ColorDialog1.Execute then
    Color := ColorDialog1.Color;
end;

ボタンを押してみて下さい。カラーダイアログが表示されます。そこで、「色の作成」ボタンを押すとダイアログが拡張されて、色の詳細設定が出来るようになります。こんな感じにフォームを拡張出来るようにしてみましょう。まず、フォームにボタンとラベルを下の図のように貼り付けて下さい。

次にフォームのサイズを小さくしてやります。

そして、オブジェクトインスペクタでフォームのAutoScrollプロパティをFalse、BorderStyleプロパティをbsDialogにしてやります。

ここで、一旦コンパイルして実行してみて下さい。フォームのサイズが変更できないので、ボタンが2つあること、ラベルが実は貼り付けてあることなどは、ユーザーにはわからないように出来ます。初めて、何かのソフトを使用する時などに、いきなり沢山のボタン等があると、一体どれが何の役割なのかが把握しにくくなります。そこで、とりあえず最初は、ボタンなどを隠しておいて必要になった時だけ表示されるようにしておくと、とても便利でユーザーにとっても分かりやすくて、使いやすくなります。

さて、続きに戻りましょう。ここまでで、フォームの右側に貼り付けたボタンとラベルは実行時には、分からなくなりましたが、少し問題が出てきました。 それは、ボタンはフォーカスを受け取るコンポーネントなので、実行時にTabキーを押すと、ボタン1からボタン2にフォーカスが移ってしまいます。(試しにTabキーを押してみてください。ボタン1と表示されている周りにあった、四角い点線(?)がなくなります) フォーカスが移らないようにしてやるには、Enabledプロパティを使ってやります。

procedure TForm1.FormCreate(Sender: TObject);
begin
  Button2.Enabled := False;
end;

これで、ボタン2を使えないように出来ました。次に、ボタン1を押すとフォームが拡張するようにしてやります。

procedure TForm1.Button1Click(Sender: TObject);
begin
  ClientWidth := 300;
end;

300という数字は上の図にあるようにボタンを配置した場合に適切な大きさになるようにしてありますので、みなさんの場合はこの300という数字を各自のフォームの大きさに応じて適切な値に設定してください。ちなみに、縦のサイズの変更は ClientHeight で出来ます。

それでは、最後にボタン1が押された時にボタン2を使えるようにして、ボタン2のOnClickにラベルのキャプションを変更するコードを書いていきます。

procedure TForm1.Button1Click(Sender: TObject);
begin
  ClientWidth := 300;
  Button2.Enabled := True;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
  Label1.Caption := 'Delphi';
end;

up next
Last update: 2002/4/10