关于TPersistentClass使用时遇到的难理解的问题?

haozi 2002-04-03 02:11:08
var
frmSPOut :TFrmOut;
dForm : TPersistentClass;
begin
dForm := GetClass(TFrmSentOut);
frmSPOut := TFrmOut(dForm.Create).Create(self);
end;

问TFrmOut(dForm.Create).Create(self)怎么理解?这里dForm.Create创建了什么?
...全文
177 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
王集鹄 2002-04-23
  • 打赏
  • 举报
回复
dForm: TPersistentClass; //她的类型是TPersistentClass不是TFormClass
王集鹄 2002-04-23
  • 打赏
  • 举报
回复
//类也是一种对象

procedure TForm1.Button1Click(Sender: TObject);
var
vForm: TForm;
vFormClass: TFormClass;
begin
RegisterClasses([TForm1]); //注册类

vFormClass := TFormClass(GetClass('TForm1')); //找到一个持久性类并强制转换成TFormClass
if not Assigned(vFormClass) then Exit;
vForm := TForm(vFormClass.Create(Self));
try
vForm.Left := TForm(vForm.Owner).Left + 10;
vForm.Top := TForm(vForm.Owner).Top + 10;
vForm.ShowModal;
finally
vForm.Free;
end;

UnRegisterClasses([TForm1]); //注消类
end;

procedure TForm1.Button2Click(Sender: TObject);
var
vPersistentClass: TPersistentClass;
vForm: TForm;
begin
RegisterClasses([TForm1]); //注册类

vPersistentClass := GetClass('TForm1');
if not Assigned(vPersistentClass) then Exit;
vForm := TForm(vPersistentClass.Create).Create(Self);
try
vForm.Left := TForm(vForm.Owner).Left + 10;
vForm.Top := TForm(vForm.Owner).Top + 10;
vForm.ShowModal;
finally
vForm.Free;
end;

UnRegisterClasses([TForm1]); //注消类
end;

procedure TForm1.Button3Click(Sender: TObject);
var
vPersistentClass: TPersistentClass;
vForm: TForm;
begin
RegisterClasses([TForm1]); //注册类

vPersistentClass := GetClass('TForm1');
if not Assigned(vPersistentClass) then Exit;
vForm := TFormClass(vPersistentClass).Create(Self);
try
vForm.Left := TForm(vForm.Owner).Left + 10;
vForm.Top := TForm(vForm.Owner).Top + 10;
vForm.ShowModal;
finally
vForm.Free;
end;

UnRegisterClasses([TForm1]); //注消类
end;

haozi 2002-04-03
  • 打赏
  • 举报
回复
为什么只用dForm不行?
haozi 2002-04-03
  • 打赏
  • 举报
回复
原代码是有引号的

我主要是不懂dForm.Create 产生了什么? 如果只用dForm行吗?
newwen 2002-04-03
  • 打赏
  • 举报
回复
应该是dForm := GetClass(“TFrmSentOut”);//有引号,string型
也可用FindClass
newwen 2002-04-03
  • 打赏
  • 举报
回复
应该是dForm := GetClass(‘TFrmSentOut’);//有引号

GetClass返回指定的类(已注册),dForm.Create其实等同于dForm(GetClass已经Create了dForm,dForm.Create中什么也没做),然后用该类生成一个实例,这么做可以在窗体单元注册窗体类,而主窗体不必uses一大堆单元
随便说说最近项目中的三层架构吧。讲点实际的东西。我最讨厌空讲道理。网上讲道理的太多了,不喜欢举例子。 大多数文章中都或多或少的讲到了三层架构。表示层,业务层,数据层。又把业务层再细分,分为外观服务层,主业务服务,及数据库库服务层。 今天主要讨论一下业务层吧。举个最简单的例子。客户端获取数据。 业务层要与表示层尽量解藕, 我的方法是:首先我们在中间层TLB_中定义一个接口 IBusinessService, 定义一个方法。getvoList,我要得到一个VO的列表, VO即ValueObject, 例如:TValueObject= class(TPersistent) private b_insertFlag :Boolean; b_updateFlag :Boolean; b_deleteFlag :Boolean; d_rowVersion :double; procedure setInsertFlag(pInsertFlag :Boolean); function getInsertFlag: Boolean; procedure setUpdateFlag(pUpdateFlag :Boolean); function getUpdateFlag: Boolean; procedure setDeleteFlag(pDeleteFlag :Boolean); function getDeleteFlag: Boolean; procedure setRowVersion(pRowVersion :double); function getRowVersion:double; protected function GetOLEData: OleVariant; virtual; procedure SetOLEData(const Value: OleVariant); virtual; published property bInsertFlag: Boolean read getInsertFlag write setInsertFlag; property bUpdateFlag: Boolean read getUpdateFlag write setUpdateFlag; property bDeleteFlag: Boolean read getDeleteFlag write setDeleteFlag; property dRowVersion: double read getRowVersion write setRowVersion; property POLEData:OleVariant read GetOLEData write SetOLEData; end;TUserVO = class(TValueObject) private id: string; name: string; password: string; 。。。。。。。。。。 VO的列表:TValueObjectList = Class(TObjectList) private ValueObject: TValueObject; ClassName: TClass; procedure setClassName(pTmpClsName :TClass); function getClassName: TClass; procedure setValueObject(pTmpVO :TValueObject); function getValueObject: TValueObject; protected function GetOLEData: OleVariant; virtual; procedure SetOLEData(const Value: OleVariant); virtual; published function AddItem(index: integer; AObject: TObject ):Integer; virtual; function GetItem(index, itemid: integer ): TObject; virtual; function CountItem:Integer; virtual; public constructor Create; virtual; destructor Destroy; override; procedure AfterConstruction; override; property PClassName: TClass read getClassName write setClassName; property POLEData: Ole

5,939

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