Как я получаю координаты мыши, когда управление нажато?

Используйте это regEx:

^ \ d + ['"] (?: + \ d +" (?: + \ d + / \ d +)?)? $

Объяснение:

^ - Start of input
\d+ - one or more digits
(?:' - Noncapture group followed by singlequote
(?: - Start of non-capture group
+\d+" - Matches one or more space followed by one or more digits followed by doublequote
(?: +\d+\/\d+)? - Matches one or more space followed by one or more digits then literal / then again one or more digits and whole of it is optional as it is placed inside non-capture group followed by ?
)? - Closing of previous non-capture group and ? means even that group is optional
|") - Alternation to support case where number can only be followed by double quote and close of group
$ - End of input
10
задан Rob Kennedy 20 March 2013 в 21:52
поделиться

4 ответа

Mouse.CursorPos содержит TPoint, который, в свою очередь, содержит позиции X и Y. Это значение находится в глобальных координатах, поэтому вы можете преобразовать его в форму с помощью процедуры ScreenToClient, которая преобразует координаты экрана в координаты окна.

Согласно файлу справки Delphi, Windows.GetCursorPos может завершиться ошибкой, Mouse.CursorPos оборачивает это, чтобы вызвать исключение EOsException, если оно завершается неудачей.

var
  pt : tPoint;
begin
  pt := Mouse.CursorPos; 
  // now have SCREEN position
  Label1.Caption := 'X = '+IntToStr(pt.x)+', Y = '+IntToStr(pt.y);
  pt := ScreenToClient(pt);
  // now have FORM position
  Label2.Caption := 'X = '+IntToStr(pt.x)+', Y = '+IntToStr(pt.y);
end;
24
ответ дан 3 December 2019 в 14:06
поделиться

Свойство Mouse.CursorPos сообщит вам текущее положение мыши . Если компьютер работает медленно или если ваша программа медленно реагирует на сообщения, это может не совпадать с положением, которое имела мышь при первом событии OnClick . Чтобы получить положение мыши во время нажатия кнопки мыши , используйте GetMessagePos . Он сообщает экранные координаты ; преобразовать в клиентские координаты с помощью TImage.ScreenToClient .

Альтернативой является обработка событий OnMouseDown и OnMouseUp самостоятельно; их параметры включают в себя координаты. Помните, что оба события должны произойти, чтобы щелкнул . Вы также можете захотеть обнаружить операции перетаскивания , так как вы, вероятно, не захотите рассматривать перетаскивание для подсчета как щелчок.

6
ответ дан 3 December 2019 в 14:06
поделиться

Как уже говорили другие, вы можете использовать Mouse.CursorPos или функцию GetCursorPos, но вы также можете просто обработать событие OnMouseDown или OnMouseUp вместо OnClick. Таким образом, вы получаете значения X и Y в качестве параметров для вашего обработчика событий, без необходимости каких-либо дополнительных вызовов функций.

4
ответ дан 3 December 2019 в 14:06
поделиться

Как насчет этого?

procedure TForm1.Button1Click(Sender: TObject);
var
MausPos: TPoint;
begin
  GetCursorPos(MausPos);
  label1.Caption := IntToStr(MausPos.x);
  label2.Caption := IntToStr(MausPos.y);
end;


procedure TForm1.Button2Click(Sender: TObject);
begin
  SetCursorPos(600, 600);
end;

Однажды нашел это где-то в Интернете и сохранил в моей базе данных codenippet :):

Эта страница , вероятно, решит все ваши вопросы, однако ... Похоже, есть функции для перехода от клиента к координатам экрана и обратно и т. Д.

Удачи!

3
ответ дан 3 December 2019 в 14:06
поделиться
Другие вопросы по тегам:

Похожие вопросы: