LoginSignup
1
2

More than 5 years have passed since last update.

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

Posted at

アプリでボタンの連打を禁止する方法として、ぱっと考え付くのが 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 の中で待ちに入ると連打分がプールされる気がする
他にあればおせーて (^^;;;

1
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2