Der Kern des Problems liegt hier
Delphi-Quellcode:
procedure TMyForm.Button1Click( Sender: TObject );
begin
Button1.Enabled := false;
// Irgendwas ausführen, was ein klein wenig dauert
Button1.Enabled := true;
end;
In der Zeit, wo diese Ausführung läuft ist der UI-Thread gesperrt, bzw. beschäftigt und alle auftretenden Aktionen (Klick auf einen Button, Eingabe von Text) werden
nicht abgearbeitet. Diese laufen aber in eine Message-Queue und werden abgearbeitet sobald der UI-Thread wieder Zeit hat.
Und da zu diesem Zeitpunkt der Button wieder aktiv ist, wird auch brav der Button-Klick ausgeführt
Darum sollten alle Aktionen, die länger als 50 Millisekunden dauern, in einen Thread ausgelagert werden.
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ea 0a 4c 14 0d b6 3a a4 c1 c5 b9
dc 90 9d f0 e9 de 13 da 60)