Wie ist denn die Kalibrierungsroutine implementiert? So lange sie nicht in einem Thread ausgelagert ist oder in einer Schleife die Nachrichtenschleife nicht abgearbeitet wird, wirst du die Schaltfläche nicht drücken können bzw. die Nachricht wird erst nach Ende der Routine abgearbeitet werden.
Delphi-Quellcode:
var Terminate: Boolean: False; // globale Variable wird von Schaltfläche gesetzt
for i := 0 9999 do
begin
Application.ProcessMessages;
if Terminate then
Break;
// ...;
end;
In einem Thread musst du ein Flag setzen, der regelmäßig im Thread abgefragt wird und wenn er gesetzt ist, beendet sich der Thread selber.