zoukankan      html  css  js  c++  java
  • Delphi使用FindClass实现动态建立对像(有点像反射)

    相关资料:http://www.blogjava.net/nokiaguy/archive/2008/05/10/199739.html 

     1 {
     2 http://www.blogjava.net/nokiaguy/archive/2008/05/10/199739.html
     3 在delphi中动态建立类的实例可分为4步。
     4 1. 声明一个从TPersistent继承的类。因为在注册类时要求必须从TPersistent继承。
     5 2. 注册类。可以使用RegisterClass等过程进行注册。
     6 3. 验证类是否被注册(可选)。如果确定要建立的类已经注册了,可以省略此步。
     7 4. 得到并建立类。可使用FindClass(classname)得到要建立的类,然后使用Create方法建立类的实例。
     8 }
     9 
    10 unit Unit1;
    11 
    12 interface
    13 
    14 uses
    15   Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
    16   Dialogs, StdCtrls, ExtCtrls, jpeg;
    17 
    18 type
    19   TForm1 = class(TForm)
    20     Button1: TButton;
    21     Edit1: TEdit;
    22     Image1: TImage;
    23     procedure Button1Click(Sender: TObject);
    24   private
    25     { Private declarations }
    26   public
    27     { Public declarations }
    28   end;
    29 
    30   TMyClass = class(TPersistent)
    31   public
    32     function GetValue: String;
    33   end;
    34 
    35 var
    36   Form1: TForm1;
    37 
    38 implementation
    39 
    40 {$R *.dfm}
    41 
    42 { TMyClass }
    43 
    44 function TMyClass.GetValue: String;
    45 begin
    46   Result := 'hello world';
    47 end;
    48 
    49 procedure TForm1.Button1Click(Sender: TObject);
    50 var
    51   class1: TMyClass;
    52 begin
    53   if GetClass('TMyClass')<>nil then
    54   begin
    55     class1 := FindClass('TMyClass').Create as TMyClass;
    56     Edit1.Text := class1.GetValue;
    57   end;   
    58 end;
    59 
    60 Initialization //可将这两行放在end.的前面
    61   RegisterClass(TMyClass);
    62 
    63 end.
  • 相关阅读:
    关于npm无法安装依赖包以及安装包缓慢的解决方法
    centos 上安装nodejs v8.0.0
    nginx 负载均衡
    关于前端
    递归函数
    多重循环
    闭包
    spring boot集成mybatis(2)
    spring boot集成mybatis(3)
    spring boot集成mybatis(1)
  • 原文地址:https://www.cnblogs.com/FKdelphi/p/5454218.html
Copyright © 2011-2022 走看看