Delphi:“属性 ClientHeight 不存在”

问题描述 投票:0回答:6

我的 Delphi 程序可以正常构建和编译,但是一旦在调试模式下运行,我就会收到以下错误;

属性 ClientHeight 不存在

查看所有 .DFM 文件源后,每种形式的代码都存在;

客户端高度 = 111

我不明白我哪里出了问题?

delphi properties height client dfm
6个回答
8
投票

您的表单将使用较新版本的 Delphi 保存。不幸的是,您需要在 IDE 中打开每个表单并再次保存它以清除较新的属性。有一个名为 DFMCheck 的工具可以帮助您 (http://andy.jgknet.de/blog/ide-tools/dfmcheck/)。这是一个附加组件,它将检查您的所有表单,并告诉您表单的任何问题,这些问题只会在运行时显示。

您看到问题的原因是这样的。 Delphi 保存带有所有属性的表单。它使用流式传输在运行时加载表单。当它尝试加载具有不存在属性的表单时,您将收到类似这样的错误,因为流系统正在尝试在组件上设置属性,但该属性不存在。


7
投票

我知道这是旧线程,但希望这能帮助其他遇到此问题的人。

在这种情况下,您的类继承自其他类,并且您知道属性在那里,只需重新发布它们即可。添加已发布的部分并再次添加它们,例如:

published
property ClientWidth;
property ClientHeight;

然后,这会强制编译器为父类可能具有前向声明的部分编译这些类型信息,从而解决您的问题。 希望它对某人有帮助,我花了 3 天最终找到解决方案。


5
投票

同样的错误发生在具有 FMX 框架的现代 Delphi(例如 Rio 10.3)中。经过一番调查后发现,这是由调整 TFrame 继承引起的。下面的例子:

type
  // Declaration of custom type
  TFrameEx = class(TFrame) .. {here I override a couple of methods} end;

// Causes a bug (described below)
TMyFrame = class(TFrameEx)

// Works fine
TMyFrame = class(TFrame)

说明:
由于类型更改,Delphi 无法在 FMX 和 VCL 之间正确选择 TMyFrame 类型。因此,当 TMyFrame 在 IDE 中打开时,它会要求删除 FMX 属性(VCL 中不存在,例如 Size.Width)并添加 VCL 属性(例如 ClientWidth)。保存后,这将使 TMyFrame 出现错误 - 它会在初始化时在运行时显示“Property ClientHeight does Not Exist”错误。


0
投票

有类似的错误。首先,您的框架需要一个 dfm 文件。 继承框架时,dfm 文件必须以“inherited MyFrame: TFRameEx”开头,而不是“object MyFrame: TFrameEx”。如果没有继承,当我这样做时,它会添加 TForm 属性,并且在编辑器中框架具有 TForm 事件(在 Delphi 10.3 中)。所以delphi确实需要dfm来找到正确的类型。如果你使用ide菜单,它会自动完成。 New->Others->inheritables 它将使用继承的行创建 dfm,创建一个包含 {$R *.dfm} 的文件,并在项目源“unitname in '......pas' {MyFrame TFrame};”中创建一行或者你也可以手工完成。 至于同一单元中有多个框架的可能性,我自己没有测试过,但由于该行是 {$R *.dfm} 它可能是可行的。

希望它成为对 kromster 解决方案的评论,但显然无法发表评论。


0
投票

在我的例子中,我继承了保存在Delphi 7中的TFrame,并且我更改了.dfm来解析。

第一行:“object”frmMain: TfrmMain

我改成了“继承”,像这样:继承frmMain:TfrmMain


0
投票

在 Delphi 中,转到菜单组件,然后安装 Packeges... 查找以 Embarcadeiro 开头且未选中的组件。在我的例子中,“Embarcadero DBExpress DataSnap Native Server Components”未被选中。我将其添加为书签,保存并重新启动 Delphi。完成后,Delphi 停止向源添加不存在的属性,但那些已经使用错误属性保存的属性必须手动更改。

由@DanielZanutto 更正。

© www.soinside.com 2019 - 2024. All rights reserved.