Progressbar Balken macht quatsch...

Für Fragen von Einsteigern und Programmieranfängern...
Andy Nightingale
Beiträge: 299
Registriert: Mo 13. Jan 2025, 12:11

Progressbar Balken macht quatsch...

Beitrag von Andy Nightingale »

Hallo Leute,
ich hab mal wieder eine Anfängerfrage :-)
Ich hab eine Progressbar und ewin Timer. Der Balken soll nach rechts (ist grün) nach einer bestimmten Zeit durchlaufen. Er läuft aber nicht bis zum Ende. Egal was für eine Zahl ich verändere.-ich bekomme es einfach nicht hin das er durchläuft. Hier mein Code,- vielleicht hat jemand eine Idee was ich falsch mache:

procedure TForm2.Timer1Timer(Sender: TObject);
begin
ProgressBar1.StepBy(300);

if ProgressBar1.Position >= ProgressBar1.Max then
begin
Timer1.Enabled:= False ;
Application.ProcessMessages;
Label1.Visible := True;
Label1.Caption := 'Daten laden abgeschlossen!';
Label1.Font.Size := 9;
Label1.Font.Color := clRed;
Label1.Update;
Repaint;
Application.ProcessMessages;
Sleep(1500);
Self.Close;
end;
end;

Grüße

wp_xyz
Beiträge: 5315
Registriert: Fr 8. Apr 2011, 09:01

Re: Progressbar Balken macht quatsch...

Beitrag von wp_xyz »

Windows, oder? Das habe ich auch schon gesehen und keine andere Lösung als einen selbst gezeichneten Progressbar zu verwenden. Z.B. den TProgressbarEx aus dem ExCtrls package (https://wiki.freepascal.org/ExCtrls#TProgressBarEx): einfach die Unit von https://sourceforge.net/p/lazarus-ccr/s ... essbar.pas ins Projektverzeichnis kopieren und die Komponente zur Laufzeit selbst erzeugen, oder, wenn du es visuell haben willst, den Snapshot des Packages herunterladen von https://sourceforge.net/p/lazarus-ccr/s ... s/exctrls/, das Runtime-Package exctrlspkg.lpk in die IDE laden und das Designtime-Package exctrls_dsgn.lpk laden und dann installieren).

Benutzeravatar
m.fuchs
Lazarusforum e. V.
Beiträge: 2859
Registriert: Fr 22. Sep 2006, 19:32
OS, Lazarus, FPC: Winux (Lazarus 2.0.10, FPC 3.2.0)
CPU-Target: x86, x64, arm
Wohnort: Berlin
Kontaktdaten:

Re: Progressbar Balken macht quatsch...

Beitrag von m.fuchs »

Hm, hab jetzt hier weder mit Windows noch mit Linux irgendein Problem gesehen. Das Ding läuft durch, dann wird das Label eingeblendet und 1,5 Sekunden später geht das Programm zu.
0118999881999119725-3

Software, Bibliotheken, Vorträge und mehr: https://www.ypa-software.de

Soner
Beiträge: 765
Registriert: Do 27. Sep 2012, 00:07
OS, Lazarus, FPC: Win10Pro-64Bit, Immer letzte Lazarus Release mit SVN-Fixes
CPU-Target: x86_64-win64
Wohnort: Hamburg

Re: Progressbar Balken macht quatsch...

Beitrag von Soner »

Ich habe auch kein Problem gesehen, es funktioniert ganz normal. Windows 11, Lazarus 4.2.
Was hast du für Min/Max Werte, das sieht für mich unlogisch aus:
ProgressBar1.StepBy(300);
Normalerweise soll es bis 100 laufen, damit meint man 0%..100%, man kann zwar für Max und Min beliebigen Wert eingeben, aber dadurch bekommt man solcher Fehler wie du jetzt hast.
Dieser Teil sieht für mich auch komplett merkwürdig aus:

Code: Alles auswählen

Label1.Update;
Repaint;
Application.ProcessMessages;
Sleep(1500);
Self.Close;
"Label1.Update" brauchst du nicht, es wird automatisch gemacht sobald du irgendeine Eigenschaft von einer Komponente änderst.
"Repaint" ist auch merkwürdig, zeichnest du irgendetwas auf irgendein Bitmap-Canvas? Normalerweise benutzt man Invalidate.
"Sleep(1500); Self.Close;" wozu sleep, wenn es sowie so geschlossen wird?
progressbartest.zip
(94.5 KiB) 117-mal heruntergeladen

wp_xyz
Beiträge: 5315
Registriert: Fr 8. Apr 2011, 09:01

Re: Progressbar Balken macht quatsch...

Beitrag von wp_xyz »

Zumindest bei Windows hat die ProgressBar eine bescheuerte Animation, die den Balken erst allmählich zum richtigen Wert laufen lässt. Dadurch hat man den Eindruck als laufe der Balken dem wahren Wert hinterher und komme evtl rechts gar nicht an. TProgressBarEx andererseits folgt der Einstellung sofort und wirkt viel direkter. Im angehängten Beispiel-Projekt mit oben TProgressBar und unten TProgressBarEx den Trackbar verschieben, dann sieht man das, was ich meine.
Dateianhänge
progressbar_delayed.zip
(5.6 KiB) 116-mal heruntergeladen
Zuletzt geändert von wp_xyz am Di 11. Nov 2025, 17:21, insgesamt 1-mal geändert.

Andy Nightingale
Beiträge: 299
Registriert: Mo 13. Jan 2025, 12:11

Re: Progressbar Balken macht quatsch...

Beitrag von Andy Nightingale »

wp_xyz hat geschrieben: Di 11. Nov 2025, 12:35 Windows, oder?
Hi wp_xyz,
danke für die Idee es funktioniert. :-)

