如何实现TreeView节点的Hint效果?
解决方案 »
- “拨号连接”设置里面如何判断“连接后在通知区域显示图标(&W)”这个Button是否选中?
- 学习微软的.Net好呢还是使用Delphi for .Net(如:Delphi 2006)来学.Net好呢?
- 100分! 急急急!!!!
- TDataBase连接Sybase的时候,退出程序时产生外部错误
- 请问一个Delphi连接到Oracle数据库的问题,关于Unicode的
- 用odbc连接远程的sql server2000服务器所出现的几个问题
- 三层数据库安全问题!!!!!!!!!
- 关于修改数据库中的记录。
- 各位大哥,请问如何屏蔽form的最大化按钮?
- 关于TopenDialog组件的问题
- 在线等待-100分 怎么在程序中创建2个线程,让他们各干各的事情
- 关于string型变量的问题!急急!
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的时候,如果是自己记下的点的话,就改变其颜色等
就是说当鼠标移上去时,就会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;
这个也有两种方面,
1简单的,和楼上差不多,我只说原理。
将每个节点要HINT的内容保存在节点的DATA中。
然后在鼠标移动的时候根据鼠标的当前位置,决定是HINT结点的信息,还是不HINT。
2比较复杂,但是可以做自己的样式,就是自己创建一个HINT窗体,(可以做成不规则窗体了)
一样的在节点中保存自己的HINT内容,
只是在鼠标移动的时候决定HINT内容,和是否HINT自己的HINT窗体,
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;