Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi pbstMarquee richtig verwenden? (https://www.delphipraxis.net/161030-pbstmarquee-richtig-verwenden.html)

stahli 13. Jun 2011 13:07


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?

mkinzler 13. Jun 2011 13:10

AW: pbstMarquee richtig verwenden?
 
Die garfische Aktualisierung erfolgt aber im Hauptthread. Mach es eher andersrum und lagere den Speicherungsprozess in einen Thread aus

mirage228 13. Jun 2011 13:10

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.

himitsu 13. Jun 2011 13:19

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.

s.h.a.r.k 13. Jun 2011 16:18

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.

haentschman 13. Jun 2011 16:27

AW: pbstMarquee richtig verwenden?
 
Liste der Anhänge anzeigen (Anzahl: 2)
Hallo...

es gab mal jemanden der hat eine Ubuntu Progressbar gemacht...
Zitat:

Copyright 2008 - 2009 bei Jonas Döbertin
Im Anhang eine Threadversion mit freundlicher Unterstützung von DeddyH.

Sollte dieses in irgend einer Weise die Regeln verletzen bitte ich um Mitteilung. :hi:

Die UbuntuProgress.pas in den Originaldateien ersetzen (ZIP)

s.h.a.r.k 13. Jun 2011 16:29

AW: pbstMarquee richtig verwenden?
 
Zitat:

Zitat von haentschman (Beitrag 1106172)
Sollte dieses in irgend einer Weise die Regeln verletzen bitte ich um Mitteilung. :hi:

Code:
//  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!
Ich denke nicht ;) Aber das eigentliche Problem wird es wohl (leider) nicht lösen.

haentschman 13. Jun 2011 16:31

AW: pbstMarquee richtig verwenden?
 
Warum nicht ? Die Progressbar läuft und läuft und läuft... egal was die GUI oder der Rest macht.

s.h.a.r.k 13. Jun 2011 16:41

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:
procedure TMarqueeThread.Execute;
begin
  inherited;
  repeat
    if WaitForSingleObject(FStop, FInterval) = WAIT_TIMEOUT then
      Synchronize(DoOnTimer);
  until Terminated;
end;
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...

stahli 13. Jun 2011 16:50

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.
Seite 1 von 2  1 2      

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