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 Progresbar zur Laufzeit zur Marquee ProgressBar machen? (https://www.delphipraxis.net/51913-progresbar-zur-laufzeit-zur-marquee-progressbar-machen.html)

FriFra 21. Aug 2005 22:00


Progresbar zur Laufzeit zur Marquee ProgressBar machen?
 
Die Schweizer haben eine MarqueeProgressbar von der normalen Progressbar abgeleitet:
http://www.swissdelphicenter.ch/de/showcode.php?id=1680

Ich frage mich nun, ob es nicht möglich wäre eine "normale" Progressbar zur Laufzeit zur MarqueeProgressbar zu machen?

Luckie 21. Aug 2005 22:24

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:

FriFra 21. Aug 2005 22:27

Re: Progresbar zur Laufzeit zur Marquee ProgressBar machen?
 
Zitat:

Zitat von Luckie
Also manchmal erstaunst du mich immer wieder. Du programmierst doch nicht erst seit gestern oder? :gruebel:

Sicher, aber manchmal ist es spät, und manchmal sieht man den Wald vor Bäumen nicht ;)

jfheins 21. Aug 2005 22:39

Re: Progresbar zur Laufzeit zur Marquee ProgressBar machen?
 
Beispiel:
Delphi-Quellcode:
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;
Den Code in Funktionen umzuformen, das überlass ich dir ;)

Und L...war natürlich mal wieder schneller :cry:

FriFra 21. Aug 2005 22:42

Re: Progresbar zur Laufzeit zur Marquee ProgressBar machen?
 
So, jetzt hab ichs...
Delphi-Quellcode:
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);
...
Aber das ganze funktioniert leider nur, wenn die unit XPMan engebunden wurde :x ... somit kann ich's nicht gebrauchen :?
Bekommt man den ProgressBar auch ohne XPMan in den Marquee-Style?

[Edit]
:oops: Ups... da war ja wieder einer schneller ;)

jfheins 21. Aug 2005 22:44

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 ;)

Daniel G 21. Aug 2005 22:50

Re: Progresbar zur Laufzeit zur Marquee ProgressBar machen?
 
da müsstest du dann nach "XPManifest" suchen....

Loni 22. Jun 2007 20:45

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???

ManuMF 22. Jun 2007 21:45

Re: Progresbar zur Laufzeit zur Marquee ProgressBar machen?
 
Hast du vielleicht die Konstanten vergessen (siehe Beitrag #5)?

Luckie 22. Jun 2007 23:47

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.

Mazel 23. Jun 2007 07:39

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?

fwsp 23. Jun 2007 08:10

Re: Progresbar zur Laufzeit zur Marquee ProgressBar machen?
 
Zitat:

Zitat von Mazel
Kann man das umgehen?

hilft das?
Delphi-Quellcode:
ProgressBar.DoubleBuffered := True;

Mazel 23. Jun 2007 09:11

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?

LizardKaiser 23. Jun 2007 10:04

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

Helmi 23. Jun 2007 11:34

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:
var
  cs:LongInt;
begin
  cs := GetWindowLong(ProgressBar1.Handle, GWL_STYLE);
  SetWindowLong(ProgressBar1.Handle, GWL_STYLE, cs Or PBS_MARQUEE);
schalt ich das Marquee für die Progressbar ein.

Nun dacht ich mir, mit
Delphi-Quellcode:
var
  cs:LongInt;
begin
  cs := GetWindowLong(ProgressBar1.Handle, GWL_STYLE);
  SetWindowLong(ProgressBar1.Handle, GWL_STYLE, cs XOR PBS_MARQUEE); //Änderung: XOR
schalt ich es wieder aus.

Stimmt das - ist das so richtig?

Mit so was hab ich immer mal wieder Probleme - sorry *schäm* :oops: :oops: :oops:

DeddyH 23. Jun 2007 11:36

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.

Helmi 23. Jun 2007 11:44

Re: Progresbar zur Laufzeit zur Marquee ProgressBar machen?
 
wunderbar!

Danke für die Hilfe!

Cyberbob 8. Mär 2008 00:24

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?

Luckie 8. Mär 2008 00:34

Re: Progresbar zur Laufzeit zur Marquee ProgressBar machen?
 
Zitat:

Zitat von Cyberbob
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?

Aktualisier sie nicht ständig. Zeig mal den entsprechenden Code.

Cyberbob 8. Mär 2008 00:56

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:
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;
ohne progressbar1.DoubleBuffered := True; läuft alles bestens

jfheins 8. Mär 2008 13:15

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;

Cyberbob 8. Mär 2008 13:23

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?

RavenIV 15. Mai 2008 14:06

Re: Progresbar zur Laufzeit zur Marquee ProgressBar machen?
 
Zitat:

Zitat von Cyberbob
Irgendwelche Einstellungen von Delphi?
Es kommen auch keine Fehlermeldungen, die Progressbar bleibt einfach nur bei 0%
Kanns auch an Vista liegen?

Es wird wohl die unit xpman fehlen...

Cyberbob 15. Mai 2008 19:10

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

Fussball-Robby 15. Mai 2008 19:17

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:

Cyberbob 15. Mai 2008 19:50

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