当前位置:  开发笔记 > 编程语言 > 正文

有没有办法在delphi中通过名称实例化一个类?

如何解决《有没有办法在delphi中通过名称实例化一个类?》经验,为你挑选了1个好方法。

我想实例化一个类,但我只在字符串中有它的名字.有办法吗?



1> Ralph M. Ric..:

这是来自Delphi的帮助(Delphi 2006,但至少也可以从Delphi 7获得):

语法 function GetClass(const AClassName:string):TPersistentClass;

说明 调用GetClass以从类名称获取类.此类可用作需要类的例程的参数.必须在GetClass找到它之前注册类.在加载表单时,将自动注册表单声明中引用的表单类和组件类(实例变量).可以通过调用RegisterClass或RegisterClasses来注册其他类.

这里有一些示例代码.这样工作只是因为TButton是TControl,因此类型转换是有效的.

procedure TForm1.FormCreate(Sender: TObject);
begin
  RegisterClasses([TButton, TForm]);
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  CRef : TPersistentClass;
  AControl : TControl;
begin
  CRef := GetClass('TButton');
  if CRef<>nil then
  begin
     AControl := TControl(TControlClass(CRef).Create(Self));
     with AControl do
     begin
        Parent := Self;
        Width := 50;
        Height := 30;
     end;
  end;
end;


我讲了TInterfacedPersistent,非常完美.谢谢.
如果您不想更改类层次结构,则不必使用VCL的RegisterClass机制 - 编写自己的类.只需看看Classes.pas中的TRegGroup.GetClass,TRegGroup.RegisterClass等.您可以通过抛出RegGroups图层来简化代码.
推荐阅读
乐韵答题
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有