![]() |
function/procedure pausieren verhindern
Hi Leute,
wenn ich beispielsweise eine Prozedur habe:
Delphi-Quellcode:
und während diese läuft und ich in der Listbox scrolle oder die Form auf dem Desktop verschiebe, dann pausiert die Prozedur bis ich die Maus wieder loslasse. Kann man das unkompliziert verhindern?
procedure TForm1.Button1Click(Sender: TObject);
var i: integer; begin for i := 0 to 1000000 do begin listbox1.Items.Add(inttostr(i)); application.ProcessMessages; end; end; Gruß Calculon -- |
Re: function/procedure pausieren verhindern
In dem man die ganze Procedur in einem eigenem Thread ausführt.
|
Re: function/procedure pausieren verhindern
Mit Threads hab' ich noch nie was zu tun gehabt. Ist das sehr kompliziert oder für mein Problem schnell und einfach umsetzbar?
|
Re: function/procedure pausieren verhindern
Zitat:
|
Re: function/procedure pausieren verhindern
Zitat:
Hat jemand ein gutes Thread-Tutorial für mich? |
Re: function/procedure pausieren verhindern
Im Verzeichnis Demos von Delphi ist ein gutes Beispiel dabei ;)
|
Re: function/procedure pausieren verhindern
|
Re: function/procedure pausieren verhindern
Zitat:
Delphi-Quellcode:
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.
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; |
Re: function/procedure pausieren verhindern
Zitat:
|
Re: function/procedure pausieren verhindern
Zitat:
Ich habs grad mal ausgetestet, man kommt ca. auf den Faktor 10, was das Hinzufügen der Listbox-Einträge angeht. Wenn Du wirklich auf Benutzeraktionen reagieren willst, dann brauchst du das aber nicht bei jedem Schleifendurchlauf zu machen:
Delphi-Quellcode:
if (i mod 1000) = 0 then begin
Application.ProcessMessages; if BtnCancel.Tag = 1 then begin // Vorrausgesetzt, dein Cancel-Button setzt das Tag auf "1" wenn gedrückt. ListBox.Items.EndUpdate; exit; // Schleife abbrechen end; end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:44 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz