Zitat von
calculon:
Das ist zwar in der Tat unkompliziert, aber auch nicht das was ich brauche, da wenn ich die ProcessMessages nicht ausführe das Programm nicht gecanceled werden kann.
Wenn Du die gesamte For-Schleife mit einem BeginUpdate/EndUpdate versiehst, sollte das Füllen der Listbox so schnell gehen, dass du kein Cancel benötigst:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
i: integer;
begin
with listbox1.Items do begin
BeginUpdate;
for i := 0 to 1000000 do
Add(inttostr(i));
EndUpdate;
end;
end;
Normalerweise wird die Listbox nach jedem Add() neu gezeichnet und das dauert. Mit dem BeginUpdate/EndUpdate wird der Listbox signalisiert, dass nun an der Liste umfangreiche Änderungen vorgenommen werden und ausnahmsweise mal nicht alles neu gezeichnet werden muss. Achtung: niemals das EndUpdate vergessen.