• RegisterClass与GetClass


    这是转来的一篇文章,利用GetClass与RegisterClass可以实现根据字符串来实例化具体的子类,这对于某些需要动态配置程序的场合是很有用的。其他的应用如子窗体切换,算法替换等都能得到应用。

    unit Example1;
    [Delphi] <wbr>GetClass与RegisterClass的应用一例
    [Delphi] <wbr>GetClass与RegisterClass的应用一例interface
    [Delphi] <wbr>GetClass与RegisterClass的应用一例
    [Delphi] <wbr>GetClass与RegisterClass的应用一例uses
    [Delphi] <wbr>GetClass与RegisterClass的应用一例  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
    [Delphi] <wbr>GetClass与RegisterClass的应用一例  Dialogs, StdCtrls;
    [Delphi] <wbr>GetClass与RegisterClass的应用一例
    [Delphi] <wbr>GetClass与RegisterClass的应用一例
    type

    [Delphi] <wbr>GetClass与RegisterClass的应用一例  TForm1 
    = class(TForm)
    [Delphi] <wbr>GetClass与RegisterClass的应用一例    Button1: TButton;
    [Delphi] <wbr>GetClass与RegisterClass的应用一例    
    procedure
     Button1Click(Sender: TObject);
    [Delphi] <wbr>GetClass与RegisterClass的应用一例  private
    [Delphi] <wbr>GetClass与RegisterClass的应用一例  public
    [Delphi] <wbr>GetClass与RegisterClass的应用一例  
    end
    ;
    [Delphi] <wbr>GetClass与RegisterClass的应用一例
    [Delphi] <wbr>GetClass与RegisterClass的应用一例  ILog 
    =
     interface(IUnknown)
    [Delphi] <wbr>GetClass与RegisterClass的应用一例    [
    '{A65044FC-644C-482A-BBFF-50A618835FC6}'
    ]
    [Delphi] <wbr>GetClass与RegisterClass的应用一例    
    procedure
     WriteMessage;
    [Delphi] <wbr>GetClass与RegisterClass的应用一例  
    end
    ;
    [Delphi] <wbr>GetClass与RegisterClass的应用一例
    [Delphi] <wbr>GetClass与RegisterClass的应用一例  TLog 
    =
     class(TInterfacedPersistent, ILog)
    [Delphi] <wbr>GetClass与RegisterClass的应用一例  public
    [Delphi] <wbr>GetClass与RegisterClass的应用一例    class 
    function
     CreateInstance(Name: string): TLog; overload;
    [Delphi] <wbr>GetClass与RegisterClass的应用一例    
    procedure
     WriteMessage; virtual; abstract;
    [Delphi] <wbr>GetClass与RegisterClass的应用一例  end
    ;
    [Delphi] <wbr>GetClass与RegisterClass的应用一例
    [Delphi] <wbr>GetClass与RegisterClass的应用一例  TTextLog 
    =
     class(TLog)
    [Delphi] <wbr>GetClass与RegisterClass的应用一例  public
    [Delphi] <wbr>GetClass与RegisterClass的应用一例    
    procedure
     WriteMessage; override;
    [Delphi] <wbr>GetClass与RegisterClass的应用一例  
    end
    ;
    [Delphi] <wbr>GetClass与RegisterClass的应用一例
    [Delphi] <wbr>GetClass与RegisterClass的应用一例  TXMLLog 
    =
     class(TLog)
    [Delphi] <wbr>GetClass与RegisterClass的应用一例  public
    [Delphi] <wbr>GetClass与RegisterClass的应用一例    
    procedure
     WriteMessage; override;
    [Delphi] <wbr>GetClass与RegisterClass的应用一例  
    end
    ;
    [Delphi] <wbr>GetClass与RegisterClass的应用一例
    [Delphi] <wbr>GetClass与RegisterClass的应用一例  TNullLog 
    =
     class(TLog)
    [Delphi] <wbr>GetClass与RegisterClass的应用一例  public
    [Delphi] <wbr>GetClass与RegisterClass的应用一例    
    procedure
     WriteMessage; override;
    [Delphi] <wbr>GetClass与RegisterClass的应用一例  
    end
    ;
    [Delphi] <wbr>GetClass与RegisterClass的应用一例
    [Delphi] <wbr>GetClass与RegisterClass的应用一例
    var

    [Delphi] <wbr>GetClass与RegisterClass的应用一例  Form1: TForm1;
    [Delphi] <wbr>GetClass与RegisterClass的应用一例
    [Delphi] <wbr>GetClass与RegisterClass的应用一例implementation
    [Delphi] <wbr>GetClass与RegisterClass的应用一例
    [Delphi] <wbr>GetClass与RegisterClass的应用一例
    {$R *.dfm}
    [Delphi] <wbr>GetClass与RegisterClass的应用一例
    [Delphi] <wbr>GetClass与RegisterClass的应用一例
    procedure TForm1.Button1Click(Sender: TObject);
    [Delphi] <wbr>GetClass与RegisterClass的应用一例
    var

    [Delphi] <wbr>GetClass与RegisterClass的应用一例  Log: TLog;
    [Delphi] <wbr>GetClass与RegisterClass的应用一例
    begin
    [Delphi] <wbr>GetClass与RegisterClass的应用一例  
    { 实际应用中可以从配置中读取字符串来决定实例化具体的子类 }
    [Delphi] <wbr>GetClass与RegisterClass的应用一例  Log :
    = TLog.CreateInstance('TXMLLog');
    [Delphi] <wbr>GetClass与RegisterClass的应用一例  
    if Assigned(Log) then

    [Delphi] <wbr>GetClass与RegisterClass的应用一例  
    begin
    [Delphi] <wbr>GetClass与RegisterClass的应用一例    Log.WriteMessage;
    [Delphi] <wbr>GetClass与RegisterClass的应用一例    Log.Free;
    [Delphi] <wbr>GetClass与RegisterClass的应用一例  
    end;
    [Delphi] <wbr>GetClass与RegisterClass的应用一例
    end
    ;
    [Delphi] <wbr>GetClass与RegisterClass的应用一例
    [Delphi] <wbr>GetClass与RegisterClass的应用一例class function
     TLog.CreateInstance(Name: string): TLog;
    [Delphi] <wbr>GetClass与RegisterClass的应用一例
    var

    [Delphi] <wbr>GetClass与RegisterClass的应用一例  AClass: TPersistentClass;
    [Delphi] <wbr>GetClass与RegisterClass的应用一例
    begin
    [Delphi] <wbr>GetClass与RegisterClass的应用一例  Result :
    = nil;
    [Delphi] <wbr>GetClass与RegisterClass的应用一例  AClass :
    =
     GetClass(Name);
    [Delphi] <wbr>GetClass与RegisterClass的应用一例  
    if Assigned(AClass) then

    [Delphi] <wbr>GetClass与RegisterClass的应用一例  
    begin
    [Delphi] <wbr>GetClass与RegisterClass的应用一例    Result :
    = AClass.NewInstance as TLog;
    [Delphi] <wbr>GetClass与RegisterClass的应用一例    Result.Create;
    [Delphi] <wbr>GetClass与RegisterClass的应用一例  
    end

    [Delphi] <wbr>GetClass与RegisterClass的应用一例  
    else
    [Delphi] <wbr>GetClass与RegisterClass的应用一例    
    { error handle }
    [Delphi] <wbr>GetClass与RegisterClass的应用一例
    end;
    [Delphi] <wbr>GetClass与RegisterClass的应用一例
    [Delphi] <wbr>GetClass与RegisterClass的应用一例
    { TTextLog }

    [Delphi] <wbr>GetClass与RegisterClass的应用一例
    [Delphi] <wbr>GetClass与RegisterClass的应用一例
    procedure TTextLog.WriteMessage;
    [Delphi] <wbr>GetClass与RegisterClass的应用一例
    begin

    [Delphi] <wbr>GetClass与RegisterClass的应用一例  
    //写入到文本文件
    [Delphi] <wbr>GetClass与RegisterClass的应用一例
    end
    ;
    [Delphi] <wbr>GetClass与RegisterClass的应用一例
    [Delphi] <wbr>GetClass与RegisterClass的应用一例
    { TXMLLog }

    [Delphi] <wbr>GetClass与RegisterClass的应用一例
    [Delphi] <wbr>GetClass与RegisterClass的应用一例
    procedure TXMLLog.WriteMessage;
    [Delphi] <wbr>GetClass与RegisterClass的应用一例
    begin

    [Delphi] <wbr>GetClass与RegisterClass的应用一例  
    //写入到XML文件
    [Delphi] <wbr>GetClass与RegisterClass的应用一例
    end
    ;
    [Delphi] <wbr>GetClass与RegisterClass的应用一例
    [Delphi] <wbr>GetClass与RegisterClass的应用一例
    { TNullLog }

    [Delphi] <wbr>GetClass与RegisterClass的应用一例
    [Delphi] <wbr>GetClass与RegisterClass的应用一例
    procedure TNullLog.WriteMessage;
    [Delphi] <wbr>GetClass与RegisterClass的应用一例
    begin

    [Delphi] <wbr>GetClass与RegisterClass的应用一例  
    { nothing need to do }
    [Delphi] <wbr>GetClass与RegisterClass的应用一例
    end;
    [Delphi] <wbr>GetClass与RegisterClass的应用一例
    [Delphi] <wbr>GetClass与RegisterClass的应用一例initialization
    [Delphi] <wbr>GetClass与RegisterClass的应用一例  RegisterClass(TTextLog);
    [Delphi] <wbr>GetClass与RegisterClass的应用一例  RegisterClass(TXMLLog);
    [Delphi] <wbr>GetClass与RegisterClass的应用一例  RegisterClass(TNullLog);
    [Delphi] <wbr>GetClass与RegisterClass的应用一例
    [Delphi] <wbr>GetClass与RegisterClass的应用一例finalization
    [Delphi] <wbr>GetClass与RegisterClass的应用一例  UnRegisterClass(TTextLog);
    [Delphi] <wbr>GetClass与RegisterClass的应用一例  UnRegisterClass(TXMLLog);
    [Delphi] <wbr>GetClass与RegisterClass的应用一例  UnRegisterClass(TNullLog);
    [Delphi] <wbr>GetClass与RegisterClass的应用一例
    [Delphi] <wbr>GetClass与RegisterClass的应用一例
    end.

  • 相关阅读:
    [POI2013]LUK-Triumphal arch
    [CF1149C](Tree Generator)
    NOI2018归程
    [CF191](Fools and Roads)
    [CF700E](Cool Slogans)
    我石乐志
    想题的时候不要颓废
    人不能忘耻
    反思
    中考加油!
  • 原文地址:https://www.cnblogs.com/Values/p/3571084.html
Copyright © 2020-2023  润新知