【问题标题】:Use HWND (or something similar) as Node Image in Virtual Stringtree使用 HWND(或类似的东西)作为虚拟字符串树中的节点图像
【发布时间】:2011-05-08 11:53:57
【问题描述】:

是否可以显示从外部句柄获得的图标,作为虚拟字符串树中我的节点的图像?节点的数据包含 HWND。

【问题讨论】:

  • HWND 是一个 window 句柄。窗口不是图标。 icon 句柄称为HICON。获取窗口的图标,即获取HWNDHICON,向窗口发送WM_GETICON消息。
  • @Andreas,我认为 Jeff 想要获取属于他拥有 HWND 的窗口的图标。
  • @Johan:是的,这就是为什么我告诉他使用WM_GETICON
  • @Andreas 我知道我应该使用该功能 - 我的问题是:如何让图像出现在我的 VirtualStringtree 中? ;)
  • 我从未使用过该控件,因此 Rob Kennedy 或其他专家将帮助您解决这个问题!

标签: windows delphi icons window-handles


【解决方案1】:

我会使用分配给您的 VT 的 Images 属性和 OnGetImageIndex 事件的 ImageList。 以下是使用WM_GETICON 填充图像列表的方法。

procedure TForm1.Button1Click(Sender: TObject);
var IconHandle: HIcon;

begin
  IconHandle := SendMessage(123456, WM_GETICON, ICON_SMALL2, 0);
  ImageList_AddIcon(ImageList1.Handle, IconHandle);
end;

例如,将 0 图像索引传递给 VirtualTreeView。

procedure TForm10.VirtualStringTree1GetImageIndex(Sender: TBaseVirtualTree;
  Node: PVirtualNode; Kind: TVTImageKind; Column: TColumnIndex;
  var Ghosted: Boolean; var ImageIndex: Integer);
begin
  ImageIndex := 0;
end;

【讨论】:

  • IconClass 是一个非常糟糕的对象引用名称。这不是一堂课。我称之为Icon。为了更简单,我只写ImageList_AddIcon(ImageList1.Handle, IconHandle) 并完全避免使用TIcon
  • @David - 我已根据您的建议编辑了答案。谢谢。关于 IconClass,我知道这是个坏名字;它是实例而不是类。
猜你喜欢
  • 1970-01-01
  • 2017-10-16
  • 2012-01-26
  • 1970-01-01
  • 2021-11-04
  • 2021-06-06
  • 2016-08-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多