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 では何も得られません。
警告 emptor
OnClick は、コントロール内の MouseDown と同じコントロール内の MouseUp の後にトリガーされることに注意してください。他の MouseUp または Down はありません。OnClick と同じ動作をさせたい場合は、それを確認する必要があります。
ボタンの内側をクリックし、クリックを離す前に外側に移動すると、 として登録されませんclick
。
OnClick が座標を与えないのはなぜ
FireMonkey の OnClick は VCL の OnClick と同じです。
OnClick は、OnMouseDown と OnMouseUp の合計です。VCL は、Down 座標と Up 座標のどちらかを選択したくないため、クリックが発生した場所は 1 つではありません。
私のアドバイス
は、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 が空間の近くにある場合にのみクリックになるためです。