Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi ProgressBar Status hin/her bewegen ??? (https://www.delphipraxis.net/27766-progressbar-status-hin-her-bewegen.html)

CoRe.eXtreem 15. Aug 2004 14:15


ProgressBar Status hin/her bewegen ???
 
Hi,
wie hat der Author (Martin W) das mit der ProgressBar beim Splash-Screen gemacht?

http://www.delphipraxis.net/internal...ct.php?t=29941

Der Status bewegt sich hin und her. Würde mich mal interesieren wie das funktioniert??

Gruß Core

w3seek 15. Aug 2004 14:23

Re: ProgressBar Status hin/her bewegen ???
 
das ist der PBS_MARQUEE style der progress bars, geht aber nur mit comctl32.dll version 6.0 (XP und spaeter). In seinem beispiel hat er wohl ein control dafuer gebastelt oder auf ein fertiges zurueckgegriffen.

CoRe.eXtreem 15. Aug 2004 14:25

Re: ProgressBar Status hin/her bewegen ???
 
war nur so ne frage sieht irgendwie witzig aus :mrgreen:

Danke, Core

Basic-Master 15. Aug 2004 14:42

Re: ProgressBar Status hin/her bewegen ???
 
gibts net bei den jedis so ne progressbar :?: :gruebel:

CoRe.eXtreem 7. Aug 2005 11:15

Re: ProgressBar Status hin/her bewegen ???
 
Achja hier ist der Code, habe ihn zufällig beim stöbern gefunden.

http://www.swissdelphicenter.ch/de/showcode.php?id=1680

Delphi-Quellcode:
unit MarqueeProgressBar;

interface

uses
  SysUtils, Windows, Classes, Controls, ComCtrls, Messages;

type
  TMarqueeProgressBar = class(TProgressBar)
  private
    FActive: Boolean;
    FAnimationSpeed: Integer;
    procedure SetActive(const Value: Boolean);
    procedure SetAnimationSpeed(const Value: Integer);
    procedure UpdateProgressBar;
  protected
    procedure CreateParams(var Params: TCreateParams); override;
  public
    constructor Create(AOwner: TComponent); override;
  published
    property Active: Boolean read FActive write SetActive;
    property AnimationSpeed: Integer read FAnimationSpeed write SetAnimationSpeed;
  end;

const
  PBS_MARQUEE = $08;
  PBM_SETMARQUEE = WM_USER + 10;

procedure Register;

implementation

procedure Register;
begin
  RegisterComponents('SwissDelphiCenter', [TMarqueeProgressBar]);
end;

constructor TMarqueeProgressBar.Create(AOwner: TComponent);
begin
  inherited;
  FAnimationSpeed := 60;
end;

procedure TMarqueeProgressBar.CreateParams(var Params: TCreateParams);
begin
  inherited;
  Params.Style := Params.Style or PBS_MARQUEE;
end;

procedure TMarqueeProgressBar.SetActive(const Value: Boolean);
begin
  FActive := Value;
  UpdateProgressBar;
end;

procedure TMarqueeProgressBar.SetAnimationSpeed(const Value: Integer);
begin
  FAnimationSpeed := Value;
  UpdateProgressBar;
end;

procedure TMarqueeProgressBar.UpdateProgressBar;
begin
  if FActive then
    SendMessage(Self.Handle, PBM_SETMARQUEE, 1, FAnimationSpeed)
  else
    SendMessage(Self.Handle, PBM_SETMARQUEE, 0, 0);
end;

end.
Viele Grüße,

CoRe.eXtreem

MrKnogge 7. Aug 2005 12:43

Re: ProgressBar Status hin/her bewegen ???
 
Die Komponente benötigt zusätzlich noch das XP-Manifest im Programm, andernfalls funktioniert sie nicht.

gruss

Jarmen_Kell 7. Aug 2005 12:56

Re: ProgressBar Status hin/her bewegen ???
 
Zitat:

gibts net bei den jedis so ne progressbar Question Grübelnd...
Natürlich hat auch Jedi da was!

Das Ding heißt z.B. TJvWaitingGradient (Standardmäßig unter "Jv Bars, Panels")

MrKnogge 7. Aug 2005 13:00

Re: ProgressBar Status hin/her bewegen ???
 
Wenn ich mich richtig erinnere, aber nicht im XP-Stil.

gruss

christian.noeding 7. Aug 2005 13:11

Re: ProgressBar Status hin/her bewegen ???
 
?? irgendwie bin ich nicht fähig, die Komponente zu registrieren... ich muss doch eigentlich die Source in eine *.pas File schreiben und dann bei (Delphi 7) oben im Menü nur auf "Komponente installieren...", *.pas File auswählen und die dcl neu kompilieren...

da stürtzt mir aber Delphi mit einer Zugriffsverletzung ab... stimmt was an der Source nicht (finde dann aber den Fehler nicht) oder mache ich was falsch?? Andere Komponenten aus pas-Files kompilieren allerdings einwandfrei.


schöne Grüße,
Christian

MrKnogge 7. Aug 2005 13:23

Re: ProgressBar Status hin/her bewegen ???
 
Was meinst du mit "in eine *.pas-file schreiben" ?
Obiger Code ist die komplette *pas-file.

Welches OS hast du ?

gruss

Jarmen_Kell 7. Aug 2005 14:02

Re: ProgressBar Status hin/her bewegen ???
 
Zitat:

Zitat von MrKnogge
Wenn ich mich richtig erinnere, aber nicht im XP-Stil.

Korrekt.
Kann man aber versuchen durch die Farbwahl etc. zu simulieren :)

