2013-03-27 95 views
1

我正在使用onMouseMove的一個自定義提示,它正在正常工作我遇到的問題是返回字符串的完整路徑,這是我的代碼。Shelltreeview從節點獲取路徑

procedure TCoreVMain.CoreShellTreeViewMouseMove(Sender: TObject; 
    Shift: TShiftState; X, Y: Integer); 

    var 
    tree: TsShellTreeView; 
    hoverNode: TTreeNode; 
    hitTest : THitTests; 

begin 

if (Sender is TsShellTreeView) then 
    tree := TsShellTreeView(Sender) 
    else 
    Exit; 

    hoverNode := tree.GetNodeAt(X, Y) ; 
    hitTest := tree.GetHitTestInfoAt(X, Y) ; 
if (lastHintNode <> hoverNode) then 
    begin 
    Application.CancelHint; 

    if (hitTest <= [htOnItem, htOnIcon, htOnLabel, htOnStateIcon]) then 
    begin 
     lastHintNode := hoverNode; 
     FileToolPanel.Caption := tree.path; //hovernode.Text; 
     tree.Hint := NodeHint(hoverNode) ; 
    end; 
    end; 
end; 

的hovernode.text只返回顯示名稱「溫度」,而不是「C:\ TEMP」,我怎麼能恢復時,節點項目上空盤旋,並沒有選擇節點的完整路徑?

在此先感謝。

回答

1

您需要將節點轉換爲其關聯的shell文件夾。你可以這樣做:

var 
    shellFolder: TShellFolder; 
.... 
shellFolder := tree.Folders[hoverNode.Index]; 

的外殼文件夾對象只是存儲在節點的Data屬性,所以你可以做這樣的:

shellFolder := TShellFolder(hoverNode.Data); 

一旦你的外殼文件夾,你可以得到

tree.Hint := shellFolder.PathName; 
+0

+1可以縮短爲tree.Hint:= TShellFolder(tv.Selected.Data).PathName; – bummi 2013-03-27 09:58:19

+0

@Bummi不完全是因爲懸停節點與選定節點不同。 – 2013-03-27 09:59:48

+0

謝謝你,這正是我一直在尋找的。 – Dennis445 2013-03-27 14:21:35