Andy Nightingale
Beiträge: 299
Registriert: Mo 13. Jan 2025, 12:11

Re: Progressbar Balken macht quatsch...

Beitrag von Andy Nightingale »

m.fuchs hat geschrieben: Di 11. Nov 2025, 13:29 Hm, hab jetzt hier weder mit Windows noch mit Linux irgendein Problem gesehen. Das Ding läuft durch, dann wird das Label eingeblendet und 1,5 Sekunden später geht das Programm zu.
Hi Fuchs,
ich habe alles mögliche durchgetestet. Bei mir geht es nicht. Verstehe es auch nicht. Ich habe noch Windows 10 und das Fenster ist modal.- vielleicht ist es das.-ich teste weiter
Grüße

Andy Nightingale
Beiträge: 299
Registriert: Mo 13. Jan 2025, 12:11

Re: Progressbar Balken macht quatsch...

Beitrag von Andy Nightingale »

Soner hat geschrieben: Di 11. Nov 2025, 13:56 Dieser Teil sieht für mich auch komplett merkwürdig aus:

Code: Alles auswählen

Label1.Update;
Repaint;
Application.ProcessMessages;
Sleep(1500);
Self.Close;
Hi Soner,

danke für den Test.-aber wenn ich es als Creat im Fenster rein mache.-also nicht starten mit dem Button.-dann gehts wieder nicht. Ohne das Sleep zeigt es nicht das Label an.....
Grüße

Andy Nightingale
Beiträge: 299
Registriert: Mo 13. Jan 2025, 12:11

Re: Progressbar Balken macht quatsch...

Beitrag von Andy Nightingale »

wp_xyz hat geschrieben: Di 11. Nov 2025, 14:06 Zumindest bei Windows hat die ProgressBar eine bescheuerte Animation, die den Balken erst allmählich zum richtigen Wert laufen lässt. Dadurch hat man den Eindruck also laufe der Balken den wahren Wert hinterher und komme evtl rechts gar nicht an. TProgressBarEx andererseits folgt der Einstellung sofort und wirkt viel direkter. Im angehängten Beispiel-Projekt mit oben TProgressBar und unten TProgressBarEx den Trackbar verschieben, dann sieht man das, was ich meine.
Cool.- Danke dir :-)

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 7003
Registriert: So 7. Jan 2007, 10:20
OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
CPU-Target: 32Bit (64Bit)
Wohnort: Burgenland
Kontaktdaten:

