TTreeView

dolemin 2003-03-10 02:22:03
如何右键单击实现结点选择?
...全文
22 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
sysu 2003-03-14
  • 打赏
  • 举报
回复
跟踪了一下,发现在MouseUP中不行是因为传进来的X,Y值是相对于屏幕的,而不是TreeView的,转换一下就可以了:
procedure TForm1.TreeView1MouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
var pt: TPoint;
begin
pt := Point(X, Y);
pt := TreeView1.ScreenToClient(pt);
if Button = mbRight then
if TreeView1.GetNodeAt(pt.X, pt.Y) <> nil then
TreeView1.GetNodeAt(pt.X, pt.Y).Selected := True;
end;
dolemin 2003-03-14
  • 打赏
  • 举报
回复
忘记说了,上面程序顺便实现右键菜单,当然MouseUp中写
PopupMenu1.Popup(Mouse.CursorPos.X,Mouse.CursorPos.Y)也行。
dolemin 2003-03-14
  • 打赏
  • 举报
回复
谢谢以上回答,也可以这样。不过MouseUp却不行,为什么?

procedure TSetPrtFrm.TreeView1ContextPopup(Sender: TObject;
MousePos: TPoint; var Handled: Boolean);
var
TVNode:TTreeNode;
begin
TVNode:=Nil;
TVNode:=TreeView1.GetNodeAt(MousePos.x,MousePos.y); // 取鼠标点的地方的TTreeNode
if TVNode=Nil then
Handled:=true // 鼠标点的地方没有TTreeNode,菜单不显
else begin
TreeView1.Selected:=TVNode; // 右键选中TTreeNode
TreeView1Click(Sender);
end;
end;
brallow 2003-03-10
  • 打赏
  • 举报
回复
来迟了啊。。。。。。。。。。我先打开的。
brallow 2003-03-10
  • 打赏
  • 举报
回复
点击了右键之后处理MouseDown事件,然后调用TTreeView的GetNodeAt(x,y)函数就可以了
传递MouseDown事件中的值就可以得到按下点的node没有话话获得null,注意两个坐标的原点可能不一样哦。要修改一下值。
sysu 2003-03-10
  • 打赏
  • 举报
回复
在TreeView1的OnMouseDown事件中:
procedure TForm1.TreeView1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
if Button = mbRight then
if TreeView1.GetNodeAt(X, Y) <> nil then
TreeView1.GetNodeAt(X, Y).Selected := True;
end;

5,388

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