Delphi:决定在运行时创建哪个组件

时间:2014-12-26 09:10:12

标签: delphi oop

问题:

表单应该具有可视组件。

同一组件的2个版本具有相同的祖父级。每个都允许不同类型的功能。

根据配置参数,应在表单加载时加载正确的组件。 默认情况下,组件中的一个在设计时出现在表单上。在运行时,应用程序需要决定是保留此组件还是丢弃它,并使用与前一个组件相同的事件处理程序和属性加载其他组件,并使其具有一些允许其他功能的组件。它们不是来自同一继承分支。

以OOP术语:

TGrandParent - > TParent - > TDesiredComponent1(在设计时出现。默认加载。) TGrandParent - > TDesiredComponent2(需要根据配置加载

如果我尝试在运行时创建两个组件,它就可以正常加载组件。问题是,有很多事件处理程序附加到它上面,并且有大量这样的组件。

如果可以在一个地方简洁地完成,那将是非常好的。任何想法如何实现这一目标?

2 个答案:

答案 0 :(得分:0)

这就是我最终做的事情 - 创建2个版本的component1。一个保留旧行为,一个继承自component2。我需要保留旧版本,因为全局更改组件仍然在新继承之后在某些地方出现问题。任何更好的解决方案都会有所帮助,但这似乎工作得很好,但没有检查内存/性能问题。 感谢您的帮助。

答案 1 :(得分:-1)

我使用TReader.OnCreateComponent事件来做这样的伎俩。但一般来说,我更喜欢更清晰明智的设计。

老实说,一旦我使用了一个更有趣的技巧:在运行时我找到一个Component1 VMT并更改它,所以当调用Component1.NewInstance / Create时,Component2.NewInstance / Create已经真正执行了。它肯定会解决你的问题:)