AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Statusbar Farbe eines Panels ändern

Ein Thema von Gambit · begonnen am 19. Sep 2005 · letzter Beitrag vom 19. Sep 2005
Antwort Antwort
Gambit

Registriert seit: 28. Mai 2003
680 Beiträge
 
Delphi 7 Professional
 
#1

Statusbar Farbe eines Panels ändern

  Alt 19. Sep 2005, 15:00
Hi,

kann man die Farbe eines einzelnen Panels einer Statusbar ändern und wenn ja, wie denn?

Gruß

Gambit
  Mit Zitat antworten Zitat
Benutzerbild von Sharky
Sharky

Registriert seit: 29. Mai 2002
Ort: Frankfurt
8.251 Beiträge
 
Delphi 2006 Professional
 
#2

Re: Statusbar Farbe eines Panels ändern

  Alt 19. Sep 2005, 15:24
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;
Stephan B.
"Lasst den Gänsen ihre Füßchen"
  Mit Zitat antworten Zitat
pszopp

Registriert seit: 7. Sep 2005
Ort: Alsdorf
95 Beiträge
 
Delphi 2010 Professional
 
#3

Re: Statusbar Farbe eines Panels ändern

  Alt 19. Sep 2005, 15:31
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:
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;
Bei diesem Beispiel würde der Paneltext in einem hellen Grün erscheinen.
  Mit Zitat antworten Zitat
Gambit

Registriert seit: 28. Mai 2003
680 Beiträge
 
Delphi 7 Professional
 
#4

Re: Statusbar Farbe eines Panels ändern

  Alt 19. Sep 2005, 17:06
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...
  Mit Zitat antworten Zitat
Benutzerbild von Ultimator
Ultimator

Registriert seit: 17. Feb 2004
Ort: Coburg
1.860 Beiträge
 
FreePascal / Lazarus
 
#5

Re: Statusbar Farbe eines Panels ändern

  Alt 19. Sep 2005, 18:03
Delphi-Quellcode:
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;
Bei dieser Methode bekommst du als Parameter das Rect mitgeliefert, sieht man ja oben

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.
Julian J. Pracht
  Mit Zitat antworten Zitat
Gambit

Registriert seit: 28. Mai 2003
680 Beiträge
 
Delphi 7 Professional
 
#6

Re: Statusbar Farbe eines Panels ändern

  Alt 19. Sep 2005, 18:13
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:

MainFormStatusBarDrawPanel(MainFormStatusBar,MainFormStatusBar.Panels[1],MainFormStatusBar.BoundsRect); in der Methode selbst setze ich je nach dem dann die Farbe.
  Mit Zitat antworten Zitat
Benutzerbild von Sharky
Sharky

Registriert seit: 29. Mai 2002
Ort: Frankfurt
8.251 Beiträge
 
Delphi 2006 Professional
 
#7

Re: Statusbar Farbe eines Panels ändern

  Alt 19. Sep 2005, 18:20
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;
Stephan B.
"Lasst den Gänsen ihre Füßchen"
  Mit Zitat antworten Zitat
Gambit

Registriert seit: 28. Mai 2003
680 Beiträge
 
Delphi 7 Professional
 
#8

Re: Statusbar Farbe eines Panels ändern

  Alt 19. Sep 2005, 18:27
Genau das meinte ich, Danke!
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:16 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz