如何根据名字来动态创建对象

字体大小: 中小 标准 ->行高大小: 标准
我希望根据一个字符串,来创建该类的对象,例如我给定'TButton',那么能在运行的时候,动态创建Button出来?不要告诉我用if来判断或者用case来判断等等~,那样的话,有几百个控件的话,岂不是晕倒?

请参考下面的代码,下面的代码演示了三种控件的动态创建,若需要动态创建其他的,请修改那个数组常量即可:

function DynCreateControlByName(AClassName: string; AOwner: TWinControl = nil): TControl;

const

/// You can add any class if you want!

ControlClass : array[0..2] of TPersistentClass = (TButton, TEdit, TLabel);

var

Cls : TControlClass;

begin

Result := nil;

RegisterClasses(ControlClass);

Cls := TControlClass(GetClass(AClassName));

if Cls = nil then exit;

Result := Cls.Create(AOwner);

end;

procedure TForm1.Button1Click(Sender: TObject);

var

Control : TControl;

begin

Control := DynCreateControlByName(Edit1.Text);

if Control <> nil then

with Control do

begin

Parent := Self;

Left := Random(Self.Width) - Width;

Top := Random(Self.Width) - Height;

Perform(WM_SETTEXT,Length(Edit1.Text),integer(pchar(Edit1.Text)));

Show;

end;

end;

---------------------------------------

procedure TForm1.Button2Click(Sender: TObject);

begin

TWinControlClass(FindClass('TQRDBText')).Create(Self);

end;

initialization

RegisterClasses([TQRDBText]);

finalization

UnregisterClasses([TQRDBText]);

end.

此文章由 http://www.ositren.com 收集整理 ,地址为: http://www.ositren.com/htmls/67922.html