【问题标题】:TGraphicControl transparency on a TCustomControlTCustomControl 上的 TGraphicControl 透明度
【发布时间】:2015-12-17 16:43:17
【问题描述】:

我创建了一个基于 TGraphicControl 的控件,它是透明的并且大部分是空白空间。它实际上在线条艺术中实现了一个简单的符号。 即TLFMagicControl = class(TGraphicControl)

在我拥有的构造函数中:

ControlStyle := ControlStyle + [csOpaque];

然后将我的“TLFMagicControl”放置在我自己的 TCustomControl 面板上。 即 TLFGridPanel = class(TCustomControl)

TLFMagicControl 的透明度可以完美地相互交互,但不能与它们所在的父面板 (TLFGridPanel) 交互。

TLFGridPanel 大部分时间都是黑色的,所以这不是问题,但我希望用户能够打开/关闭面板上的网格线。当我覆盖绘图处理程序 TLFGridPanel 并绘制我的网格时,放置在顶部的控件不是透明的,并且会阻塞下面的网格线。

对于 TCustomControl 有没有办法解决这个问题,还是我为面板选择了错误的底座?

【问题讨论】:

  • 错字:夹具块 -> 夹具块

标签: delphi components vcl


【解决方案1】:

csOpaque 告诉 VCL 你完全自己绘制控件,这会抑制自动背景绘制(或擦除)。删除该控件样式以让WM_ERASEBKGND 完成其工作。

【讨论】:

  • 我完全误解了 controlstyle 指令的工作原理 - 谢谢。虽然这确实有效,但它不是 100%,因为当我单击并拖动 GraphicControl 时,它会在没有重绘背景网格的地方留下“洞” - 有什么想法吗?
  • 拖动操作开始后立即致电Parent.Update,但这可能会导致轻微闪烁。有关其他绘图和防闪烁技术,请参阅Best way to do non-flickering, segmented graphics updates in Delphi
  • 还可以尝试查看TLabel 的VCL 源代码,这是一个具有透明功能的TGraphicControl 派生控件。
猜你喜欢
  • 2011-10-04
  • 2019-01-31
  • 2018-12-29
  • 1970-01-01
  • 2010-10-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-01-05
相关资源
最近更新 更多