AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi TStatusBar mit 'OwnerDraw'-Panel periodisch neu zeichnen

TStatusBar mit 'OwnerDraw'-Panel periodisch neu zeichnen

Ein Thema von marfin777 · begonnen am 6. Okt 2015 · letzter Beitrag vom 6. Okt 2015
Antwort Antwort
marfin777

Registriert seit: 23. Jul 2015
5 Beiträge
 
Delphi XE8 Professional
 
#1

TStatusBar mit 'OwnerDraw'-Panel periodisch neu zeichnen

  Alt 6. Okt 2015, 11:05
Delphi-Version: XE8
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?
Markus
  Mit Zitat antworten Zitat
Benutzerbild von baumina
baumina

Registriert seit: 5. Mai 2008
Ort: Oberschwaben
1.275 Beiträge
 
Delphi 10.2 Tokyo Enterprise
 
#2

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

  Alt 6. Okt 2015, 11:20
Fürs Neuzeichnen kannst du StatusBar.Invalidate, StatusBar.Refresh, StatusBar.Update oder StatusBar.Repaint verwenden. Näheres Dazu in der Hilfe.
Hinter dir gehts abwärts und vor dir steil bergauf ! (Wolfgang Ambros)
  Mit Zitat antworten Zitat
marfin777

Registriert seit: 23. Jul 2015
5 Beiträge
 
Delphi XE8 Professional
 
#3

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

  Alt 6. Okt 2015, 12:12
Wunderbar!

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

Vielen Dank.
Markus
  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 16:09 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