Используйте событие OnMouseDown/Up:
procedure TForm17.Button1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Single);
begin
end;
Смотрите, вы получаете координаты X и Y.
procedure TForm17.Button1Click(Sender: TObject);
begin
end;
Однако с OnClick вы ничего не получите.
Осторожно!
Обратите внимание, что OnClick срабатывает после MouseDown внутри элемента управления и MouseUp также внутри того же элемента управления, без каких-либо других MouseUp или Down. Вы должны проверить это, если хотите иметь то же поведение, что и OnClick.
Если вы щелкнете внутри кнопки и выйдете за ее пределы, прежде чем отпустить щелчок, она не должна быть зарегистрирована как click
.
Почему OnClick не дает координаты
OnClick в FireMonkey — это тот же OnClick, что и в VCL.
OnClick — это сумма OnMouseDown и OnMouseUp, поэтому нет ни одного места, где происходит щелчок. произошло, потому что VCL не хотел выбирать между координатой Down или Up.
Мой совет
Активируйте событие OnClick, но зарегистрируйте координату в MouseDown.
procedure TForm17.Button1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Single);
begin
ClickGestureInfo.GestureID:= somethingNotAlreadyInUse;
ClickGestureInfo.Location:= Point(x,y);
end;
function ClearGestureInfo: TGestureEventInfo;
begin
FillChar(Result, SizeOf(Result), #0);
end;
procedure TForm17.Button1Click(Sender: TObject);
begin
if ClickGestureInfo.GestureID = somethingNotAlreadyInUse then begin
//do stuff
ClickGestureInfo:= ClearGestureInfo;
end;
end;
Обычно нет смысла также записывать координаты OnMouseUp, потому что щелчок — это только щелчок, если MouseDown и MouseUp находятся рядом в пространстве.
person
Johan
schedule
04.10.2013