我在一个独立的单元中扩展了TForm ..。
TForm = class(Forms.TForm)
protected
{ convenient extensions }
public
{ more extensions }
end;这个单元(带有扩展的TForm)在我想要应用这些扩展的表单的所有单元中声明.
但是,在其中一些单元中,有以下代码片段:
Initialization
RegisterClass(TFormN);
Finalization
UnRegisterClass(TFormN);但是这样我就可以得到消息EFilerError‘一个名为TForm的类已经存在’
我在过去的几天里一直在寻找解决/解决冲突的方法,但没有成功.
有没有人经历过.?或者能解释为什么这个问题.?
问题是,我已经在两个项目中用扩展的形式实现了这个单元--成功地.
刚才,在第三个项目中,调用表单类时不需要实例化.我不能将扩展类表单更改为:
TForm =类(Forms.TForm)
至:
TStyleForm =类(Forms.TForm)
..。
我需要的是:
TFormStyle = class(Forms.TForm)
public
constructor Create(AOwner: TComponent); override;
end;
TForm = ^TFormStyle;但在单位里,我不能做这样的声明:
TMyForm = class(TForm)
{ something... }
end;因为现在是个指针..。
发布于 2013-06-05 12:13:08
现在,您的程序中有两种不同的类型,两种类型的名称都是TForm。在VCL中声明的是使用名称TForm注册的。由于您试图使用与VCL版本相同的名称向全局注册表注册TForm,因此注册自然会失败。
一些可能的前进途径:
Application.CreateForm,也可以是标准构造函数TForm.Create。您需要确保始终在任何uses子句中列出在TForm之后声明Forms的单元。或者使用像MyForms.TForm这样的全作用域类型。就我个人而言,我倾向于同时做上面的1和2。
请注意,我假设您的意图是您的TForm用于所有表单,而不是Forms.TForm。
https://stackoverflow.com/questions/16939532
复制相似问题