【问题标题】:Virtual Treeview (C++ Builder) 2 icons overlap on Windows 7 but not on XPVirtual Treeview (C++ Builder) 2 图标在 Windows 7 上重叠,但在 XP 上不重叠
【发布时间】:2011-12-31 13:58:50
【问题描述】:

我在 Windows 7 上遇到了 VirtualTreeView 组件的问题。我添加了一个 TVirtualStringTree 并使用 OnGetImageIndex 事件来分配始终在调试器非零值。

VirtualStringTree 使用具有 16x16 图标的 TImageList 作为 Images 属性。

在 Windows XP 上,它可以正常工作,在 Windows 7 上,它与 TImageList 中索引为 0 的图标重叠在普通图标之上。我在 Windows 7 上运行与 XP 相同的程序,因此代码相同,但绘图不同。

这张图片说明了这个问题:

灰色三角形图标的索引为 0,文件夹图标的索引为 5。

这是 VirtualStringTree 中的错误吗?我能以某种方式避免这种情况吗?

我正在使用存储库中最新的 VirtualTreeView 版本。

【问题讨论】:

  • 显示您的 OnGetImageIndex 处理程序的代码。
  • 在这种情况下,您可能会遗漏考虑到Kind: TVTImageKind 参数的代码。 ikOverlay 可能有效。仅此一项并不能解释您的症状,但这是一个不寻常的用例。
  • 我认为你是对的......我只是查看了其他片段代码,我确实有一个处理程序: if (Kind == ikNormal || Kind == ikSelected) 仅在前者为真(否则为-1),并且似乎可以正常绘制。

标签: delphi c++builder virtualtreeview


【解决方案1】:

在您的OnGetImageIndex 事件处理程序中,注意Kind: TVTImageKind 参数。根据需要分配ImageIndex(通常,这仅适用于ikNormalikSelected 值),否则分配-1。

例如,当Kind 的值为ikOverlay 时分配一个有效的图像索引将导致在普通图像上绘制覆盖图像。 (这可能与您的问题有关。)

【讨论】:

  • 其实不需要明确指定ImageIndex,因为默认情况下它已经是-1,所以简单检查ikNormal/ikSelected就足够了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-09-09
  • 2012-06-09
  • 1970-01-01
  • 2018-06-28
  • 1970-01-01
  • 2019-05-25
  • 2015-12-11
相关资源
最近更新 更多