相关资料:
https://jingyan.baidu.com/article/bad08e1e2ec23b09c9512148.html
实例代码:
1 unit Unit1; 2 3 interface 4 5 uses 6 Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics, 7 Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Vcl.ExtCtrls; 8 9 type 10 TControlClass = class of TControl; 11 12 TForm1 = class(TForm) 13 RadioGroup1: TRadioGroup; 14 procedure FormCreate(Sender: TObject); 15 procedure RadioGroup1Click(Sender: TObject); 16 procedure FormMouseDown(Sender: TObject; Button: TMouseButton; 17 Shift: TShiftState; X, Y: Integer); 18 private 19 { Private declarations } 20 public 21 { Public declarations } 22 end; 23 24 var 25 Form1: TForm1; 26 27 implementation 28 29 {$R *.dfm} 30 var 31 CtlClassRef: TControlClass; 32 33 procedure TForm1.FormCreate(Sender: TObject); 34 begin 35 RadioGroup1.Width := 400; 36 RadioGroup1.Columns := 3; 37 RadioGroup1.Items.Add('Button'); 38 RadioGroup1.Items.Add('Edit'); 39 RadioGroup1.Items.Add('Checkbox'); 40 RadioGroup1.ItemIndex := 0; 41 CtlClassRef := TButton; 42 end; 43 44 procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton; 45 Shift: TShiftState; X, Y: Integer); 46 var 47 NewCtrl: TControl; 48 begin 49 NewCtrl := CtlClassRef.Create(Self); 50 NewCtrl.Name := CtlClassRef.ClassName + IntToStr(Self.ControlCount); 51 NewCtrl.Parent := Self; 52 NewCtrl.Left := X; 53 NewCtrl.Top := Y; 54 end; 55 56 procedure TForm1.RadioGroup1Click(Sender: TObject); 57 begin 58 case RadioGroup1.ItemIndex of 59 0: CtlClassRef := TButton; 60 1: CtlClassRef := TEdit; 61 2: CtlClassRef := TCheckBox; 62 end; 63 end; 64 65 end.