Announcement

Collapse
No announcement yet.

Statusbar, Panel andere Farbe

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Statusbar, Panel andere Farbe

    Ich habe in meinem Programm buttom angegeordnet ein Objekt TStatusbar und hierin mehrere Panels zur Anzeige aktueller Parameter.
    Ein Textfeld würde ich gerne mit verschiedener Vorder- Hintergrundfarbe anzeigen. zB roter Hintergrund:
    with Form1.Statusbar1 do begin
    color:=clred;
    Font.Color:=clWindow;
    Font.Style:= [fsbold];
    Panels[0].Text:=Fehlertext;
    end;
    Diese Befehlsfolge bewirkt aber, dass alle! Felder mit rotem Hintergrund erscheinen. Beim einzelnen Panel-Objekt finde ich keinen Parameter "Color".
    Oder doch?

  • #2
    Nein, die Standard-Statusbar kann das nicht. Aber es gibt da eine Freeware, die kann das - siehe hier.

    bye,
    Helmut

    Comment


    • #3
      Hallo Helmut,
      habe ich probiert (war nicht einfach, da zuvor eine Komponente SBPro installiert werden musste). War zunächt ganz happy. Habe diese Mehrfach-Statusbar allerdings wieder aus dem Programm entfernt. Grund: in einem Textfeld zeigte ich Zeile und Spalte an, d.h. bei jedem tastendruck Aktualisierung. Aus mir nicht erklärbarem Grund wurde immer wieder mal in diesem Feld in blauer Farbe (die ich nirgends verwende) ein Text aus dem Pulldown-Menü/Datei angezeigt. Da es bei meiner Aufgabe immer um Fehler- oderBedienhinweise ging, habe ich für die kurzzeitige Anzeige auf SinglePanel umgestellt. Aber danke für den Hinweis. hRb

      Comment


      • #4
        Hallo,

        das habe ich in meinem Program so gelöst:

        procedure TForm.StBar1DrawPanel(StatusBar: TStatusBar; Panel: TStatusPanel;
        const Rect: TRect);
        var x: Integer;
        begin //
        StatusBar.Canvas.Font.Style:=[fsBold];
        if True then begin
        StatusBar.Canvas.Brush.Color:=clSkyBlue;
        StBar1.Panels[3].Text:=MeldeText(3);
        end else begin
        StatusBar.Canvas.Brush.Color:=clred;
        StBar1.Panels[3].Text:=MeldeText(2);
        end;

        StatusBar.Canvas.FillRect(Rect);
        x:=(Rect.Width-StatusBar.Canvas.TextWidth(StBar1.Panels[3].Text)) div 2;
        StatusBar.Canvas.TextOut(Rect.Left+x,Rect.Top+1,pa nel.Text);
        end;

        Das Panel musst Du OwnerDraw auf True setzen.
        Vielleicht hilft das Dir.

        Gruss Gerhard

        Comment


        • #5
          Schön, die Antwort auf einen 4 Jahre alten Beitrag. Warum erst jetzt?
          Christian

          Comment


          • #6
            Hallo Christian,

            hab ich ja erst heute gelesen... als ich mein neues Problem hier gepostet habe...
            Vielleicht kann den Code ja auch jemand anders gebrauchen...

            Gruss Gerhard

            Comment

            Working...
            X