Du könntest nach Veränderung des Wertes des SpinEdits eine "Pause" (siehe unten) im Programm einlegen, bevor die lange Prozedur ausgeführt wird. Die Pause muss wahrscheinlich nicht mal eine halbe Sekunde lang sein. Falls nun der Wert des SpinEdits vor dem Ende der Pause verändert wird, fängt die Pause von vorne an etc. Notfalls musst du noch von ein paar Boolean-Variablen gebrauch machen. Ich hoffe du weißt so ungefähr was ich meine.
Hier eine Prozedur, die dir das aus Turbo Pascal bekannte "Delay()" simuliert:
Delphi-Quellcode:
procedure Wait(Time: Word);
var Start: Integer;
begin
Start := GetTickCount;
While GetTickCount - Start <= Time do
Application.ProcessMessages;
end;