我已将TForm扩展到一个单独的单元......
TForm = class(Forms.TForm)
protected
{ convenient extensions }
public
{ more extensions }
end;
此单元(带有扩展的TForm)在我想要应用这些扩展的表格的所有单元中声明...
但是,在某些单元中有以下代码片段:
Initialization
RegisterClass(TFormN);
Finalization
UnRegisterClass(TFormN);
但是这样我收到消息[EFilerError]'一个名为TForm的类已经存在'
我花了最后几天寻找解决/解决这场冲突的方法,但没有成功......
有没有人经历过这个......?或者可以阐明为什么会出现这个问题......?
问题是我已经在2个项目中用扩展形式实现了这个单元 - 成功......
刚才,在第三个项目中,表单类是在没有实例化的情况下调用的......我无法从以下位置更改扩展类表单:
TForm = class(Forms.TForm)
到:
TStyleForm = class(Forms.TForm)
...
我需要的是:
TFormStyle = class(Forms.TForm)
public
constructor Create(AOwner: TComponent); override;
end;
TForm = ^TFormStyle;
但在单位中,我不能做出如下声明:
TMyForm = class(TForm)
{ something... }
end;
因为现在它是一个指针......
答案 0 :(得分:0)
现在,您的程序中有两种不同的类型,名称为TForm
。 VCL中声明的名称为TForm
。由于您尝试使用与VCL版本相同的名称向全局注册表注册TForm
,因此注册自然会失败。
一些可能的前进方式:
Application.CreateForm
,要么是标准构造函数TForm.Create
。您需要确保在任何使用条款中始终列出在TForm
之后声明Forms
的单位。或者使用完全范围的类型,例如MyForms.TForm
。就我个人而言,我倾向于同时做上面的1和2。
请注意,我假设您的意图是TForm
用于所有表单而不是Forms.TForm
。