![]() |
Statusbar Farbe eines Panels ändern
Hi,
kann man die Farbe eines einzelnen Panels einer Statusbar ändern und wenn ja, wie denn? Gruß Gambit |
Re: Statusbar Farbe eines Panels ändern
Hai Gambit,
dafür musst Du das Panel selber zeichnen (OnDrawPanel). Das Panel welches Du zeichnen möchtest muss als Style psOwnerDraw haben.
Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
begin StatusBar1.Panels[1].Style := psOwnerDraw; // Panel 2 selber zeichnen end; procedure TForm1.StatusBar1DrawPanel(StatusBar: TStatusBar; Panel: TStatusPanel; const Rect: TRect); begin if Panel = StatusBar1.Panels[1] then // zweites Panel begin with StatusBar.Canvas do begin Brush.Color := clred; FillRect(Rect); // Mit der Farbe füllen TextOut(rect.Left + 2, rect.Top + 2, panel.Text); // Textausgeben end; end; end; |
Re: Statusbar Farbe eines Panels ändern
Hallo Gambit,
es geht nur über einen kleinen Umweg. Du musst bei der Statusbar das gewünschte Panel auswählen und die Eigenschaft Style auf psOwnerDraw stellen. Damit sagst du der Komponente, dass das ausgewählte Panel nicht automatisch gezeichnet wird. Nun muss in der Statusbar das Event OnDrawPanel definitert werden. Dieses Event wird immer dann aufgerufen, wenn die Statusbar ein Panel mit dem Style = psOwnerDraw zeichnen muss. Dort kann dann beliebiger Code stehen. z.B.:
Delphi-Quellcode:
Bei diesem Beispiel würde der Paneltext in einem hellen Grün erscheinen.
procedure TForm1.sbMainDrawPanel(StatusBar: TStatusBar;
Panel: TStatusPanel; const Rect: TRect); begin sbMain.Canvas.Brush.Color:=clLime; sbMain.Canvas.TextOut(Rect.Left, Rect.Top, Panel.Text); end; |
Re: Statusbar Farbe eines Panels ändern
Danke! Aber helft mir nochmal schnell auf die Sprünge, wie würde ich es dann zB. Aufrufen, wenn nach einem Click auf einen Button, das Panel rot wird wenn es vorher die Standardfarbe hatte? Mir ist nicht ganz klar, was ich für Rect angeben müßte...
|
Re: Statusbar Farbe eines Panels ändern
Delphi-Quellcode:
Bei dieser Methode bekommst du als Parameter das Rect mitgeliefert, sieht man ja oben ;)
procedure TForm1.sbMainDrawPanel(StatusBar: TStatusBar;
Panel: TStatusPanel; const Rect: TRect); begin sbMain.Canvas.Brush.Color:=clLime; sbMain.Canvas.TextOut(Rect.Left, Rect.Top, Panel.Text); end; Und wenn du es auf Buttonklick einfärben willst, dann musst du eben im OnClick des Buttons eine Variable ändern, und im OnDraw vom StatusPanel den Wert dieser Variablen prüfen und je nachdem eben die Farben setzen. |
Re: Statusbar Farbe eines Panels ändern
Ja gut aber ich meine, das Panel zeichnet sich ja nicht automatisch ständig neu. Im Moment mache ich es so, dass ich dann, wenn sich die Farbe des Panels ändern soll, die Methode DrawPanel wie folgt aufrufe:
Delphi-Quellcode:
in der Methode selbst setze ich je nach dem dann die Farbe.
MainFormStatusBarDrawPanel(MainFormStatusBar,MainFormStatusBar.Panels[1],MainFormStatusBar.BoundsRect);
|
Re: Statusbar Farbe eines Panels ändern
Hai Gambit,
hier noch ein Beispiel:
Delphi-Quellcode:
type
TForm1 = class(TForm) . private status : integer; end; . implementation . procedure TForm1.FormCreate(Sender: TObject); begin StatusBar1.Panels[1].Style := psOwnerDraw; // Panel 2 selber zeichnen status := 1; end; procedure TForm1.StatusBar1DrawPanel(StatusBar: TStatusBar; Panel: TStatusPanel; const Rect: TRect); const status_color : Array[1..3] of TColor = (clGreen,clYellow,clred); begin if Panel = StatusBar1.Panels[1] then // zweites Panel begin with StatusBar.Canvas do begin Brush.Color := status_color[status]; // Farbe aus dem Array FillRect(Rect); // Mit der Farbe füllen TextOut(rect.Left + 2, rect.Top + 2, panel.Text); // Textausgeben end; end; end; procedure TForm1.btn_IncStatusClick(Sender: TObject); begin if (status < 3) then begin Inc(Status); end; StatusBar1.Repaint; end; procedure TForm1.btn_DecStatusClick(Sender: TObject); begin if (status > 1) then begin Dec(Status); end; StatusBar1.Repaint; end; |
Re: Statusbar Farbe eines Panels ändern
Genau das meinte ich, Danke!
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:44 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