フォーム上のパネルレイアウトを動的に変更する
フォーム上に複数のパネルをレイアウトしており、そのレイアウトを動的に変更したい場合があると思います。
Delphi4以降ではドッキングがサポートされましたが、そこまでは必要ないけどパネルのレイアウトは動的に変えたいなどと言う場合には是非お試し下さい。
なお、パネル間はスプリッターで区切られていることが前提です。
以下のサンプルでは、Form1にパネルを三枚貼付けてPanel1にはRadioGroup1を乗せ、Panel2とPanel3がSplitter1で区切られているものとします。またRadioGroup1には4つのアイテム(上,左,右,下)を設定します。
一番下からサンプル(ソースのみ)をダウンロード出来ます。
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
ExtCtrls, StdCtrls;
type
TForm1 = class(TForm)
Panel1: TPanel;
Panel2: TPanel;
Splitter1: TSplitter;
Panel3: TPanel;
RadioGroup1: TRadioGroup;
procedure RadioGroup1Click(Sender: TObject);
private
{ Private 宣言 }
public
{ Public 宣言 }
end;
var
Form1: TForm1;
implementation
{$R *.DFM}
var
// RadioGroup1のインデックスに合せたTAlignを宣言
Algn: array[0..3] of TAlign;
procedure TForm1.RadioGroup1Click(Sender: TObject);
begin
inherited;
with RadioGroup1 do
begin
// 左にするときだけはSplitterを一旦AlRightにしないと
// SplitterがPanel2の左側にいってしまう
if ItemIndex = 1 then
Splitter1.Align := AlRight;
// ItemIndex毎のAlignを設定する
// Case文で各々の設定を行なってもよいが、この方がなんとなくスマート?
Panel2.Align := Algn[ItemIndex];
Splitter1.Align := Algn[ItemIndex];
end;
end;
initialization
// initializationは最初に呼ばれるためここで初期化する
Algn[0] := AlTop;
Algn[1] := AlLeft;
Algn[2] := AlRight;
Algn[3] := AlBottom;
end.