delphi应用GetClass与RegisterClass的例子

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

unit Example1;
interface
uses
 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
 Dialogs, StdCtrls;
type
 TForm1 = class(TForm)
  Button1: TButton;
  procedure Button1Click(Sender: TObject);
 private
 public
 end;
 ILog = interface(IUnknown)
  ['{A65044FC-644C-482A-BBFF-50A618835FC6}']
  procedure WriteMessage;
 end;
 TLog = class(TInterfacedPersistent, ILog)
 public
  class function CreateInstance(Name: string): TLog; overload;
  procedure WriteMessage; virtual; abstract;
 end;
 TTextLog = class(TLog)
 public
  procedure WriteMessage; override;
 end;
 TXMLLog = class(TLog)
 public
  procedure WriteMessage; override;
 end;
 TNullLog = class(TLog)
 public
  procedure WriteMessage; override;
 end;
var
 Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
var
 Log: TLog;
begin
 { 实际应用中可以从配置中读取字符串来决定实例化具体的子类 }
 Log := TLog.CreateInstance('TXMLLog');
 if Assigned(Log) then
 begin
  Log.WriteMessage;
  Log.Free;
 end;
end;
class function TLog.CreateInstance(Name: string): TLog;
var
 AClass: TPersistentClass;
begin
 Result := nil;
 AClass := GetClass(Name);
 if Assigned(AClass) then
 begin
  Result := AClass.NewInstance as TLog;
  Result.Create;
 end
 else
  { error handle }
end;
{ TTextLog }
procedure TTextLog.WriteMessage;
begin
 //写入到文本文件
end;
{ TXMLLog }
procedure TXMLLog.WriteMessage;
begin
 //写入到XML文件
end;
{ TNullLog }
procedure TNullLog.WriteMessage;
begin
 { nothing need to do }
end;
initialization
 RegisterClass(TTextLog);
 RegisterClass(TXMLLog);
 RegisterClass(TNullLog);
finalization
 UnRegisterClass(TTextLog);
 UnRegisterClass(TXMLLog);
 UnRegisterClass(TNullLog);
end.

时间: 2024-09-21 16:55:41

delphi应用GetClass与RegisterClass的例子的相关文章

Delphi写Sql2000扩展存储过程的例子

library project1; uses Windows, SysUtils, MSODSApi; ...{$R *.res} Function GetParamStr(pSrvProc: SRV_PROC; Index : integer; Var Param : String ) : integer; var PType : Byte; cbMaxLen , ParaLen : DWORD; IsNULL : BOOL; begin Result := NO_ERROR; srv_par

JavaScript面向对象的支持(4)

javascript|对象 ================================================================================Qomolangma OpenProject v0.9 类别    :Rich Web Client关键词  :JS OOP,JS Framwork, Rich Web Client,RIA,Web Component,          DOM,DTHML,CSS,JavaScript,JScript 项目发

VB.NET轻松操作注册表

注册表 在.NET中操作注册表, 和VS STUDIO 时代,真是不可同日而语, .NET 之前的操作, 要引入大量的 API 函数,含有键值类型, 错误类型等, 繁琐的要死, 而.NET中,实现起来的简单程度,已经和 DELPHI 基本相同了,下面通过例子体验一下: 代码:------------------------------------------------------------------------------------Imports Microsoft.Win32.Regi

PL/SQL学习笔记(二)

定义并使用变量 PL/SQL有四种类型:标量类型,复合类型,引用类型(reference),LOB(Large Obejct)类型 一.标量类型 最常用的就是标量类型,是指只能存放单个数值的变量,包括数字类型.字符类型.日期类型和布尔类型,每种类型又包含相应的子类型. 常量标量类型如下:   VARCHAR2 (n) , CHAR (n), NUMBER (p,s),DATE, TIMESTAMP , LONG , LONG   RAW ,BOOLEAN,BINARY_INTEGER(仅PL /

Javascript 面向对象特性_javascript技巧

1. JavaScript中的类型 -------- 虽然JavaScript是一个基于对象的语言,但对象(Object)在JavaScript中不是第一型的.JS 是以函数(Function)为第一型的语言.这样说,不但是因为JS中的函数具有高级语言中的函 数的各种特性,而且也因为在JS中,Object也是由函数来实现的.--关于这一点,可以在 后文中"构造与析构"部分看到更进一步的说明. JS中是弱类型的,他的内置类型简单而且清晰: ------------------------

求中国移动cmpp2.0的例子,最好是delphi的,谢谢啊

问题描述 求中国移动cmpp2.0的例子,最好是delphi的,谢谢啊我的qq391853298,电话13777421761,胡先生 解决方案 解决方案二:我有VC++代码,需要联系我

DELPHI 调用 Oracle 存储过程并返回数据集的例子.

oracle|存储过程|数据 环境: Win2000 + Oracle92 一.先在 Oracle 建包     CREATE OR REPLACE PACKAGE pkg_test     AS        TYPE myrctype IS REF CURSOR;        PROCEDURE get(i_test INTEGER,p_rc OUT myrctype);     END pkg_test;        CREATE OR REPLACE PACKAGE BODY pkg

Delphi FireDAC 下的 Sqlite(二) 第一个例子

为了方便测试, 我把官方提供的 C:\Users\Public\Documents\Embarcadero\Studio\14.0\Samples\data\FDDemo.sdb 复制了一份到 C:\Temp\FDDemo.sdb. {新建一个 VCL Forms Application, 然后添加如下控件(建议按 Ctrl + . 后用键盘输入添加):} TFDPhysSQLiteDriverLink // 用于驱动自动连接; 不同数据库各对应一个: TFDPhys****DriverLink

Delphi自定义消息应用例子

现在很多的应用程序都有这样一种功能,当用户选择最小化窗口时,窗口不是象平常那样最小化到任务栏上,而是"最小化"成一个任务栏图标.象FoxMail 3.0 NetVampire 3.0等都提供了这样的功能. 实现这样的功能实际上并不复杂,在窗口最小化时,窗口会发出WM_SYSCOMMAND消息,你只要需要截取Windows的WM_SYSCOMMAND消息,在窗口最小化时隐藏窗口并调用WindowsAPI函数Shell_NotifyIcon将定义的图标添加到任务栏上,Shell_Notif