Re: Progressbar Balken macht quatsch...

Beitrag von af0815 »

Ein sleep(1500) würde ich nicht machen, Ein Schleife wo immer ein sleep(10) und ein Application.Processmessages macht ja. Weil das hält die Messageverarbeitung in Gange und das Programm ist auch bedienbar.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

Andy Nightingale
Beiträge: 299
Registriert: Mo 13. Jan 2025, 12:11

Re: Progressbar Balken macht quatsch...

Beitrag von Andy Nightingale »

af0815 hat geschrieben: Di 11. Nov 2025, 20:02 Ein sleep(1500) würde ich nicht machen, Ein Schleife wo immer ein sleep(10) und ein Application.Processmessages macht ja. Weil das hält die Messageverarbeitung in Gange und das Programm ist auch bedienbar.
Hallo 0815,
ein Sleep ist doch nur eine Pause ...warum soll das kein Sinn machen? Bei mir macht es Sinn, da ich diese Pause möchte. :-)

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 7003
Registriert: So 7. Jan 2007, 10:20
OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
CPU-Target: 32Bit (64Bit)
Wohnort: Burgenland
Kontaktdaten:

Re: Progressbar Balken macht quatsch...

Beitrag von af0815 »

Weil ein sleep den Mainthread für die Dauer suspended. Das Betriebssystem teilt für diese Zeit keine Zeit Scheibe zu. Damit werden auch keine Botschaften für den Mainthread mehr bearbeitet, das äussert sich als freeze des Benutzerinterface.

Ein sleep(0) ist zum Beispiel ein erzwungener Thread Wechsel.

Mit application.prozessmessage regt man wiederum die Messagequeuce an, aktuelle Botschaften zu bearbeiten.
Wenn man so eine Loop mit den beiden Befehlen aufbaut, do ist die zwar nicht genau in der Dauer, aber hält die GUI am Leben.
Ich sage auch immer wieder "Threads für Arme"

Wenn man sleep zu extensiv verwendet, kann das System schon Mal den Verdacht haben, das das Programm steckt.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

Mathias
Beiträge: 7125
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: Progressbar Balken macht quatsch...

Beitrag von Mathias »

Ich hatte auch schon meine Erfahrungen mit dem Progressbar gemacht. Irgendwie habe ich das Gefühl, das dieser sehr viel Overhead hat. Ich wollte mal mit LCL/GTK2 und GST ein Mediaplayer machen. Der Balken wurde durch einen Timer gesteuert. Wen man den Balken sehr schnell hin und her bewegte, hatte sich das ganze aufgehängt. Als ich anstelle der LCL natives GTK4 nahm, lief alles ohne Probleme.
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

Andy Nightingale
Beiträge: 299
Registriert: Mo 13. Jan 2025, 12:11

Re: Progressbar Balken macht quatsch...

Beitrag von Andy Nightingale »

af0815 hat geschrieben: Mi 12. Nov 2025, 08:10
Wenn man sleep zu extensiv verwendet, kann das System schon Mal den Verdacht haben, das das Programm steckt.
Hallo 0815,
verstehe.-danke für die Erklärung.

Andy Nightingale
Beiträge: 299
Registriert: Mo 13. Jan 2025, 12:11

Re: Progressbar Balken macht quatsch...

Beitrag von Andy Nightingale »

Mathias hat geschrieben: Mi 12. Nov 2025, 08:25 Als ich anstelle der LCL natives GTK4 nahm, lief alles ohne Probleme.
Hallo Mathias,
da kenne ich mich leider nicht aus. Stehe noch am Anfang :-( Grüße

Antworten