procedure Tjhglmain.TreeView1MouseDown(Sender: TObject;
  Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
var
  HT:THitTests;
  node:TTreenode;
  tmpxmbh:string;       //项目编号
begin
  with sender as Ttreeview do
  begin
    HT:=gethittestinfoat(x,y);
    if (htonitem in ht) then
    begin
      node:=getnodeat(x,y);
      //右键单击
      if Button=mbRight then
      begin
        rightMenu1.Popup(x,y);         -----!!!醒目
      end;
    end;
  end;
end;就是弹出右键菜单地方的坐标问题不是我实际的鼠标点击位置,应该是单位的问题
初学delphi,大家帮我解决一下

解决方案 »

  1.   

    改为:
    rightMenu1.Popup(Ttreeview(Sender).Left+x,Ttreeview(Sender).Top+y);    
      

  2.   

    还是没解决,能给我解释一下你的代码吗?
    Sender: TObject是不是最大作用就是代码通用阿,不用写具体的对象名?
      

  3.   

    把TreeView1的RightClickSelect属性设为True试试
      

  4.   

    用treeview自身带的popupmenu属性就可以了,晕
      

  5.   

    用treeview自身带的popupmenu属性不好,动态改变菜单需要第2次点击时才能看到效果
    谁会在TreeView1MouseDown事件中设置rightMenu1.Popup(x,y)的x,y让他在node旁边显示阿
      

  6.   

    我看了你的代码你的目的是在接点的地方
    在鼠标右键按下的时候弹出了是不是?
    先不要关了,rightMenu1.Popup(x,y); 改成
                rightMenu1.Popup(x+10,y+100);
    看看是不是你的效果。
    不要设置treeview的菜单!
      

  7.   

    Tjhglmain.TreeView1MouseDown(Sender: TObject;
      Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
    事件的坐标应该是鼠标在TreeView1的坐标。
    而rightMenu1.Popup(x,y);的坐标应该是整个窗口的坐标!
      

  8.   

    CLIENTTOSCREEN
    SCREENTOCLIENT
      

  9.   

    rightMenu1.Popup(x+TreeView1.left,y+TreeView1.top);         -----!!!醒目
    试一下!