Android
Delphi
FMX
FireMonkey

Android 上でのボタン連打禁止 (Delphi)

More than 1 year has passed since last update.

アプリでボタンの連打を禁止する方法として、ぱっと考え付くのが Button を一定時間 Disable にする、たとえば

procedure TForm1.Button1Click(Sender: TObject);
begin
  Button1.Enabled := False;
  Sleep(1000);
  Button1.Enabled := True;
end;

こんな処理です。が、この場合連打したキーはプールされていて実行されてしまうのです。
うーん簡単な方法で、できないかなー...
OnClick イベント自体を破棄するような方法でないと...
で、考えてみた...HitTest プロパティが使えるのではないかと...
そして Sleepではなく Timer を使うと良いのではないかと...

その結果

TTimer の Interval プロパティに連打を受け付けない時間をセットして、Enabled を False にする
Timer の OnTimer で

procedure TForm1.Timer1Timer(Sender: TObject);
begin
  // 復活の呪文
  Button1.Enabled := True;
  Button1.HitTest := True;
  Timer1.Enabled := False;  // Timer停止
end;

Button の OnClick 側は

procedure TForm1.Button1Click(Sender: TObject);
begin
  Button1.HitTest := False;
  Button1.Enabled := False;
  Timer1.Enabled := True; // Timer始動
end;

としてみたところ、一応希望していた感じにはなりました。
無名メソッドとか使うとよさげな気もするのですが、OnClick の中で待ちに入ると連打分がプールされる気がする
他にあればおせーて (^^;;;