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?