如何实现TreeView节点的Hint效果?

解决方案 »

  1.   

    接分分
    procedure TForm1.TreeView1MouseMove(Sender: TObject; Shift: TShiftState; X,
      Y: Integer);
    begin
      if TreeView1.GetNodeAt(x, y) = nil then begin
        TreeView1.Cursor := crDefault;
        ......
      end
      else begin
        TreeView1.Cursor := crHandPoint;
        ......
      end;
    end;
    如果要实现变背景或颜色或者字体等。
    可以在mousemove中记下当前移动到的点,如果值变化,就刷新一下,然后在Drawitem的时候,如果是自己记下的点的话,就改变其颜色等
      

  2.   

    55555,我是想让节点拥有Hint文字
    就是说当鼠标移上去时,就会Hint说明文字出现!
    不是要改变鼠标显示状态!
      

  3.   

    TTreeNode继承TPersistent 没有Hint这个属性,这要自己想办法才是
    我是这样想的,在鼠标MOVE到TreeView上时置 置TreeView.Hint 显之,让其看起来像是Hint
    增加Node
    全局变量
    var
      HoverNode: TTreeNode;procedure TForm1.Button1Click(Sender: TObject);
    var
      Node: TTreeNode;
      p_Hint: PString;
      I: Integer;
    begin
      for I := 0 to 10 do
      begin
        new(p_Hint);
        p_Hint^ := 'i am the ' + IntToStr(I) + '''' + 's Hint';
        TreeView1.Items.AddObject(nil,IntToStr(I)+ 'Node',p_Hint);
      end;
    end;显示Hint
    procedure TForm1.TreeView1MouseMove(Sender: TObject; Shift: TShiftState; X,
      Y: Integer);
    var
      Node : TTreeNode;
    begin
      Node := TreeView1.GetNodeAt(X,Y);
      if (Node <> nil) and (Node <> HoverNode) then
      begin
        TreeView1.ShowHint := False;
        TreeView1.Hint := PString(Node.Data)^;
        //Memo1.Lines.Add(TreeView1.Hint);
        TreeView1.ShowHint := True;
        HoverNode := Node;
      end;
    end;
      

  4.   

    Hint显示有点小问题,楼猪自己解决解决
      

  5.   

    哦,是我看错了,,呵不好意思,
    这个也有两种方面,
    1简单的,和楼上差不多,我只说原理。
     将每个节点要HINT的内容保存在节点的DATA中。
     然后在鼠标移动的时候根据鼠标的当前位置,决定是HINT结点的信息,还是不HINT。
    2比较复杂,但是可以做自己的样式,就是自己创建一个HINT窗体,(可以做成不规则窗体了)
     一样的在节点中保存自己的HINT内容,
     只是在鼠标移动的时候决定HINT内容,和是否HINT自己的HINT窗体,
      

  6.   

    UP,希望能得到一个更好的解决方法,或者有没有增强型的TreeView控件
      

  7.   

    TVS_INFOTIP TVN_GETINFOTIP,自己看MSDN
      

  8.   

    procedure TForm1.TreeView1MouseMove(Sender: TObject; Shift: TShiftState; X,
      Y: Integer);
    var
      Node: TTreeNode;
    begin
      with TreeView1 do
      begin
        Node := GetNodeAt(X, Y);
        ShowHint := (Node <> nil);
        if ShowHint then Hint := Node.Text;
      end;
    end;
      

  9.   

    现在Treeview是可以显示hint了,但是如果让hint显示其它的信息呢。比如像UC,显示的是昵称,当你鼠标移上去显示的是UC的号码(数字)
      

  10.   

    你在TreeView的Node的Data里面保存你要的数据就可以了