Используйте это regEx:
^ \ d + ['"] (?: + \ d +" (?: + \ d + / \ d +)?)? $
blockquote >Объяснение:
^ - 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
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;
Свойство Mouse.CursorPos
сообщит вам текущее положение мыши . Если компьютер работает медленно или если ваша программа медленно реагирует на сообщения, это может не совпадать с положением, которое имела мышь при первом событии OnClick
. Чтобы получить положение мыши во время нажатия кнопки мыши , используйте GetMessagePos
. Он сообщает экранные координаты ; преобразовать в клиентские координаты с помощью TImage.ScreenToClient
.
Альтернативой является обработка событий OnMouseDown
и OnMouseUp
самостоятельно; их параметры включают в себя координаты. Помните, что оба события должны произойти, чтобы щелкнул . Вы также можете захотеть обнаружить операции перетаскивания , так как вы, вероятно, не захотите рассматривать перетаскивание для подсчета как щелчок.
Как уже говорили другие, вы можете использовать Mouse.CursorPos или функцию GetCursorPos, но вы также можете просто обработать событие OnMouseDown или OnMouseUp вместо OnClick. Таким образом, вы получаете значения X и Y в качестве параметров для вашего обработчика событий, без необходимости каких-либо дополнительных вызовов функций.
Как насчет этого?
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 :):
Эта страница , вероятно, решит все ваши вопросы, однако ... Похоже, есть функции для перехода от клиента к координатам экрана и обратно и т. Д.
Удачи!