Mit dem Timer hast du das selbe Problem, wie mit dem Label, Windows meldet an das Programm WM_TIMER, aber das Programm verarbeitet die Nachricht nicht.
Threads bieten die Möglichkeit mehrere Sachen gleichzeitig zu machen, was auf normalen Wege so nicht möglich ist. Das Prinzip ist schnell erklärt: Die eigentliche Aufgabe wird vom Threads ausgeführt, während die Anwendung zeitgleich auf die Beendung des Threads wartet und dabei gelegentlich mal ein Application.ProcessMessages; ausführt oder schonmal weitermacht. Die einfachste Methode um Threads zu benutzen ist folgende:
Du leitest die einen neuen Thread ab:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7:
| type TMyThread = class(TThread); protected procedure Execute; override; end; TForm1 = class(TForm) |
In die Methode Execute schreibst du, was dein Programm machen soll:
Delphi-Quelltext
1: 2: 3: 4: 5:
| procedure TMyThread.Execute; begin Gutschriften_Monat_Artikel.Ausfuehren(Chk_Monat.Itemindex, StrtoInt(Jahr_.Text)); end; |
Wenn du den Thread nun starten möchtest, kannst du wie folgt vorgehen:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9:
| with TMyThread.Create(False) do try while not Terminated do begin Application.ProcessMessages; Sleep(1); end; finally WaitFor; Free; end; |
Alle Codes ungetestet
Wenn du jetzt aus dem Thread dein Label setzen willst,
könnte es Probleme geben. Aber die Callbacks spar ich mir an dieser Stelle mal
Gruß,
maxk
// Edit: Schonwieder zu langsam

Ein Computer wird das tun, was Du programmierst - nicht das, was Du willst.