2012-08-10 44 views
2

我想构建一个自定义组件,它可以管理一系列操作并触发多个事件。我需要管理数据库连接和其他几个设计时间组件。 (TQuery,TTable等)我想用IDE接口来设置一些这些元素。我的自定义组件应该从TDataModule下降吗?

思路:

  1. 是否来自相同的方式DataModule的继承给我把 这些组件时,我设计的组件的地方吗? (我不怀疑, 但有没有办法让我的CustomComponent表现为一个DataModule的 设计时,而不是在它的使用?)
  2. 我应该有我的自定义组件简单地从TComponent下降,但包含 TDataModule对象并添加我需要的组件?
  3. 我应该装袋这个概念,只是手动创建我需要的组件?
  4. 您的解决方案使您比我更聪明。

回答

2

不,原因很简单:Delphi XE中的IDE中存在一个错误,它导致窗体设计器将继承自TDataModule的类看作是继承自TForm的类,而不是它们。这意味着一堆与TForm相关的属性将被写入到您的DFM中,当它尝试加载数据模块时,这将最终在运行时引发异常。

如果不是这个bug,那将是一个好主意。

+0

然后你会提出类似选项2的东西吗?为了在设计我的自定义组件时让Delpi的设计时间受益,让我的自定义组件使用数据模块? – 2012-08-10 21:19:05

+0

@EricG:是的,这可能是一个更好的主意。 – 2012-08-10 21:29:53

3

我建议你忘记试图设计组件在视觉上。它是一个非可视化组件,因此只需从TComponent中派生出来,并根据需要创建/管理数据库组件。根本不需要使用TDataModule。这应该保留给最终用户在他们自己的项目中使用,而不是组件作者在其非可视组件中使用。

+0

那么在这种情况下,我是创作者和最终用户。我只是试图让我的代码尽可能容易重用。 – 2012-08-10 21:52:36

+0

“根本不需要使用TDataModule,应该保留给最终用户在他们自己的项目中使用,而不是让组件作者用在他们的非可视化组件中。” 似乎有很多支持这个想法。你能向我解释为什么我不应该在组件内使用'TDataModule'? – 2012-08-13 20:56:09

+0

由于组件本身浪费了开销,而且AFAIK无法让组件利用IDE内嵌的设计时编辑器为嵌入式DataModule提供优势。这只适用于IDE为项目管理的DataModules。如果您想直观地设计组件的内容,则必须创建自己的设计时编辑器,以根据需要操纵组件实例。 – 2012-08-13 21:52:41