2011-05-08 52 views
0

是否可以顯示從外部Handle獲取的圖標作爲我的節點在虛擬Stringtree中的圖像?節點的數據包含HWND。使用HWND(或類似的)作爲虛擬Stringtree中的節點圖像

+1

'HWND'是一個*窗口句柄。一個窗口不是一個圖標。一個*圖標*手柄稱爲'HICON'。要獲得一個窗口的圖標,即獲得'HWND'的'HICON',發送['WM_GETICON'](http://msdn.microsoft.com/en-us/library/ms632625(VS .85).aspx)消息到窗口。 – 2011-05-08 11:56:23

+0

@Andreas,我想傑夫想要得到屬於他有HWND窗口的圖標。 – Johan 2011-05-08 12:02:02

+0

@Johan:是的,這就是爲什麼我告訴他使用'WM_GETICON'! – 2011-05-08 12:03:15

回答

2

我會用ImageList分配給你的VT的Images屬性和OnGetImageIndex事件。 以下是使用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; 
+0

完美地工作 - 謝謝! :) – Jeff 2011-05-08 12:59:25

+1

IconClass是一個非常糟糕的對象引用名稱。這不是一堂課。我會稱之爲'圖標'。爲了使它更簡單,我只需寫'ImageList_AddIcon(ImageList1.Handle,IconHandle)'並且完全避免使用'TIcon'。 – 2011-05-08 13:06:09

+0

@David - 我已經根據你的建議編輯了答案。謝謝。關於IconClass,我知道這是一個糟糕的名字;它不是一個類的實例。 – 2011-05-08 13:55:44