procedure TForm1.Button1Click(Sender: TObject);
begin
  PopupMenu1.Popup(Mouse.CursorPos.X, Mouse.CursorPos.Y);
end;

解决方案 »

  1.   

    procedure TForm1.Button1Click(Sender: TObject);
    var
      vPoint: TPoint;
    begin
      vPoint := ClientToScreen(Point(TButton(Sender).Left, TButton(Sender).Top));
      PopupMenu1.Popup(vPoint.X, vPoint.Y);
    end;//是ClientToScreen不是ScreenToClient
      

  2.   

    (button.left , button.top+button.height+2)改成(button.left+Left , button.top+button.height+2+Top)
    就是加上Form的坐标,有用就行
      

  3.   

    是ClientToScreen
    例个例子:var
      P1,P2:TPoint;
    begin
      P1:=//...你的坐标
      P2:=ClientToScreen(P1);
      PopupMenu1.Popup(p2.x,p2.y);
    end;