【问题标题】:How can I get transparent images to appear on TMenu item如何让透明图像出现在菜单项上
【发布时间】:2019-12-11 14:28:29
【问题描述】:

我最近从图像列表转换为虚拟图像列表和图像收集控件。我所有的图像都以透明的 png 文件形式存储在 TImageCollection 中。它们在工具栏工具按钮上渲染得很好,但这些相同的图像不会使用 TMainMenu 渲染为透明图像。是否需要使用 Owner Draw 渲染所有菜单?

【问题讨论】:

  • 在分配图像时菜单已经是所有者绘制的。我还没有尝试过新的虚拟图像列表,但是如果图像在工具栏上呈现透明而不是在 MainMenu 上呈现透明,这听起来像是 Embarcadero 需要解决的错误
  • 这似乎对我来说开箱即用(Delphi 10.3.3)。我已经尝试使用 TActionMainMenuBar 和 TPopupMenu 没有代码,只需分配 TVirtualimageList 并在 Object Inspector 中选择 ImageIndex 值。没有所有者绘制。你在使用 TVirtualImageList 吗?
  • 我正在使用 10.3.3 和 TMainMenu 组件。没用过 TActcionMainMenuBar,也许我应该试一试

标签: delphi


【解决方案1】:

Embarcadero 只添加了 TImageCollection 和 TVirtualImageList 组件(旧组件不变)。许多旧组件不会从 TImageList 或 TVirtualImageList 组件调用 DoDraw 方法(几乎每个组件都使用自己的透明度方法)。即使是从 TImageList 调用 DoDraw 方法的组件也不总是能正常工作(样式问题)。

他们还对透明图像使用“过时”的方法(几乎所有旧组件都不要使用 alpha 混合)。

我制作了自己的降序组件(透明图像、速度按钮、工具栏、树视图、选项卡控件)、TImageCollection 和 TVirtualImageList。但不是 TMenu 组件(仅使用我的 TImageCollection 和 TVirtualImageList 版本),因为 TMenu 从 TImageList/TVirtualImageList 调用 DoDraw 方法来绘制图标。

我认为 Embarcadero 必须更改组件中的绘图图片。他们需要在所有带有图片的组件中从 TImageList/TVirtualImageList 中调用 DoDraw 方法。

【讨论】:

  • 你是说标准的 TMenu 控件确实提供了 TVirtualImageList 的透明度,但其他控件没有?
  • 不,我说你不需要改变 TMenu 控件,你只需要创建自己的降序 TVirtualImageList。必须更改其他控件(我创建自己的降序控件)。
猜你喜欢
  • 2014-01-25
  • 2014-06-07
  • 2019-09-21
  • 2016-03-19
  • 1970-01-01
  • 2018-02-05
  • 2011-02-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多