Entwickler-Ecke

Grafische Benutzeroberflächen (VCL & FireMonkey) - "Durchlaufende" Progressbar im XP-Stil


Heiko - Fr 23.09.05 14:40
Titel: "Durchlaufende" Progressbar im XP-Stil
Wie kann man eine "durchlaufende" Progressbar realisieren wie im Anhang realisieren? Nur über Vererbung und wenn ja von welcher soll ich es am besten ableiten?


AXMD - Fr 23.09.05 14:45

Das Problem kommt mir äußerst bekannt vor. Such mal hier oder in der DP - irgendwo gab's da (evtl. sogar gestern oder vorgestern) ein Thema...

AXMD


Delete - Fr 23.09.05 14:46

Here you go: http://www.delphipraxis.net/topic64015_endlose+progressbar.html ;)


Heiko - Fr 23.09.05 14:51

thx, geht es aber auch, dass die Komponente auch unter älteren OS funktioniert, vlt. nur ohne XP-Stil?


Martin1966 - Fr 23.09.05 14:52

Hallo Heiko!

Das Geheimnis liegt in dem Style PBS_MARQUEE [http://msdn.microsoft.com/library/default.asp?url=/library/en-us/shellcc/platform/commctls/progbar/styles.asp].

Bei den Schweizern findest du eine fertige Komponente: http://www.swissdelphicenter.ch/de/showcode.php?id=1680

Lg Martin


Heiko - Fr 23.09.05 14:55

Bis zu dem hatte ich mich auch schon durchgeklickt. Ich habe nur noch einmal deswegen [http://www.delphipraxis.net/post415646.html#415646] nachgefragt (XPMan bringt ja einem nur etwas wenn man XP hat. Unter z.B. 95 denke ich macht die überhaupt nix) ;)


Heiko - Fr 23.09.05 15:47

Mhm, irgendwie funktioniert es bei mir nicht. Besser gesagt ich bekomme es nicht hin ;). Habe ich vlt. etwas vergessen?


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
const
  PBM_SETMARQUEE = WM_USER + 10;

procedure TSearchMusikForm.FormShow(Sender: TObject);
begin
  SearchProgressBar.Position:=0
end;

procedure TSearchMusikForm.BeginMusikSearch;
begin
  ...
  SetWindowLong(SearchProgressBar.Handle, GWL_STYLE, GetWindowLong(SearchProgressBar.Handle, GWL_STYLE) or $08);
  SendMessage(SearchProgressBar.Handle, PBM_SETMARQUEE, 110);
  ... //ab hier soll der Balken ständig "durchlaufen"
  SendMessage(SearchProgressBar.Handle, PBM_SETMARQUEE, 00);
  ... //ab hier soll der Balken immer voll sein
end;


//Edit: es funktioniert doch. Der zeitraum war nur ein bisschen kurz wo es kommen soll
//Edit: Wie mache ich das er wieder "normal" ist?
//Edit: Ich habe es hinbekommen, in dem ich den alten Style eingespeichert habe


Heiko - Do 29.12.05 16:15

So, ich muss mich hier zum Thema doch noch einmal melden.

Wenn ich bei XP ein anderen Win-Style nehmen (von Vista einen), bleibt die Progressbar leer, wo sie eigentlich durchlaufen sollte. Zu erst dachte ich, dass das Style die nicht unterstützt, allerdings gibt es die durchlaufende Progressbar noch bei der Win-Suche. Was muss ich noch einstellen, damit es ordentlich geht?