非常奇怪的行为:Delphi 5在我的表单上添加一个空名称的组件

时间:2011-02-19 03:48:32

标签: delphi ide

现在这是一个非常令人费解的问题,我希望你能帮助我。

我有一个源自TCustomControl的自定义组件,它包含在一个包中。此包正确编译并安装在D5中。该软件包还需要使用ImageEn库中的另一个组件库。

我有一个使用这个组件的应用程序,现在直到某天前一切似乎都很好,但现在,在对组件进行了一些最近的更改(主要是更改它使用的类型的名称)后,我有一个非常奇怪的行为正在进行中。在放置此组件的表单上,Delphi将创建我会说无缘无故的TImageEnIo组件(来自ImageEn库)甚至不包含在表单的dfm中。

更令人费解的是,这个添加的imageenio组件没有名称,因此在我尝试运行应用程序时遇到了很多麻烦(运行时错误)。如果我删除了这个组件,它会在更新某些内容时重新出现(例如,如果我在文本和dfm的形式之间切换)。 Delphi只是在任何形式上添加这个东西,我使用自定义组件。只有当我的自定义组件存在时,才会发生这种情况,包的其他组件不会产生此问题。

我注意到它为表单上的每个自定义组件创建了一个空的TImageenio,而且如果我在文本和dfmit的表单视图之间来回切换,每次我都会添加另一个imageenio组件这个。

最后问题不依赖于应用程序,因为只要我在表单上添加自定义组件,它就会在任何应用程序中发生。

现在我已经多次重新编译了imageen和我的包的所有内容,我甚至尝试恢复该组件的旧版本但问题仍然存在(我很确定我没有使用旧版本),我已经尝试了任何可以想象但我无法弄清楚的事情。我完全失去了,请建议如果您需要更多信息,请询问,我会尝试更好地解释。

非常感谢那些愿意花时间回答的人。

3 个答案:

答案 0 :(得分:3)

似乎问题是由您的自定义组件中的最近更改引入的。

您应该使用修订控制系统返回已知的正常版本。然后进入代码的中间版本,可能使用二进制搜索来提高效率。一旦你隔离了引入该错误的修订版,那么你应该能够研究该修订版中的代码更改并确定问题。

答案 1 :(得分:3)

狂野猜测:您的自定义组件使用错误的所有者直接或间接实例化TImageEnIo。它不使用Self(即自定义组件实例),而是使用其Owner属性,该属性指向它所在的表单。

答案 2 :(得分:1)

我要尝试的第一件事是启动一个新的应用程序,在运行时创建一个自定义控件,并在实例TImageEnIo组件的第三方源代码上放置断点,组件的构造函数没关系。如果在运行时也显示设计时行为,则会触发断点,并且您将能够找出从堆栈跟踪创建组件的代码部分。

否则,可以通过使用IDE的另一个实例调试IDE来调试设计时行为,但我不知道如何使用D5。