Unter Windows XP kennt die Fortschrittsanzeige einen neuen zusätzlichen Stil, den Sie benutzen können wenn Sie die Dauer einer Aktion nicht abschätzen können. Dabei wird die Fortschrittsanzeige nicht schrittweise erhöht, sondern eine festgelegte Anzahl an "Blöcken" bewegt sich von links nach rechts.
Um diesen Effekt zu erreichen sind allerdings die Common Controls 6.0 erforderlich. Das bedeutet, dass Sie Ihrer Anwendung eine Manifestdatei beilegen müssen. Damit ist auch klar, warum dieser Stil min. Windows XP voraussetzt.
Sie erzeugen die Fortschrittsanzeige wie am Anfang dieses Tutorials gezeigt, benutzen aber das neue Stilattribut PBS_MARQUEE:
hwndXP := CreateWindowEx(0,PROGRESS_CLASS,nil, WS_CHILD or WS_VISIBLE or PBS_MARQUEE,10,60, 270,15,wnd,IDC_XPPROGRESS,hInstance,nil);
Auf die Verwendung des PBS_SMOOTH-Attributes sollten Sie aber verzichten. Der Fortschrittsbalken würde zwar ebenfalls in der neuen Form animiert werden, allerdings ist er viel zu klein:
![]()
Wenn die Themes von Windows XP aktiv sind, dann spielt die Gestaltung (ob PBS_SMOOTH oder nicht) keine Rolle, weil in dem Fall ohnehin die jeweiligen Theme-Grafiken verwendet werden. Da Sie allerdings nicht voraussetzen können, dass jeder Windows XP-Benutzer auch die Themes aktiviert hat, sollten Sie besser bei der normalen Blockansicht bleiben:
![]()
Zum Starten der Animation steht Ihnen die neue Progressbar-Nachricht "PBM_SETMARQUEE"
zur Verfügung, die als wparam den Status (true, false) und als
lparam die Anzahl der Millisekunden für die Animation erwartet. Um den Fortschrittsbalken bspw. mit einer Geschwindigkeit von 40 Millisekunden zu bewegen, schreiben Sie:
SendMessage(hwndXP,PBM_SETMARQUEE,WPARAM(true),40);
Wenn Sie die Animation stoppen wollen, ist die Zeitangabe irrelevant. Hier ist nur wichtig, dass Sie false
im wparam benutzen:
SendMessage(hwndXP,PBM_SETMARQUEE,WPARAM(false),0);
Das Beispielprogramm erzeugt eine zusätzliche Fortschrittsanzeige in diesem Stil. Voraussetzung ist, dass min. Windows XP aktiv ist, andernfalls sehen Sie lediglich eine Hinweismeldung ... :o)