2013-03-27 96 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