類引用 (TControlClass = class of TControl) 讓變數持有「類型本身」而非實例,配合虛擬建構子 Create 實現運行時動態建立不同控件類型。
var ClassRef: TControlClass; // 類引用變數
procedure TForm1.FormCreate(Sender: TObject);
begin
RadioGroup1.Width := 300; RadioGroup1.Columns := 3;
RadioGroup1.Items.Add('Button'); RadioGroup1.Items.Add('Edit'); RadioGroup1.Items.Add('Label');
RadioGroup1.ItemIndex := 0; ClassRef := TButton; // 初始類型
end;
procedure TForm1.RadioGroup1Click(Sender: TObject);
begin
case RadioGroup1.ItemIndex of
0: ClassRef := TButton;
1: ClassRef := TEdit;
2: ClassRef := TLabel;
end;
end;
procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
var NewCtrl: TControl;
begin
NewCtrl := ClassRef.Create(Self); // 虛擬建構子動態建立
NewCtrl.Name := ClassRef.ClassName + IntToStr(Self.ControlCount);
NewCtrl.Parent := Self;
NewCtrl.Left := X; NewCtrl.Top := Y;
end;
點擊 RadioGroup 切換類型,滑鼠按下視窗任意處即建立對應控件。展示類引用 + 虛擬建構子 + 運行時型別識別 (ClassName) 的經典組合。