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