Delphi-PRAXiS

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 Vista: Verzögerte TProgressBar? (https://www.delphipraxis.net/87875-vista-verzoegerte-tprogressbar.html)

Rakshasa 6. Mär 2007 17:42


Vista: Verzögerte TProgressBar?
 
Hallo Leute,

ich habe auf meinem System (Vista 64-Bit) und Delphi 2006 folgendes seltsames Phänomen (mal wieder..):

Wenn ich über mein Programm die normale TProgressBar anzeige, dann reagiert diese mit "Zeitverzögerung". Wenn ich also bsp. eine Schleife von 0 bis 10000 habe und ProgressBar.Position setze, dann ist die Progressbar erst bei der Hälfte, obwohl die Schleife schon durch ist, das Maximum also erreicht wurde. Es scheint fast so, als wäre die ProgressBar mit einem Timer verbunden, der alle 300-500 ms ein Update der ProgressBar durchführt und erst dann die Füllung mit dem Wert von "Position" abgleicht.

Alle Aufrufe von .ProcessMessages, .Update oder .Repaint haben nichts bewirkt...
Dieser Fehler taucht nur auf, wenn das XPManifest eingebunden ist.


Weiß jemand Rat??

himitsu 7. Mär 2007 11:13

Re: Vista: Verzögerte TProgressBar?
 
Sowas hab ich auch bemerkt, nur schien es mir so, als wenn da nicht nur eine Verzögerung enthalten wäre, sondern Vista bei größeren Schritten einen "fließenden" Übergang schaft ... also nicht gleich der neue Wert angenommen wird, sondern die Bar langsam "rüberrutscht". :gruebel:

Allerdings hab ich Vista nur in 'ner VM laufen und dachte es hängt damit irgendwie zusammen. :stupid:
(in der VM läuft ja alles etwas langsamer)

Rakshasa 7. Mär 2007 19:00

Re: Vista: Verzögerte TProgressBar?
 
Naja, könnte sein ... allerdings gibt es genug Programme, die die ProgressBar offensichtilch ohne Beeiträchtigung benutzen können. Scheint wohl ein weiteres Delphi Vista-Problem zu sein.

Assertor 7. Mär 2007 20:16

Re: Vista: Verzögerte TProgressBar?
 
Hallo,

das Problem ist das veränderte Verhalten der Progressbars unter Aero. Der Progressbar kümmert sich sozusagen selbst um sein Design.

Es gibt aber einen Workaround:
Der Progressbar läuft zwar verzögert Vorwärts, aber springt Rückwärts korrekt und sofort in seine neue Position.

Also am Besten:
- zuerst neue Position per Position := NewPosition + 1
- dann sofort die tatsächliche neue Position
Position := NewPosition

Gruß winkel79

Quellen:
http://news.jrsoftware.org/news/innosetup/msg62356.html
http://forums.microsoft.com/MSDN/Sho...64615&SiteID=1

Rakshasa 7. Mär 2007 20:21

Re: Vista: Verzögerte TProgressBar?
 
Zitat:

Zitat von winkel79
Also am Besten:
- zuerst neue Position per Position := NewPosition + 1
- dann sofort die tatsächliche neue Position
Position := NewPosition

Aaah ... das funktioniert bestens, danke!!! :)

TrickyMartin 15. Jul 2009 10:39

Re: Vista: Verzögerte TProgressBar?
 
OMG und ich such' schon ewig was *ich* da falsch mache :shock:

Vielen Dank auch von mir.

Luckie 15. Jul 2009 10:45

Re: Vista: Verzögerte TProgressBar?
 
Zitat:

Zitat von Assertor
Es gibt aber einen Workaround:
Der Progressbar läuft zwar verzögert Vorwärts, aber springt Rückwärts korrekt und sofort in seine neue Position.

Also am Besten:
- zuerst neue Position per Position := NewPosition + 1
- dann sofort die tatsächliche neue Position
Position := NewPosition

Das darf doch nicht wahr sein. :wall:

