![]() |
pbstMarquee richtig verwenden?
Ich dachte eigentlich, ProgressBar.Style = pbstMarquee würde automatisch in einem Thread laufen und immer eine Aktivität anzeigen (solange die Progressbar sichtbar ist).
Ich wollte dies nutzen, um einen Speicherungsprozess anzuzeigen, in dem die Anwendung mal kurz "hängt" (1-2 Sec). Der Fortschritt wird aber nur dargestellt, wenn die Anwendung Freiraum hat (Idle). Wenn ich die Progressbar beim Speichern von Hand aktualisieren muss, wird das etwas umständlich. Bin ich auf dem Holzweg? Wie geht es richtig? |
AW: pbstMarquee richtig verwenden?
Die garfische Aktualisierung erfolgt aber im Hauptthread. Mach es eher andersrum und lagere den Speicherungsprozess in einen Thread aus
|
AW: pbstMarquee richtig verwenden?
Ich glaub mit der VCL muss derzeit alles GUI-mäßiges im Hauptthread geschehen, wird bei der Progressbar wahrscheinlich genauso sein.
Kannst Du eventuelle Deine Speicheroperation in einen Thread auslagern? Damit müsste es gehen. |
AW: pbstMarquee richtig verwenden?
Das Neuzeichnen dieser Queue geschieht auch über Messages und wenn der Hauptthread hängt, dann hängen alle Messages fest und keiner zeichnet sich neu.
|
AW: pbstMarquee richtig verwenden?
Daher habe ich mir angewöhnt, alles, was nicht mit der GUI zu tun hat und längere Zeit der Berechnung/Abarbeitung benötigen könnte, in einen Thread auszulagern.
Das gleiche Problem hat man z.B. wenn du eine GIF-Animation laufen lassen willst -- über diesen Weg bin ich über das Problem gestolpert. |
AW: pbstMarquee richtig verwenden?
Liste der Anhänge anzeigen (Anzahl: 2)
Hallo...
es gab mal jemanden der hat eine Ubuntu Progressbar gemacht... Zitat:
Sollte dieses in irgend einer Weise die Regeln verletzen bitte ich um Mitteilung. :hi: Die UbuntuProgress.pas in den Originaldateien ersetzen (ZIP) |
AW: pbstMarquee richtig verwenden?
Zitat:
Code:
Ich denke nicht ;) Aber das eigentliche Problem wird es wohl (leider) nicht lösen.
// TUbuntuProgress
// Version 1.2 // // Copyright 2008 - 2009 bei Jonas Döbertin // E-Mail: jonas@doebertin.de // Diesen Projekt ist Open-Source und wird es auch immer bleiben. // Jeder der möchte kann diesen Code weitergeben und verwenden wie // er möchte, Bedingung ist, das dieser Hinweis enthalten bleibt. // Wenn dieser Code in einem Projekt verwendung findet, würde ich // mich lediglich über eine kleine Nachricht freuen! |
AW: pbstMarquee richtig verwenden?
Warum nicht ? Die Progressbar läuft und läuft und läuft... egal was die GUI oder der Rest macht.
|
AW: pbstMarquee richtig verwenden?
Wäre zu schön um wahr zu sein, aber wenn der Hauptthread hängt, dann wird nichts neu gezeichnet, zumindest kenne ich es so :) Zudem habe ich hier sogar noch den Beweis, dass es nicht gehen kann:
Delphi-Quellcode:
Die Animation selbst wird via Thread berechnet, okay. Aber dann wird hier Synchronize aufgerufen, sodass die ProgressBar neu gezeichnet wird. Hängt der Hauptthread, dann steht somit auch der TMarqueeThread, da das Synchronize erst dann zurückkehrt, wenn der Hauptthread die gegebene Methode abgearbeitet hat, aber der steht ja...
procedure TMarqueeThread.Execute;
begin inherited; repeat if WaitForSingleObject(FStop, FInterval) = WAIT_TIMEOUT then Synchronize(DoOnTimer); until Terminated; end; |
AW: pbstMarquee richtig verwenden?
Ok, danke für die Antworten. Ich dachte, die Progressbar startet im Marquee-Mode selbst einen eigenen Thread in dem sie sich neu zeichnet - und ich hätte etwas falsch eingestellt.
Ich rufe jetzt StepIt erst mal in meiner Speicherfunktion auf. Das tut es erst mal notdüftig. Andere Lösungen teste ich ggf. später mal noch. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:09 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