Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi TStatusBar mit 'OwnerDraw'-Panel periodisch neu zeichnen (https://www.delphipraxis.net/186842-tstatusbar-mit-ownerdraw-panel-periodisch-neu-zeichnen.html)

marfin777 6. Okt 2015 10:05

Delphi-Version: XE8

TStatusBar mit 'OwnerDraw'-Panel periodisch neu zeichnen
 
Hallo Freunde,

Hintergrund
Mir geht es um eine Rückmeldung, ob eine Datenbankverbindung besteht.
Diese Überprüfung wird auch periodisch über ein Timer-Ereignis alle 3s angestoßen.
Über den Bool'schen Wert "DbConnectIsOk" sehe ich den aktuellen Verbindungsstatus.

Form/StatusBar
In meiner Main-Form habe ich eine StatusBar dessen 2.Panel den Style "psOwnerDraw" hat,
damit ich anhand dieser Anleitung http://delphi.about.com/od/vclusing/...sbar_owner.htm
das Panel zeichne.

Delphi-Quellcode:
Procedure TfrmMainWindow.Stat_MainDrawPanel(StatusBar : TStatusBar; Panel : TStatusPanel;
  Const Rect : TRect);
Begin
  If Panel = StatusBar.Panels[1] Then // zweites Panel
  Begin
    With StatusBar.Canvas Do
    Begin
      If DbConnectIsOk Then //DbConnectIsOk ist eine globale Variable die den Verbindungsstatus anzeigt
      Begin
        Brush.Color := ClLime;
        Font.Color := ClTeal;
        Font.Style := [FsItalic];
        Panel.Text := 'Verbunden';
      End
      Else
      Begin
        Brush.Color := Clred;
        Font.Color := ClNavy;
        Font.Style := [FsBold];
        Panel.Text := 'Getrennt';
      End;
      FillRect(Rect); // Hintergrund mit der Farbe füllen
      TextRect(Rect, 2 + Il_StatusBar.Width + Rect.Left, Rect.Top, Panel.Text); // Textausgeben (Il_STatusBar ist die ImageList mit dem Icon)
    End;
    Il_StatusBar.Draw(Stat_Main.Canvas, Rect.Left, Rect.Top, 0); // Icon einfügen //Stat_Main ist die StatusBar
  End;
End;
Problem
Jetzt würde ich allerdings auch gerne das Panel neu zeichnen lassen,
da dieses eine mögliche Veränderung von "DbConnectIsOk" lediglich bei einem Neuzeichnen der gesamten Maske (Resize/Show/...) mitbekommt.

Entweder müsste ich TfrmMainWindow.Stat_MainDrawPanel jedesmal über das TimerEvent aufrufen (da wüsste ich nicht genau wie)
oder es gibt noch eine andere Lösung, mit der ich im TimerEvent das Panel direkt neu zeichnen kann.

Hat jemand einen guten Rat für mich?

baumina 6. Okt 2015 10:20

AW: TStatusBar mit 'OwnerDraw'-Panel periodisch neu zeichnen
 
Fürs Neuzeichnen kannst du StatusBar.Invalidate, StatusBar.Refresh, StatusBar.Update oder StatusBar.Repaint verwenden. Näheres Dazu in der Hilfe.

marfin777 6. Okt 2015 11:12

AW: TStatusBar mit 'OwnerDraw'-Panel periodisch neu zeichnen
 
Wunderbar!

Ich hatte nicht daran gedacht, nach einer passenden Methode der StatusBar zu suchen.

Vielen Dank.


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:12 Uhr.

Powered by vBulletin® Copyright ©2000 - 2022, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2021 by Daniel R. Wolf