![]() |
Wieso zeigt man mir nichts an?
Hallo,
ich habe folgendes Problem, ich lasse eine for-schleife durchlaufen in der ein paar Funktionen (gegen Sleep ersetzt) ausgeführt werden und eine Prozessbar. Die Prozessbar funktionert einwandfrei aber die Labels werden erst nach dem Durchlauf angezeigt. Wer weis rat.
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var i: integer; begin Form1.ProgressBar1.Max:=10; Form1.Label3.Visible:=true; Form1.Label4.Caption:='0 / '+IntToStr(Form1.Listbox.Items.Count); Form1.Label4.Visible:=true; Form1.ProgressBar1.Visible:=true; for i := 0 to Form1.Listbox.Items.Count-1 do begin Form1.Label4.Caption:=IntToStr(i+1)+' / '+IntToStr(Form1.Listbox.Items.Count); Form1.ProgressBar1.StepIt; sleep(3000); end; Form1.Label3.Caption:='Fertig!' end; |
Hallo BorlaDelphiUser,
Versuch es mal so:
Delphi-Quellcode:
Gruß, Tom
procedure TForm1.Button1Click(Sender: TObject);
var i: integer; begin Form1.ProgressBar1.Max:=10; Form1.Label3.Visible:=true; Form1.Label4.Caption:='0 / '+IntToStr(Form1.Listbox.Items.Count); Form1.Label4.Visible:=true; Form1.ProgressBar1.Visible:=true; for i := 0 to Form1.Listbox.Items.Count-1 do begin Form1.Label4.Caption:=IntToStr(i+1)+' / '+IntToStr(Form1.Listbox.Items.Count); Form1.ProgressBar1.StepIt; Application.ProcessMessages; end; Form1.Label3.Caption:='Fertig!' end; |
SUPER es funktionert DANKE was bewirkt dieser Befehl "Application.ProcessMessages" ?
|
Es verarbeitet Windowsbotschaften, die in der Warteschleife stehen.
Unter Anderem wuerden ohne Application.Processmessages gewisse Botschaften zum Neuzeichnen Deines Formulars erst nach der Schleife ausgeführt werden. Gruß, Tom |
hi,
außerdem 'friert' sleep() das komplette programm ein, und macht nach dem sleep() erst mit dem verarbeiten der schleife weiter |
Moin Chris,
nicht ganz. Sleep hält den Thread an in dem es aufgerufen wird. Bei einem Single Thread Programm hat das natürlich die von Dir beschriebene Auswirkung. |
Das Sleep das komlette Programm anhält weis ich. Es hat aber auch mit den Funktionen nicht funktioniert. Und damit es nicht soviel Source wird hab ich die Funktionen gegen Sleep ersetzt.
|
Das ist es
Setze vor Sleep die Anweisung
Application.processmessages; |
Nein. Er hat das sleep nur für uns reingemacht an die Stelle, wo er Funktionsaufrufe hat, damit wir das bnachvollziehen können - oder so.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:29 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 by Thomas Breitkreuz