![]() |
Progresbar zur Laufzeit zur Marquee ProgressBar machen?
Die Schweizer haben eine MarqueeProgressbar von der normalen Progressbar abgeleitet:
![]() Ich frage mich nun, ob es nicht möglich wäre eine "normale" Progressbar zur Laufzeit zur MarqueeProgressbar zu machen? |
Re: Progresbar zur Laufzeit zur Marquee ProgressBar machen?
Klar, setze die entsprechenden Stile einfach zur Laufzeit: PBS_MARQUEE und entsprechend dann die Animation: PBM_SETMARQUEE.
Also manchmal erstaunst du mich immer wieder. Du programmierst doch nicht erst seit gestern oder? :gruebel: |
Re: Progresbar zur Laufzeit zur Marquee ProgressBar machen?
Zitat:
|
Re: Progresbar zur Laufzeit zur Marquee ProgressBar machen?
Beispiel:
Delphi-Quellcode:
Den Code in Funktionen umzuformen, das überlass ich dir ;)
procedure TForm1.Button3Click(Sender: TObject);
var Bar: TProgressBar; begin Bar := ProgressBar1; SetWindowLong(Bar.Handle, GWL_STYLE, GetWindowLong(Bar.Handle, GWL_STYLE) or PBS_MARQUEE) // Jetzt isses ne Marquee-Progresbar end; procedure TForm1.Button4Click(Sender: TObject); // hier verändern wir die Geschwindigkeit - je kleiner, desto langsamer var AniSpeed: Cardinal; Bar: TProgressBar; begin Bar := ProgressBar1; AniSpeed := strtoint (Edit1.Text); if AniSpeed <> 0 then SendMessage(Bar.Handle, PBM_SETMARQUEE, 1, AniSpeed) else SendMessage(Bar.Handle, PBM_SETMARQUEE, 0, 0); end; Und L...war natürlich mal wieder schneller :cry: |
Re: Progresbar zur Laufzeit zur Marquee ProgressBar machen?
So, jetzt hab ichs...
Delphi-Quellcode:
Aber das ganze funktioniert leider nur, wenn die unit XPMan engebunden wurde :x ... somit kann ich's nicht gebrauchen :?
const
PBS_MARQUEE = $08; PBM_SETMARQUEE = WM_USER + 10; var cs:LongInt; begin cs := GetWindowLong(ProgressBar1.Handle, GWL_STYLE); SetWindowLong(ProgressBar1.Handle, GWL_STYLE, cs Or PBS_MARQUEE); SendMessage(ProgressBar1.Handle, PBM_SETMARQUEE, 1, 40); ... Bekommt man den ProgressBar auch ohne XPMan in den Marquee-Style? [Edit] :oops: Ups... da war ja wieder einer schneller ;) |
Re: Progresbar zur Laufzeit zur Marquee ProgressBar machen?
Nein, das XPMan sagt Windows, dass du die neuen XP-Controls nutzen möchtest - und erst die Unterstützen das afaik ;)
|
Re: Progresbar zur Laufzeit zur Marquee ProgressBar machen?
da müsstest du dann nach "XPManifest" suchen....
|
Re: Progresbar zur Laufzeit zur Marquee ProgressBar machen?
Hi kann mir jemand sagen warum Delphi 2007 PBS_MARQUEE nicht erkennt "[DCC Fehler] KyteUnit.pas(41): E2003 Undefinierter Bezeichner: 'PBS_MARQUEE'" ich habe auch das XPMan eingebunden . Was mache ich falsch???
|
Re: Progresbar zur Laufzeit zur Marquee ProgressBar machen?
Hast du vielleicht die Konstanten vergessen (siehe Beitrag #5)?
|
Re: Progresbar zur Laufzeit zur Marquee ProgressBar machen?
Die Delphi Units hinken immer etwas hinter her und kennen deshalb die Konstante nicht. Du musst sie also selber deklarieren.
|
Re: Progresbar zur Laufzeit zur Marquee ProgressBar machen?
Guten Morgen,
ich wusste gar nicht dass man das auch mit den Delphi Komponenten machen kann. Sehr erfreulich für mich. Nun ist mir aber unter Delphi 7 aufgefallen, dass die Progressbar ein wenig flackert. Kann man das umgehen? |
Re: Progresbar zur Laufzeit zur Marquee ProgressBar machen?
Zitat:
Delphi-Quellcode:
ProgressBar.DoubleBuffered := True;
|
Re: Progresbar zur Laufzeit zur Marquee ProgressBar machen?
Ja, funktioniert, danke. Ich habe es vorher mit Form1.DoubleBuffered := True ausprobiert, aber das hat nicht geklappt. Müsste das aber nicht auch funktionieren?
|
Re: Progresbar zur Laufzeit zur Marquee ProgressBar machen?
Hi,
TProgressBar wrappt das Windows CommonControl ProgressBar, somit ist es von TWinControl abgeleitet, besitzt ein eigenes Handle und ist für sich selbst verantwortlich, was das zeichnen betrifft. - Also IMHO nein. Kann aber auch sein dass ich ganz deneben liege :roll: Grüße, Lk |
Re: Progresbar zur Laufzeit zur Marquee ProgressBar machen?
Hallo,
gleich mal zuerst, ich schäme mich zutiefst :oops: :oops: :oops: Aber ich muss es fragen, da ich momentan vor lauter Bäume keine Bäume mehr seh :oops: :oops: :oops: Mit:
Delphi-Quellcode:
schalt ich das Marquee für die Progressbar ein.
var
cs:LongInt; begin cs := GetWindowLong(ProgressBar1.Handle, GWL_STYLE); SetWindowLong(ProgressBar1.Handle, GWL_STYLE, cs Or PBS_MARQUEE); Nun dacht ich mir, mit
Delphi-Quellcode:
schalt ich es wieder aus.
var
cs:LongInt; begin cs := GetWindowLong(ProgressBar1.Handle, GWL_STYLE); SetWindowLong(ProgressBar1.Handle, GWL_STYLE, cs XOR PBS_MARQUEE); //Änderung: XOR Stimmt das - ist das so richtig? Mit so was hab ich immer mal wieder Probleme - sorry *schäm* :oops: :oops: :oops: |
Re: Progresbar zur Laufzeit zur Marquee ProgressBar machen?
Mit xor switchst Du um (ein in aus und umgekehrt). Um zuverlässig auszuschalten, kannst Du and not nehmen.
|
Re: Progresbar zur Laufzeit zur Marquee ProgressBar machen?
wunderbar!
Danke für die Hilfe! |
Re: Progresbar zur Laufzeit zur Marquee ProgressBar machen?
Wenn ich in TurboDelphi2006 Explorer Progressbar1.DoubleBuffered := True; schreib, funktioniert der Marquee-Effekt nicht mehr, ohne das DoubleBuffered flackert die Progressbar allerdings, was kann ich tun?
|
Re: Progresbar zur Laufzeit zur Marquee ProgressBar machen?
Zitat:
|
Re: Progresbar zur Laufzeit zur Marquee ProgressBar machen?
nix. nur den code der oben steht. sonst ist das formular leer und im sonstigen programm befindet sich auch nicht mehr
aber hier mein code:
Delphi-Quellcode:
ohne progressbar1.DoubleBuffered := True; läuft alles bestens
uses
..., xpman; procedure TForm2.FormCreate(Sender: TObject); const PBS_MARQUEE = $08; PBM_SETMARQUEE = WM_USER + 10; var cs:LongInt; begin cs := GetWindowLong(ProgressBar1.Handle, GWL_STYLE); SetWindowLong(ProgressBar1.Handle, GWL_STYLE, cs Or PBS_MARQUEE); SendMessage(ProgressBar1.Handle, PBM_SETMARQUEE, 1, 40); progressbar1.DoubleBuffered := True; end; |
Re: Progresbar zur Laufzeit zur Marquee ProgressBar machen?
Also bei mir funktioniert der Code wunderbar ... :gruebel:
Ich würde jetzt fast sagen, der Fehler muss woanders liegen :mrgreen:
Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
const PBS_MARQUEE = $08; PBM_SETMARQUEE = WM_USER + 10; var cs:LongInt; begin cs := GetWindowLong(ProgressBar1.Handle, GWL_STYLE); SetWindowLong(ProgressBar1.Handle, GWL_STYLE, cs Or PBS_MARQUEE); SendMessage(ProgressBar1.Handle, PBM_SETMARQUEE, 1, 40); progressbar1.DoubleBuffered := True; GroupBox1.DoubleBuffered := True; end; |
Re: Progresbar zur Laufzeit zur Marquee ProgressBar machen?
Irgendwelche Einstellungen von Delphi?
Es kommen auch keine Fehlermeldungen, die Progressbar bleibt einfach nur bei 0% Kanns auch an Vista liegen? |
Re: Progresbar zur Laufzeit zur Marquee ProgressBar machen?
Zitat:
|
Re: Progresbar zur Laufzeit zur Marquee ProgressBar machen?
xpman ist da, sonst würde er ja nicht alles im neuen style anzeigen. ich hab eben feststellen können. das das programm, was unter vista nicht geht unter xp wunderbar läuft. also liegts an vista
|
Re: Progresbar zur Laufzeit zur Marquee ProgressBar machen?
Es gab hier kürzlich erst einen Thread, in dem es um Probleme mit Doublebuffered & XPMan ging. Einfach mal suchen :wink:
|
Re: Progresbar zur Laufzeit zur Marquee ProgressBar machen?
thx
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:19 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