クラスを変数で渡す

クラスを関数の引数で渡したい場合があります。
その場合どうやって記述すればよいのか??Object Pascalには「クラス参照型」と言う型があります。 これを使うとスマートに解決できます。
詳細はヘルプの「クラス参照型」を参照して下さい。
以下の例は手作りの手続き「CreateNewForm」にフォームのクラスを渡しています。

■ クラス参照型を使った例
type
  TTest  =  class of TCustomForm;
  TForm1 =  class(TForm)
    Button1: TButton;
    CheckBox1: TCheckBox;
    procedure Button1Click(Sender: TObject)
  private
    {Private 宣言}
    procedure CreateNewForm(FormClass: TTest);
  public
    {Public 宣言}
  end

var
  Form1: TForm1

implementation

uses
  Unit2, Unit3;

{$R *.DFM}

procedure TForm1.Button1Click(Sender: TObject);
begin
  if  CheckBox1.Checked then  begin
    CreateNewForm(TForm2);
  end else begin
    CreateNewForm(TForm3);
  end;
end;

procedure TForm1.CreateNewForm(FormClass :TTest);
var
  Form  : TCustomForm;
begin
  Form      :=    FormClass.Create(Self);
  Form.ShowModal;
  Form.Release;
end;