CoRe.eXtreem 7. Aug 2005 16:18

Re: ProgressBar Status hin/her bewegen ???
 
Also irgendwie bekomme ich das auch nicht gebacken!
Habe den Code in Unit2.pas geschrieben. Benutze es aus Unit1

Delphi-Quellcode:
procedure TForm1.FormShow(Sender: TObject);
var
  MProgressBar: TProgressBar;
begin
  MProgressBar:=Unit2.TMarqueeProgressBar.Create(Self);
  with MProgressBar do
    begin
      Parent:=Form1;
      Name:='MProgressBar';
      Left:=100;
      Top:=100;
    end;
end;
Active und AnimationSpeed funktionieren nicht anzusprechen.

Delphi-Quellcode:
  published
    property Active: Boolean read FActive write SetActive;
    property AnimationSpeed: Integer read FAnimationSpeed write SetAnimationSpeed;
Irgendwas mache ich falsch.

Gruß, Core

christian.noeding 7. Aug 2005 16:23

Re: ProgressBar Status hin/her bewegen ???
 
Zitat:

Zitat von MrKnogge
Was meinst du mit "in eine *.pas-file schreiben" ?
Obiger Code ist die komplette *pas-file.

Welches OS hast du ?

gruss

Ja, ich weiß :D ich habe den gesamten Code 1:1 in eine pas-File geschrieben und dann versucht diese Pas-File als Komponente zu registrieren. Meines Wissens sollte sich nach Re-Kompilierung der Benutzerdatenbank von Delphi eine neue Komponente (eben diese TMarqueenBar) erstellt werden, die ich dann einfach auf meine Oberfläche ziehen kann.

Allerdings stürtzt mir Delphi beim Kompilieren mit einer Zugriffsverletzung an Adresse (die hab ich jetzt nicht parat) ab.

Woran kann das liegen??

Falls es von Belang ist: ich nutze WindowsXP Pro SP2 und Delphi 7 Pro


@CoRe.eXtreem:
du hast ja auch nicht versucht sie als Komponente einzutragen, sondern versucht direkt aus dem Code eine neue ProgressBar abzuleiten, was ja auch funktionieren müsste... :D

MrKnogge 7. Aug 2005 16:25

Re: ProgressBar Status hin/her bewegen ???
 
MProgressBar sollte auch vom Typ TMarqueeProgressBar sein :wink:

CoRe.eXtreem 7. Aug 2005 16:32

Re: ProgressBar Status hin/her bewegen ???
 
Delphi-Quellcode:
procedure TForm1.FormShow(Sender: TObject);
var
  MProgressBar: TMarqueeProgressBar;
begin
  MProgressBar:=Unit2.TMarqueeProgressBar.Create(Self);
  with MProgressBar do
    begin
      Parent:=Form1;
      Name:='MProgressBar';
      Left:=100;
      Top:=100;
    end;
end;
Gut soweit funktioniert es schonmal.
Die ProgressBar ist erstellt und die 4 Balken zeigt es auch schon an.
Sie können sich aber noch nicht bewegen da Activat sich nicht ansteuern lässt.
@christian.noeding machst du nicht irgendetwas falsch. Man kann das doch nicht zu den Komponenten hinzufügen.

gruß, Core

///
Edit:

Es funktioniert!! THX

Delphi-Quellcode:
procedure TForm1.FormShow(Sender: TObject);
var
  MProgressBar: TMarqueeProgressBar;
begin
  MProgressBar:=Unit2.TMarqueeProgressBar.Create(Self);
  with MProgressBar do
    begin
      Parent:=Form1;
      Name:='MProgressBar';
      Left:=100;
      Top:=100;
      Active:=true;
    end;
end;

MrKnogge 7. Aug 2005 16:59

Re: ProgressBar Status hin/her bewegen ???
 
natürlich kann man das zu den komponenten hinzufügen, dafür ist es eigentlich gedacht.
(siehe procedure register)

gruss

CoRe.eXtreem 7. Aug 2005 21:20

Re: ProgressBar Status hin/her bewegen ???
 
Gut zu wissen habe mich sowieso schon gefragt wozu "procedure register" da ist.

Schönen Abend und noch mal besten Dank @MrKnogge,

CoRe.eXtreem

christian.noeding 8. Aug 2005 13:22

Re: ProgressBar Status hin/her bewegen ???
 
ömm, ja und wo liegt mein Fehler? DElphi kommt doch mit irgendwas aus der Source nicht klar? Hat denn einer von euch die Komponente richtig registrieren können?

Ich werde aber mal die Progressbar in meinem Sourcecode per Hand einfügen, dann läuft sie ja, aber sie aus der Komponentenleiste aufs Form zu ziehen ist einfacher *lach* :)

wäre schön, wenn mir jemand sagen könnte, was ich falsch mache; ist der Fehler vielleicht bei einem anderen noch aufgetreten?


bis denn,
Christian


Alle Zeitangaben in WEZ +1. Es ist jetzt 05:37 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