Delphi 7,将Form设为BitBtn的父级时出现错误

3

当我尝试设置在运行时创建的 BitBtn 的 Parent 属性时,在编译过程中出现了奇怪的错误。使用 Delphi 7 在 Win7 64bit 上。

[Error] unitMainForm.pas(70): 不兼容类型:'TWidgetControl' 和 'TMainForm'

我是这样在运行时创建 BitBtn 的:

  newButton := TBitBtn.Create(Self);
  newButton.Parent := Self;

这里的“Self”指的是名为“MainForm”的窗体。无论我将父级设置为什么,都会出现这种情况。我尝试过将当前窗体、ScrollBox、Panel作为父级,但如果我尝试创建SpeedButton时,情况也是一样的。事实上,当我使用TButton甚至TImage时,我的代码按预期工作,但是对于TBitBtn和TSpeedButton却不行。TButton和TImage接受窗体作为它们的父级,并正常显示。有什么想法吗?如果需要,我可以提供整个代码的示例。
1个回答

6
您正在混淆CLX和VCL。 您的按钮是CLX的TBitBtn,但您的表单是VCL表单。
我不知道您想要一个VCL应用程序还是CLX应用程序,但无论哪种方式,您需要使用相同框架的所有应用程序部件。
我的猜测是您想要一个VCL应用程序。 不过您已经使用了CLX单位的QButtons,而不是VCL单位的Buttons。这就是为什么您得到了CLX版本的TBitBtn
因此,假设我所猜测的正确,请简单地将QButtons更改为Buttons,然后您的代码就可以编译。

5
@Bogdan 体验。TWidgetControl 是来自 CLX 的。我知道这一点。如果表单是 VCL 表单而不是 CLX 表单,你唯一无法将 CLX 按钮的 Parent 设置为表单的方法就是这种情况。 - David Heffernan
谢谢。我以为TWidgetControl适用于CLX和VCL。自从上次使用Delphi 7以来已经很长时间了。 - Bogdan Doicin
2
@Bogdan TWidgetControl 是 CLX 直接对应于 VCL 的 TWinControl - David Heffernan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接