フォーム上のパネルレイアウトを動的に変更する

フォーム上に複数のパネルをレイアウトしており、そのレイアウトを動的に変更したい場合があると思います。
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.

サンプルプロジェクトのダウンロード(1,424byte)