Wenn du dich mit Threads beschäftigen willst, aber noch nicht so richtig Ahnung davon hast: Entweder sein lassen, oder ein Tutorial dazu lesen und verstehen. Das von Luckie ist imho sehr gut:
www.michael-puff.de/...er/Delphi/Tutorials/
Ansonsten kannst du in die lange Schleife ein
Application.ProcessMessages; einbauen, was aber nur ab und zu aufgerufen werden sollte (z.B. alle 100 mal, je nachdem, wie schnell ein Durchlauf zu Ende ist). Zusätzlich baust du eine globale Variable
MachWeiter: Boolean; ein, die du bei Programmstart auf True setzt, und im AbbruchButton auf False. Zu Beginn eines Schleifendurchlaufs überprüfst du diese Variable und brichst ggf. ab.
We are, we were and will not be.