Ich habe das nochmal ein wenig umgebaut.
Hier wird ProcessMessages 20 mal ausgeführt und dann 20 mal nicht mehr.
Dann wird der Timer ausgeschaltet und dadurch die ersten 20 Logs "nachgeholt".
(Anbei Projekt für XE3 + Exe)
EDIT:
Noch eine kleine Änderung:
Delphi-Quellcode:
procedure TForm1.Timer1Timer(Sender: TObject);
var
I: Integer;
S:
string;
begin
if (Memo1.Lines.Count > 40)
then
Timer1.Enabled := False;
inc(FCount);
Memo1.Lines.Add(IntToStr(FCount) + '
' + FormatDateTime('
zzz', Now) + '
: ');
for I := 0
to 20
do
begin
Sleep(100);
if Timer1.Enabled
then
S := '
+'
else
S := '
-';
Memo1.Lines[Memo1.Lines.Count - 1] := Memo1.Lines[Memo1.Lines.Count - 1] + '
' + IntToStr(Memo1.Lines.Count) + S +
IntToStr(I);
if (Memo1.Lines.Count < 20)
then
Application.ProcessMessages;
end;
dec(FCount);
end;
So sieht man, dass der Rest noch abgearbeitet wird, während der Timer schon deaktiviert ist.