Könnte das mal jemand ohne die VCL ausprobieren? Eventuell liegt der Fehler in der Kapselung der Progressbar in der VCL. Oder lässt sich das Problem auch mit anderen Frameworks nachvollziehen?

patti 15. Jul 2009 12:19

Re: Vista: Verzögerte TProgressBar?
 
Hallo,

Kann das Problem bei mir ebenfalls feststellen und habe mich auch gewundert, woran das liegen könnte. Unter XP funktioniert alles einwandfrei, nur unter Vista halt eben nicht. Dank dem "Workaround" stimmt zwar jetzt die Anzeige, aber so richtig sauber ist das nicht, oder?

Patti

Dawn87 15. Jul 2009 12:45

Re: Vista: Verzögerte TProgressBar?
 
Ich denke das Verhalten ist beabsichtigt. Zumindest unter Delphi 2009 hat die ProgressBar die Eigenschaften "Smooth" und "SmoothReverse" die das von euch geschilderte Verhalten beeinflussen sollten.

Habe aber gerade kein Vista zur Hand um das auszuprobieren.

Grüße
Stefan

turboPASCAL 15. Jul 2009 13:09

Re: Vista: Verzögerte TProgressBar?
 
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:

Zitat von Luckie
Könnte das mal jemand ohne die VCL ausprobieren?

Ja, das ist auch bei nonVCL so.

hitzi 15. Jul 2009 13:27

Re: Vista: Verzögerte TProgressBar?
 
Auch von mir danke. Dachte immer das liegt an mir :D

turboPASCAL 15. Jul 2009 13:38

Re: Vista: Verzögerte TProgressBar?
 
Eigentlich war mir dieses "Feature" vor einiger Zeit schon aufgefallen und wollte mal fragen.
Habs aber vergessen. ;)

Ich hatte bei MS schon mal etwas zu dem Verhalten der ProgressBar gesuch, wurde aber nicht fündig.
Mal sehen was Windows 7 dazu sagt.

olaf43 27. Aug 2016 09:17

AW: Vista: Verzögerte TProgressBar?
 
Unter Windows 10 tritt das Problem genauso auf. Ich benutze deshalb den Progressbar nicht mehr, sondern ein tShape Objekt in Rectangle-Form und passender Brush-Farbe, dessen width ich dem anzuzeigenden Fortschritt anpasse.

jaenicke 27. Aug 2016 12:21

AW: Vista: Verzögerte TProgressBar?
 
Viel sinnvoller ist einfach den Maximalwert aus fest gesetzter Position und gewünschter Position zu berechnen. Ich setze z.B. Position auf 100 und will 1%, dann setze ich Maximum auf 10000. Dann will ich 20%, setze also Maximum auf 500.

Diese Änderung passiert ohne die Verzögerung.

Allerdings ist das Feature durchaus hilfreich, wenn man selbst keine Glättung des Verlaufs durchführt...

himitsu 28. Aug 2016 00:32

AW: Vista: Verzögerte TProgressBar?
 
Vorwärts wird nunmal seit einer Weile eine "fließende" Bewegung generiert.
Rückwärts geht es meist sofort.

Also im Prinzip braucht man Position nur höher stellen und dann wieder zurück gehen.

Delphi-Quellcode:
xxx.Position := x + 1;
xxx.Position := x;
oder
Delphi-Quellcode:
xxx.Position := xxx.Max;
xxx.Position := x;
oder
man ändert eben den Maximalwert, welches auch ein sofortiges Neuzeichnen an der gewollten Stelle auslöst.


Achtung: In Delphi hat man tatsächlich inzwischen ein paar Vista-Erweiterungen in den VCL-Controls nachgerüstet. (so tot ist die VCL also doch nicht)
Man muß dort also Delphi-Referenz durchsuchenTProgressBar.SmoothReverse auf False stehen lassen, sonst geht der Rückwätstrick nicht mehr.
https://msdn.microsoft.com/en-us/lib.../bb760820.aspx


Bei Google suchenwindows progressbar disable animation


Alle Zeitangaben in WEZ +1. Es ist jetzt 06:36 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