unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ExtCtrls; type TForm1 = class(TForm) RadioGroup1: TRadioGroup; procedure FormMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); procedure FormCreate(Sender: TObject); procedure RadioGroup1Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation {$R *.dfm} var ClassRef: TControlClass; //TControlClass 是 TControl 的类引用 procedure TForm1.FormCreate(Sender: TObject); begin RadioGroup1.Width := 300; RadioGroup1.Columns := 3; RadioGroup1.Items.Add('Button'); RadioGroup1.Items.Add('Edit'); RadioGroup1.Items.Add('Lable'); 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; end.