有没有办法通过delphi中的名称实例化一个类? [英] Is there a way to instantiate a class by its name in delphi?

查看:473
本文介绍了有没有办法通过delphi中的名称实例化一个类?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想实例化一个类,但是我只能在一个字符串中使用它的名字。有没有办法?

解决方案

这是从Delphi帮助(Delphi 2006,但也可以从至少Delphi 7): / p>

语法
函数GetClass(const AClassName:string):TPersistentClass;



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



这里有一些示例代码。因为TButton是一个TControl,因此类型转换是有效的。

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

procedure TForm1.Button1Click(Sender:TObject);
var
CRef:TPersistentClass;
AControl:TControl;
begin
CRef:= GetClass('TButton');
如果CRef<> nil then
begin
AControl:= TControl(TControlClass(CRef).Create(Self));
with AControl do
begin
父级:=自我;
宽度:= 50;
身高:= 30;
结束
结束
结束


I'd like to instantiate a class but I only have its name in a string. Is there a way?

解决方案

This is from Delphi help (Delphi 2006, but also available from at least Delphi 7):

Syntax function GetClass(const AClassName: string): TPersistentClass;

Description Call GetClass to obtain a class from a class name. This class can be used as a parameter to routines that require a class. The Class must be registered before GetClass can find it. Form classes and component classes that are referenced in a form declaration (instance variables) are automatically registered when the form is loaded. Other classes can be registered by calling RegisterClass or RegisterClasses .

Here some sample code. Works as such only because TButton is a TControl and therefore the typecast is valid.

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中的名称实例化一个类?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