其实就是在我为SpeedButton设置了PopupMenu属性后,点右键时弹出菜单就弹出了。
但现在我想把他在点左键时实现通常情况下点右键的效果。不知该怎么做?我想到的办法之一是,但这里要定位SpeedButton1的绝对位置才行,不太方便:
procedure TfrmMain.SpeedButton1MouseDown(Sender: TObject;
  Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
  PopupMenu1.Popup(X+self.Left +SpeedButton1.Left,Y+self.top+SpeedButton1.Top);
end;或用:
  Mouse_Event(MOUSEEVENTF_RIGHTDOWN,X,Y,0,0);
但这个函数好象X,Y要屏幕上的绝对位置,反正是不行。哪位指点下?

解决方案 »

  1.   

    procedure TForm1.SpeedButton1Click(Sender: TObject);
    var p:TPoint;
    begin
      GetCursorPos(p);
      PopupMenu1.Popup(p.X,p.Y);
    end;
      

  2.   

    将鼠标坐标用ClientToScreen函数转换成屏幕坐标
      

  3.   

    procedure TForm1.Button1MouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    var
      aPoint: TPoint;
    begin
      aPoint.X := X;
      aPoint.Y := Y;
      aPoint := Button1.ClientToScreen(aPoint);
      PopupMenu1.Popup(aPoint.X, aPoint.Y);
    end;