1

onMouseMoveでカスタムヒントを使用していますが、正しく機能しています。問題は、文字列へのフルパスを返すことです。これがコードの場合です。

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」ではなく、表示名「temp」のみを返します。ノードアイテムにカーソルを合わせて選択されていない場合、ノードのフルパスを復元するにはどうすればよいですか。

前もって感謝します。

4

1 に答える 1

1

ノードから関連するシェルフォルダに変換する必要があります。あなたはこのように行うことができます:

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

シェルフォルダオブジェクトはノードのDataプロパティに保存されるだけなので、次のように実行できます。

shellFolder := TShellFolder(hoverNode.Data);

シェルフォルダを取得したら、次のコマンドでフルパスを取得できます

tree.Hint := shellFolder.PathName;
于 2013-03-27T08:19:53.850 に答える