0

当我调用上下文菜单创建新控件时,如何捕获鼠标光标(IDE Delphi)的坐标?

我想通过上下文菜单在调用上下文菜单的相同坐标处创建一个新控件。

我正在创建自己的组件编辑器来执行此操作,然后我需要鼠标的坐标来在那里创建控件。

4

2 回答 2

0

我不知道我是否很好地理解了您的问题,但是有一些方法可以捕获鼠标的位置:

方法 1 - 捕获屏幕上的鼠标位置:在这里您可以使用这样的TMouse类:

var
  m: TMouse;
begin
  lbl_cordinate_screen.Caption := format('Mouse cordinate on screen: x:%d, y:%d', 
                                          [m.CursorPos.X, m.CursorPos.y]);
end;

方法 2 - 捕获控件上的鼠标位置: 在这里您可以使用GetCursorPos,我声明了一个cursorCordinate名为frm_main其他任何东西),它将返回一个TPoint包含鼠标在给定控件上的位置的值:

//function to capture mouse position on a control
function cursorCordinate(myCtrl: TWinControl): TPoint;
var
  mouse_p: TPoint;
begin
  GetCursorPos(mouse_p);
  ScreenToClient(myCtrl.Handle, mouse_p );
  result := mouse_p;
end;

用法示例:

begin
  lbl_cordinate_form_1.Caption := format('Mouse cordinate on form: x:%d, y:%d',  
                                          [cursorCordinate(frm_main).X, cursorCordinate(frm_main).y]);
end;

方法 3 - 在控件上捕获鼠标位置的另一种方法: 在这里您可以使用控件的OnMouseMove事件及其XY参数,只需将代码块放在该事件中即可。我用它frm_main在标签 ( lbl_cordinate_form_2) 中显示我的表单 ( ) 上的鼠标位置,但您可以使用任何其他控件的OnMouseMove事件:

procedure Tfrm_main.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
begin
lbl_cordinate_form_2.Caption := format('Mouse cordinate on form: x:%d, y:%d', [x, y]);
end;

您可以在图像中看到结果;第一行是方法 1的结果,第二行是方法 2,第三行属于方法 3

捕获鼠标位置

于 2021-12-17T23:33:21.303 回答
0

通过将此代码添加到FormContextPopup可以获得鼠标位置

   uses FMX.Forms;
   ...
   ...
 procedure TForm88.FormContextPopup(Sender: TObject; MousePos: TPoint;
      var Handled: Boolean);
    begin
      Label1.Caption:=FMX.Forms.Screen.MousePos.X.ToString+' 
           '+FMX.Forms.Screen.MousePos.Y.ToString;
    
    end;
于 2021-12-18T12:07:24.357 回答