【问题标题】:Delphi 7, Error when setting Form as a Parent of a BitBtnDelphi 7,将表单设置为 BitBtn 的父级时出错
【发布时间】:2013-02-06 12:25:36
【问题描述】:

当我尝试设置在运行时创建的 BitBtn 的 Parent 属性时,我在编译时遇到了一个奇怪的错误。在 Win7 64bit 上使用 Delphi 7。

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

我正在像这样在运行时创建 BitBtn:

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

这里的“Self”是表单,命名为“MainForm”。 无论我为父母做什么,我都会得到这个。我试过把当前的Form、ScrollBox、Panel。如果我尝试创建 SpeedButton,也会发生同样的情况。 问题是,当我使用 TButtons 甚至 TImages 时,我的代码按预期工作,但不使用 TBitBtns 或 TSpeedButtons。 TButtons 和 TImages 接受 Form 作为其父级,并按预期显示。 有任何想法吗? 如果有帮助,我可以根据要求提供整个代码的示例。

【问题讨论】:

    标签: delphi delphi-7


    【解决方案1】:

    您正在混合 CLX 和 VCL。您的按钮是 CLX TBitBtn,但您的表单是 VCL 表单。

    我不知道您希望您的应用是 VCL 应用还是 CLX 应用,但无论是哪一个,您都需要应用的所有部分都来自同一个框架。

    我猜你想要一个 VCL 应用程序。不知何故,您使用了 CLX 单元 QButtons,而不是 VCL 单元 Buttons。这就是为什么你会得到TBitBtn 的CLX 版本。

    所以,假设我猜对了,只需将 QButtons 更改为 Buttons 即可编译您的代码。

    【讨论】:

    • @Bogdan 经验。 TWidgetControl 来自 CLX。我知道。不能将 CLX 按钮的 Parent 设置为表单的唯一方法是该表单是 VCL 表单而不是 CLX 表单。
    • 谢谢。我认为TWidgetControl 既适用于 CLX 也适用于 VCL。自从我上次使用 Delphi 7 以来已经有很长时间了。
    • @Bogdan TWidgetControl 是 CLX 直接等效于 VCL 的 TWinControl
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-12-23
    • 1970-01-01
    • 2011-10-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-21
    相关资源
    最近更新 更多