通常、ボタンを一度クリックしてそのボタンはDisableに一度し、Disable中にもう一度ボタンを押すとその処理が終わってから、もう一度処理が実行されます。
Disable中に押されたクリックに関しては無効にしたいのですがどうすればいいでしょうか?お願いします。
Enable = False のボタンをクリックして、クリックイベントが起きる
ということはないと思うのですが、、、、
それ以外のことが原因ではないでしょうか。
よろしかったら、どんなコードなのか挙げてもらえますか。
ソースを添付します。お願いします。
Button1.Enabled := False
try
{時間のかかる処理(過程をプログレスバーで表示)}
finally
Button1.Enabled := True;
end;
おかしいですね。こちらで下記のコードで試してみたけど、
Disable中にどれだけクリックしても2度イベントが起きること
はなかったですけど。(Win98 + Del6Per)
procedure TForm1.Button1Click(Sender: TObject);
var
i: integer;
begin
TButton(Sender).Enabled := False;
for i := 0 to 20 do
begin
Sleep(100);
Application.ProcessMessages;
end;
ShowMessage('End!');
TButton(Sender).Enabled := True;
end;
try
Button1.Enabled := False;
Memo1.Lines.Add('AAA');
sleep(2000);
finally
Button1.Enabled := True;
end;
だと、ダブルクリックでAAAが2回追加されます。
try
Button1.Enabled := False;
Memo1.Lines.Add('AAA');
sleep(2000);
finally
Application.ProcessMessages;
Button1.Enabled := True;
end;
だと、ダブルクリックしても1回しか入りません。
# Application.ProcessMessages;の位置が重要
ほう!なるほどProcessMessagesが必要なのですね。
分かりました。お二方ありがとうございました。