![]() |
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?? |
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) |
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.
|
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: ![]() ![]() |
Re: Vista: Verzögerte TProgressBar?
Zitat:
|
Re: Vista: Verzögerte TProgressBar?
OMG und ich such' schon ewig was *ich* da falsch mache :shock:
Vielen Dank auch von mir. |
Re: Vista: Verzögerte TProgressBar?
Zitat:
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? |
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 |
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 |
Re: Vista: Verzögerte TProgressBar?
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:
|
Re: Vista: Verzögerte TProgressBar?
Auch von mir danke. Dachte immer das liegt an mir :D
|
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. |
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.
|
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... |
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:
oder
xxx.Position := x + 1;
xxx.Position := x;
Delphi-Quellcode:
oder
xxx.Position := xxx.Max;
xxx.Position := x; 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 ![]() ![]() ![]() |
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