2014-03-04 45 views
1

我的Delphi程序生成和编译好,但是,一旦它在调试模式下运行,我得到以下错误;德尔福:'物业ClientHeight不存在'

物业ClientHeight不存在

通过所有的.DFM文件源寻找后,在各种形式的代码是有它;

ClientHeight = 111

我不理解我走到哪里错了吗?

回答

5

你的表格本来会保存在一个较新版本的Delphi中。不幸的是,您需要在IDE中打开每个表单并再次保存以清除较新的属性。有一个工具可以帮助你称为DFMCheck(http://andy.jgknet.de/blog/ide-tools/dfmcheck/)。这是一个附加内容,它会遍历所有表单,并告诉您有关仅在运行时才显示的表单的任何问题。

你看到问题的原因是这样的。 Delphi保存所有属性的表单。它使用流式来在运行时加载表单。当它试图加载一个不存在的属性的表单时,你将会得到这样的错误,因为当该属性不存在时,流式系统试图设置一个组件的属性。

+0

非常感谢您的帮助!当我再次使用开发机器时,我将不得不在周四进行尝试。 – Danny

+1

如果您定期使用不同的Delphi版本,并让其中一个保存ClientHeight和ClientWidth,您可以考虑DDevExtensions(与DFMCheck位于同一站点),您可以在其中禁用在dfm中保存这些属性以与旧版本兼容。 –

+0

@Graymatter我试过再次保存表单,甚至使用DFMCheck,但是我仍然收到错误。这是我为一个名为UCWin/Road 6的程序开发的插件。当我在Delphi中调试时,ucwinroad由于没有消息的插件而崩溃。但是,如果我构建插件并将其导入uCwinroad,则会收到错误消息,指出TCPServerPlugin.ClientHeight:属性ClientHeight不存在。我不知道如何继续这个。 – Danny

1

我知道这是旧的线程,但希望这会帮助其他人有这个问题。

在这样的情况下,从其他类inheriteds,你知道的性质是有,只是重新发布它们。新增发布的部分,然后再添加它们,例如:

published 
property ClientWidth; 
property ClientHeight; 

这就迫使编译器将这些类型信息编译为父类可能具有前向声明的部分,从而解决您的问题。 希望它能帮助别人,最终花了我3天的时间才找到解决方案。