Entwickler-Ecke

Grafische Benutzeroberflächen (VCL & FireMonkey) - TProgressBar in Panel von TStatusBar


Chris1308 - So 23.06.02 19:16
Titel: TProgressBar in Panel von TStatusBar
Hi @all!
Wie kann ich eine Progressbar in ein Panel (z.B. in Panels[1]) einer Statusbar einbinden? Ich weiß, dass das geht, aber wie?
Ich hab' das irgendwo schonmal gelesen.

Chris1308


Klabautermann - So 23.06.02 22:12

Hallo,

wenn du es zur Designzeit mit der Maus können willst, dann leite dir eine Komponente von tStatusbar ab und überschreibe den Constructor folgendermaßen:


Quelltext
1:
2:
3:
4:
5:
constructor tObjectStatusBar.Create(AOwner: tComponent);
begin
  inherited;
  ControlStyle := ControlStyle + [csAcceptsControls];
end; // Construktor


Auf deinem neu geschafenen Statusbar kannst du nun jede Komponente ablegen und frei positionieren.

Bei der Alternative muss ich mutmaßen. Ich Tippe aber drauf das es möglich ist die Parent Eigenschaft des Prograsbar auf das Panel zu setzen.

Gruß
Klabautermann


mathias - So 23.06.02 22:37


Quelltext
1:
2:
3:
4:
procedure TForm1.FormCreate(Sender: TObject);
begin
  Progressbar1.Parent := StatusBar1;
end;
Währe auch noch eine Methode für die Progressbar in der StatusBar; :)


Klabautermann - So 23.06.02 23:03

Dann hatte ich ja recht mit meiner Mutmaßung ;).

Naja, das mit der Komponente habe ich halt im einsatz.


Chris1308 - Mo 24.06.02 14:59

Thx!
Ich versuche das heute mal so:

Quelltext
1:
2:
3:
4:
procedure TForm1.Create (Seder: TObject);
begin
  ProgressBar1.Parent := StatusBar1.Panels[1];
end;

Weiß aber noch nicht ob das funzt...

Chris1308


Torsten - Mo 24.06.02 15:43

Wird es nicht.

;)


Chris1308 - Mo 24.06.02 17:04

@ Klabautermann:
Kann ich dann bei der Kompo es so machen, dass die ProgressBar in einem Panel erscheint?

Chris1308


Chris1308 - Mo 24.06.02 17:11

Das mit der Kompo funzt irgendwie nicht. Habe das geschrieben, wie du gesagt hast, aber das funktioniert trotzdem nicht...

Chris1308


Klabautermann - Mo 24.06.02 17:18

Hallo,

hier einmal der komplette (wahnsinig aufwendige :lol:) Source der Komponente die ich einsetze:


Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
unit oObjectStatusBar;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  ComCtrls;

type
  toObjectStatusBar = class(TStatusBar)
  private
    { Private-Deklarationen }
  protected
    { Protected-Deklarationen }
  public
    constructor Create(AOwner : tComponent); override;
  published
    { Published-Deklarationen }
  end;

implementation


{ toObjectStatusBar }

constructor toObjectStatusBar.Create(AOwner: tComponent);
begin
  inherited;
  ControlStyle := ControlStyle + [csAcceptsControls];
end; // Construktor

end.


Mit dieser Variante erscheinen die Komponenten tatsächlich nicht auf den Pannels sondern völlig frei plazierbar. Wenn du eine mischung aus meiner und mathias lösung haben willst wird das ganze glaube ich ziemlich aufwendig.

Gruß
Klabautermann


Chris1308 - Mo 24.06.02 17:29

Und wie kann ich die jetzt nutzen? Du hast nämlich irgendwie keine RegisterComponent drin...

Chris1308


Klabautermann - Mo 24.06.02 17:31

Stimmt, das musst du noch einfügen. Ich mache das an einer zentralen Stelle in dem Package.
Aber da du bemerkt hast das es fehlt wirst du es sicher hinkriegen ;).

Gruß
Klabautermann


Chris1308 - Mo 24.06.02 17:42

THX, THX, DANKE, DANKE, DANKE!!!

Vielen Danke, Klabautermann!!! :wink:
Jetzt funzts!!! :lol: :lol: :lol: :D :D :D

Chris1308