请问TreeView中如何控制PopupMenu,使其只有在选择了树的结点后点右键才出现?
如果点在TreeView的空白区,PopupMenu要不显示出来。
有高手指点说写TreeView的OnContextPopup事件,如:procedure TForm1.TreeView1ContextPopup(Sender: TObject;
MousePos: TPoint; var Handled: Boolean);
begin
Handled:=(htNowhere in TreeView1.GetHitTestInfoAt(MousePos.X,MousePos.Y));
end;
但是试过了没有用,或者是写TreeView1MouseUp事件,
procedure TForm1.TreeView1MouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
var
nodx:ttreenode;
begin
nodx:=treeview1.GetNodeAt(x,y);
if nodx <> nil then
treeview1.PopupMenu := popupmenu1
else
treeview1.PopupMenu := nil;
end;
试过也没有用。
求教。
如果点在TreeView的空白区,PopupMenu要不显示出来。
有高手指点说写TreeView的OnContextPopup事件,如:procedure TForm1.TreeView1ContextPopup(Sender: TObject;
MousePos: TPoint; var Handled: Boolean);
begin
Handled:=(htNowhere in TreeView1.GetHitTestInfoAt(MousePos.X,MousePos.Y));
end;
但是试过了没有用,或者是写TreeView1MouseUp事件,
procedure TForm1.TreeView1MouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
var
nodx:ttreenode;
begin
nodx:=treeview1.GetNodeAt(x,y);
if nodx <> nil then
treeview1.PopupMenu := popupmenu1
else
treeview1.PopupMenu := nil;
end;
试过也没有用。
求教。
解决方案 »
- 有人用过paintbox画数据曲线吗?
- 取数据库中的日期,请教大家一条SQL语句
- 求助:reportbuilder嵌套报表怎样做?一个主表/两个从表,能实现吗?
- 一个关于类型转换的问题!
- 请问这两段“项目文件代码”所导致的差异?
- 急:有关Delphi7.0的问题。在线等~~~~
- 如何动态改变TMaskEdit控件的EditMask属性?
- dll中奇怪的问题!!!!!高分求救]!!
- 如何将DBGRID的内容转为文本,HTML,EXCEL
- 在广东搞开发,薪水有多少?
- 我给Popupmenu1动态地添加菜单,现在要动态地响应菜单条目的Onclick事件,该如何写呢?
- 请问各位大虾怎么把一个Excel文件导入StringGrid中?
Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
var
AnItem: TTreeNode;
begin
if Button=mbRight then //Óû§°´ÏÂÓÒ¼üµÃµ½µ±Ç°½áµãÖµ²¢ÆôÓÿì½Ý²Ëµ¥
begin
AnItem:=RzTreeView1.GetNodeAt(X, Y);
if AnItem<>nil then
begin
RzTreeView1.Selected:=AnItem;
用了你的方法,如果点在TreeView的空白区,由于事件中将和空白处同样高度的y的节点的坐标获得了,PopupMenu还是显示出来,
人来,人来。
procedure TForm1.TreeView1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
if treeview1.Selected=nil then
PopupMenu2.AutoPopup:=false
else
PopupMenu2.AutoPopup:=true;
end;
Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
Var
Node :TTreeNode;
begin
if (Button = mbright) then
begin
Node := ADT_rights.Selected
if( Node <> NIL )
AND (X >= Node.DisplayRect(True).Left - 16) AND (Y >= Node.DisplayRect(True).Top)
AND (X <= Node.DisplayRect(True).Left) AND (Y <= Node.DisplayRect(True).Top + 16) then
treeview1.PopupMenu := popupmenu1
else
treeview1.PopupMenu := nil;
end; end;
问题是当treeview第一次setfocus时,跟节点就已经是selected,如果点在空白的地方,还是跟节点selected.
你是自定义一个事件马,ADT_rightsMouseDown是什么?
你的方法用了,连点在节点上也没有右健菜单了,不是很明白你的程序中Node := ADT_rights.Selected中的ADT_rights是什么?
什么意思啊
学习
什么意思啊
学习