gpt4 book ai didi

delphi - Delphi (CM_) 中的组件消息和自定义图形 DesignTime 组件

转载 作者:行者123 更新时间:2023-12-02 07:42:17 24 4
gpt4 key购买 nike

我想在Delphi中创建一个在某种程度上可编辑的图形组件在设计时编辑器内。

我想知道

  • 我应该继承什么组件(例如 TWinControl 或其他)
  • 如何处理组件消息 (CM_xxx),以便能够在编辑器中移动我的组件
  • 是否可以在设计时编辑器中使用 native Windows 组件,然后在运行时切换到其他组件。

我希望能够(如果有必要的话)在运行时切换到其他类型的组件是因为我打算使用的组件是来自 Graphics32 库的 TBitmap32,它比标准 Windows 图形快很多倍,但是 TBitmap32一开始就不是从 TWinControl 继承的。

如果可能的话,我也许可以做一些事情,比如在设计时使用标准 VCL,然后获取它的属性并将它们应用到 TBitmap32。

示例:在设计时,我使用可以四处移动的 TImage,当我运行应用程序时,它会获取 X 和 Y 值以及 TImage 中的位图,并将它们应用到 TBitmap32 组件,并将 TBitmap32 组件绘制到需要绘制的位置.

代码可能如下所示:TMyBMP= 类(TImage) 私有(private)的 fResultBMP:TBitmap32;......

希望您能理解,谢谢!

最佳答案

我不会在设计时和运行时使用不同的组件。这只会使您的组件设计变得过于复杂。您在运行时使用的内容应该与您在设计时使用的内容相同。

我要做的是让您的组件包含一个 TBitmap32 成员,重写 Paint() 方法以在运行时和设计时绘制位图,然后响应 CM_DESIGNHITTEST 消息,以便您的组件可以在设计时当鼠标悬停在位图上时对鼠标事件使用react。然后,您可以重写标准 MouseDown/Move/Up() 方法来根据需要操作位图定位/大小调整(在这些方法中,您可以通过检查组件的csDesigning 标志的 ComponentState 属性)。

要将位图保存到 DFM,您可以将 TBitmap32 公开为已发布属性(这提供了在设计时操作位图的替代方法),或者覆盖组件的 DefineProperties() 方法手动流式传输位图。

关于delphi - Delphi (CM_) 中的组件消息和自定义图形 DesignTime 组件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9454719/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com