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

标签 delphi delphi-7

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

最佳答案

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

语法 函数 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;

关于delphi - delphi 有没有办法通过名称实例化一个类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/701049/

相关文章:

image - 如何从一个PNG复制另一个PNG?

delphi - 如何检查 OleInitialize 是否已被调用?

delphi - DrawText with DT_CALCRECT - 有没有办法计算矩形的高度而不修改宽度(使用大字符串)?

delphi - Windows 7 下打开-保存对话框的问题

Delphi Loadlibrary 返回 0 (LastErrorcde=3221225616) 这是什么意思?

delphi - 我应该转向新的 Delphi XE Starter 吗?

delphi - 十六进制转二进制

Delphi - 在 dataset.enablecontrols 上的 TDBGrid 内部触发什么事件

delphi - For 循环变量违反循环界限

Delphi - 如何对表单进行换肤