![]() |
|
|
#1
|
|||
|
|||
|
Как получить координаты мыши относительно какого-то объекта на форме ?
|
|
#2
|
|||
|
|||
|
Если все происходит, допустим, на форме.
Координаты курсора мыши получают в событии OnMouseMove каждого компонента, включая форму. Это координаты относительно верхнего левого угла компонента. Далее в этом же событии вычисляются требуемые координаты относительно заданного объекта. Например, если от того же левого верхнего угла компонента, то X-AnyObject.Left (или наоборот AnyObject.Left-Х) и Y-AnyObject.Top, где X, Y координаты мыши. При пересечении какого-либо компонента курсором мыши на форме, мышиные координаты надо брать из события OnMouseMove именно этого компонента и преобразовывать их в координаты формы. Код:
//OnMouseMove формы:
procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
begin
Label1.Caption := 'X:'+IntToStr(X - Image1.Left)+
'Y:'+IntToStr(Y - Image1.Top)
end;
//OnMouseMove компонента, находящегося на форме (здесь TLabel)
procedure TForm1.Label1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
var P : TPoint;
begin
P := TWinControl(Sender).ClientToScreen(Point(X, Y));
P := ScreenToClient(P);
Label1.Caption := 'X:'+IntToStr(P.X - Image1.Left)+
'Y:'+IntToStr(P.Y - Image1.Top)
end; |
|
#3
|
||||
|
||||
|
Вот еще один вариант
Код:
var MousePoint:TPoint;
begin
GetCursorPos(MousePoint);
Caption:=Format('Mouse position X=%d Y=%d',[MousePoint.X,MousePoint.Y]);
end |