比如TreeView显示了几个目录
My music
Video
当鼠标放在My music提示“这是歌曲"
当鼠标放在Video提示“这是视频"意思是,如果鼠标节点等于“My music”就提示这是歌曲要如何写? 懂的给个示列,感谢!
My music
Video
当鼠标放在My music提示“这是歌曲"
当鼠标放在Video提示“这是视频"意思是,如果鼠标节点等于“My music”就提示这是歌曲要如何写? 懂的给个示列,感谢!
解决方案 »
- 封装在bpl里的ado提示:missing connection or connecttionstring
- Delphi ocx
- wsdl 不能装载dll
- 特殊的DBGRID数据格式化的问题,由于不确定字段而引出的。高手请指点
- 如何实现树行图的节点来打开对应的窗口
- 关于API
- 我写了个程序是给桌面换背景的但不知道怎么刷新
- 建议:兄弟们觉不觉得点过的贴子没点过的贴子的颜色差别太小,能不能改改
- 如何去掉半个汉字等非法字符
- 请教一个关于Delphi连接SQL Server 2000数据库表的错误提示的问题
- 有台企做SFCS(Shop Floor Control System)的兄弟吗?
- Tclientdataset 取TMemoField 字段的值
procedure TForm1.TreeView1MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
var
MyHitTest : THitTests;
tr:TTreeNode;
begin
tr:=self.TreeView1.GetNodeAt(x,y);
if tr<>nil then
begin
self.TreeView1.ShowHint:=True;
if tr.Text='My Music' then
self.TreeView1.Hint:='这是歌曲';
if tr.Text='Video' then
self.TreeView1.Hint:='这是视频';
end;
end;
Y: Integer);
var
MyHitTest : THitTests;
tr:TTreeNode;
begin
tr:=self.TreeView1.GetNodeAt(x,y);
if tr<>nil then
begin
self.TreeView1.Refresh;
self.TreeView1.ShowHint:=True;
if tr.Text='My Music' then
self.Label8.Caption:='这是歌曲';
if tr.Text='Video' then
self.Label8.Caption:='这是视频';
tr.Focused:=True;
end;
end;
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ComCtrls, StdCtrls;type
TForm1 = class(TForm)
TreeView1: TTreeView;
procedure TreeView1MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;var
Form1: TForm1;implementation{$R *.dfm}procedure TForm1.TreeView1MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
var
tr:TTreeNode;
begin
tr:= self.TreeView1.GetNodeAt(x,y);
if tr = nil then exit;
if tr.Data = nil then exit;
self.TreeView1.Hint:= String(Pointer(tr.Data)^)
end;procedure TForm1.FormCreate(Sender: TObject);
var
rootNode,node: TTreeNode;
s: ^string;
begin
self.TreeView1.ShowHint:= true;
rootNode:= self.TreeView1.Items.Add(nil,'root');
node:= self.TreeView1.Items.AddChild(rootNode,'My Music');
new(s);
s^:= '这是歌曲';
node.Data:= TObject(s);
node:= self.TreeView1.Items.AddChild(rootNode,'Video');
new(s);
s^:= '这是视频';
node.Data:= TObject(s);
end;procedure TForm1.FormDestroy(Sender: TObject);
begin
//处理 释放 node.Data
end;end.
随便写了一个,有不妥或者罗嗦的地,也请大家见谅了
定义一个事件
procedure MyHint(var HintStr: string; var CanShow: Boolean;var HintInfo: THintInfo);procedure TForm1.FormCreate(Sender: TObject);
begin
Application.OnShowHint := MyHint;
end;procedure TForm1.MyHint(var HintStr: string; var CanShow: Boolean;
var HintInfo: THintInfo);
var
p:TPoint;
begin
CanShow := True;
HintInfo.ReshowTimeout := 100;//这个值,可以自己修改
if HintInfo.HintControl = TreeView1 then
begin
node := TTreeView(HintInfo.HintControl).GetNodeAt(HintInfo.CursorPos.X,HintInfo.CursorPos.Y);
if node = nil then Exit;
if node.Text = 'My music' then
HintStr := '这是歌曲'
else if node.Text = 'Video' then
HintStr := '这是视频';
end;
end;
当然下面的代码是我抠出来的一部分,你需要修改的。//鼠标移动上去,更换头像图标,改变鼠标手势
//移走后恢复原头像图标,恢复鼠标手势
procedure TForm1.dataMouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
var
xTreeNode:TTreeNode; HintRect: TRect;
pt: TPoint;
begin
GetCursorPos(pt);
xTreeNode := TTreeView(Sender).GetNodeAt(X,Y);
if not Assigned(xTreeNode) then
begin
Timer1.Enabled :=True;
Exit;
end;
if xTreeNode.HasChildren then Exit; if htOnIcon in TTreeView(Sender).GetHitTestInfoAt(X,Y) then
begin
Screen.Cursor := crHandPoint;
//========================================================================//
if (not onlyOnce) then //不同
begin
onlyOnce :=True;//初始化
k:= xTreeNode.ImageIndex;
Memo2.Lines.Add(oldText+'//old==>//'+xTreeNode.Text+'//k==>'+inttostr(k));
//**********************************************************************//
oldText:=xTreeNode.Text;
oldTreeNode:=xTreeNode;
//Memo3.Lines.Clear;
Memo3.Lines.Add(xTreeNode.Text);
//**********************************************************************//
Hint := '查看此人的联系人卡片';//提示信息
end
else
begin
if oldText <> xTreeNode.Text then
begin
//Memo4.Lines.Clear;
Memo4.Lines.Add(IntToStr(oldTreeNode.ImageIndex)+'==>变换成==>'+IntToStr(k)); data.Items.BeginUpdate;
if oldTreeNode.Selected then
oldTreeNode.SelectedIndex:=k
else
oldTreeNode.ImageIndex:=k;
data.Items.EndUpdate; onlyOnce:=False;
oldText:=xTreeNode.Text;
oldTreeNode:=xTreeNode;
k:= xTreeNode.ImageIndex;
CurrentHintWindow.ReleaseHandle;
end
else
begin
if (xTreeNode.ImageIndex=4) or (xTreeNode.SelectedIndex= 4) then //已经变换,则不重复刷新
Exit;
data.Items.BeginUpdate;
if xTreeNode.Selected then //更改选中节点图标,没有此句,则选中节点图标不变
xTreeNode.SelectedIndex:= 4
else
xTreeNode.ImageIndex:=4;//k+3;
data.Items.EndUpdate; //Memo1.Lines.Clear;
Memo1.Lines.Add(IntToStr(xTreeNode.ImageIndex)); LastMouse.X := pt.X;
LastMouse.Y := pt.Y+20;
HintRect := CurrentHintWindow.CalcHintRect(Screen.Width, Hint, nil);
CurrentHintWindow.ActivateHint(Rect(LastMouse.X, LastMouse.Y, LastMouse.X+HintRect.Right, HintRect.Bottom+LastMouse.Y), Hint);
end;
end;
//========================================================================//
end
else //鼠标移开
begin
if (htOnItem in TTreeView(Sender).GetHitTestInfoAt(X,Y)) and (not IsPrompt) then
begin
Hint := xTreeNode.Text + #13 +
'右键单击以查看您可以与此人进行交流的方式。';//提示信息
LastMouse.X := pt.X+10;
LastMouse.Y := pt.Y+20;
HintRect := CurrentHintWindow.CalcHintRect(200, Hint, nil);
CurrentHintWindow.ActivateHint(Rect(LastMouse.X, LastMouse.Y, LastMouse.X+HintRect.Right, HintRect.Bottom+LastMouse.Y), Hint);
end
else
CurrentHintWindow.ReleaseHandle;
//========================================================================//
if onlyOnce then //有初始化,才执行,否则保持不变
begin
//Memo4.Lines.Clear;
Memo4.Lines.Add(IntToStr(oldTreeNode.ImageIndex)+'==>变换成==>'+IntToStr(k)); data.Items.BeginUpdate;
if oldTreeNode.Selected then
oldTreeNode.SelectedIndex:=k
else
oldTreeNode.ImageIndex:=k;
data.Items.EndUpdate; onlyOnce:=False;
Screen.Cursor := crDefault;
CurrentHintWindow.ReleaseHandle;
end;
//========================================================================//
Timer1.Enabled :=True;
end;
end;
OnMouseMove事件:主体内容如下 if (Node.Text ='My music') then //Level 展开的层数
begin
fcDBTreeView2.Hint:='这是歌曲';
fcDBTreeView2.ShowHint:=true;
end
else
if (Node.Text ='Video') then //Level 展开的层数
begin
fcDBTreeView2.Hint:='这是视频';
fcDBTreeView2.ShowHint:=true;
end
else
fcDBTreeView2.ShowHint:=false;