我相用左键得到快键菜单POPUpmenu1的:
比如我有一个BUTTON组件,写了如下代码:
procedure TForm1.Button1MouseDown(Sender: TObject;
  Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
  if Button = Mbleft then
  popupmenu1.Popup(x,y);
end;
菜单是显示出来,但是他显示的位置去在屏幕的左上角,这样的话,
1.X,Y座标应是相对于组件来说,但是显示的位置确是相对屏幕来说,请问下,我怎么才能将菜单显示位置相对于当前组件的位置来显示?
2.或者显示MOUSE的当前位置?

解决方案 »

  1.   

    1、ScreenToClient
    2、Mouse.CursorPos.x & Mouse.CursorPos.y
      

  2.   

    先学习一下
    button1不是有一个(PopupMenu)属性吗 ,设置这个属性为新建PopupMenu的就行了。
      

  3.   

    1楼的好用,但是1、ScreenToClient不知道怎么用?能举过例字不?想把菜单显示在BUTTON稍下方的位置
      

  4.   

    屏幕坐标到相对控件(如button)的坐标位置:button1.ScreenToClient(P)
    得到当前鼠标在屏幕上的位置:GetCursorPos
      

  5.   

    ScreenToClient to convert a point in screen coordinates to local
    ScreenToClient是把屏幕坐标转化成相对当前窗体的坐标