vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#

https://www.vbarchiv.net
Rubrik: Controls · StatusBar/ProgressBar   |   VB-Versionen: VB616.02.04
Buttons für die StatusBar (Klasse)

Nutzen Sie die StatusBar nicht nur zur Anzeige von Informationen. Auch Buttons können darin Platz finden, mit denen man bestimmte Programmfunktionen ausführen kann.

Autor:   Roland WutzkeBewertung:  Views:  16.636 
www.vb-power.netSystem:  Win9x, WinNT, Win2k, WinXP, Win7, Win8, Win10, Win11 Beispielprojekt auf CD 

In der Regel wird die StatusBar dazu verwendet, um dem Anwender Informationen über das Programm mitzuteilen. Das heißt, die StatusBar ist ein passives Objekt.

Heute möchten wir Ihnen zeigen, wie Sie aus der StatusBar ein aktives Objekt machen können. Wir verpassen der StatusBar die Möglichkeit, Buttons zu nutzen. Dazu brauchen wir nicht einmal in die API Trickkiste zu greifen. Wir nutzen einfach die vorhandenen Eigenschaften der StatusBar. Alles was wir dazu benötigen, ist eine Klasse um ein Ereignis auslösen zu können, wenn der Anwender auf einen dieser Buttons mit der Mouse klickt.

Die Klasse cNewStatusBar:

  • Eigenschaft SBarCmd: Erwartet ein Array, welches die Nummern der Panels beinhaltet, die als Buttons genutzt werden sollen.
     
  • Methode Init: Übergeben wird die StatusBar aus der aufrufenden Form. Die Klasse wird dabei initialisiert.
     
  • Ereignis cmdClick: Das Ereignis wird ausgelöst, wenn auf einem Button aus der Aufzählung geklickt wird. Dabei wird das Panel zurückgegeben.

Wie wird die Klasse genutzt. Legen Sie in einem neuen Projekt ein leeres Klassenmodul an und benennen Sie es "cNewStatusBar". Fügen Sie den nachfolgenden Code in das Klassenmodul ein:

' **********************************************************************
' *
' *   cNewStatusBar Klasse - Button für die StatusBar
' *
' *   Die Klasse erzeugt und verwaltet Buttons für eine
' *   Statusbar. An die Eigenschaft "SBarCmd" wird ein
' *   Array übergeben, welches die Nummern der Panels
' *   für die Buttons beinhaltet.
' *   Die Methode "Init" erzeugt die Buttons aus dem
' *   Array. Dabei wird die Statusbar aus der aufrufenden
' *   Form übergeben. Das Ereignis "cmdClick" wird
' *   ausgelöst, wenn der Anwender auf einen Button mit
' *   der Mouse geklickt hat.
' *
' *   Februar 2002, www.vb-power.net und R. Wutzke
' *
' **********************************************************************
 
Option Explicit
 
' Eine StatusBar für die Klasse...
Private WithEvents cmdStatusBar As MSComctlLib.StatusBar
 
' Private KlassenVar
Private oPanel As MSComctlLib.Panel
 
' KlassenEreignisse
Public Event cmdClick(ByVal Panel As MSComctlLib.Panel)
 
' KlassenEigenschaften
Public SBarCmd As Variant
Public Sub Init(ByVal oSBar As MSComctlLib.StatusBar)
  Dim X As Long
 
  ' StatusBar aus der Form der Klasse zuweisen
  If cmdStatusBar Is Nothing Then _
    Set cmdStatusBar = oSBar
 
  ' Panels einstellen, so dass sie wie ein
  ' Button wirken. Dabei wird die Ansicht
  ' der übergebenen Panels angehoben (Raised)
  If IsArray(SBarCmd) Then
    For X = LBound(SBarCmd) To UBound(SBarCmd)
      cmdStatusBar.Panels(SBarCmd(X)).Bevel = sbrRaised
    Next X
  End If
End Sub
Private Sub cmdStatusBar_PanelClick(ByVal Panel As MSComctlLib.Panel)
  Dim X As Long
 
  ' Es wurde auf ein Panel geklickt. Ermitteln, ob
  ' das Panel in der Aufzählung ist.
  For X = LBound(SBarCmd) To UBound(SBarCmd)
    If SBarCmd(X) = Panel.Index Then
      ' Das Panel ist in der Aufzählung...
      ' Jetzt an die lokale KlassenVar übergeben.
      Set oPanel = Panel
      ' Das Panel als gedrückt darstellen.
      oPanel.Bevel = sbrInset
      Exit Sub
    End If
  Next X
End Sub
Private Sub cmdStatusBar_MouseUp(Button As Integer, Shift As Integer, _
  X As Single, Y As Single)
 
  ' Prüfen, ob die lokale KlassenVar gültig ist.
  If Not oPanel Is Nothing Then
    ' Das gedrückte Panel wieder anheben.
    oPanel.Bevel = sbrRaised
    ' Das KlassenEreignis auslösen. Dabei wird
    ' das gedrückte Panel übergeben.
    RaiseEvent cmdClick(ByVal oPanel)
    ' Jetzt die KlassenVar wieder löschen.
    Set oPanel = Nothing
  End If
End Sub
Private Sub Class_Terminate()
  ' StatusBar der Klasse terminieren
  Set cmdStatusBar = Nothing
End Sub

Nachfolgend finden Sie ein Beispiel, wie Sie die Klasse nutzen können.

Platzieren Sie dazu eine StatusBar (StatusBar1) auf die Form. Nehmen Sie keine Einstellungen an der StatusBar vor, dass wird aus dem Code des Demoprogramms für Sie erledigt.

Fügen Sie den folgenden Code in das Codefenster der Form ein:

Option Explicit
 
' Klasse mit Ereignisse
Private WithEvents DemoBar As cNewStatusBar
Private Sub Form_Load()
  Dim cmdArray As Variant
 
  ' Die Statusbar der Form vorbesetzen.
  GenerateDemoBar
 
  ' Die Klasse instanzieren
  Set DemoBar = New cNewStatusBar
 
  ' Array mit den Panelnummern 1 und 3
  cmdArray = Array(1, 3)
 
  With DemoBar
    ' Array an die Klasse übergeben
    .SBarCmd = cmdArray
 
    ' Die Statusbar der Form der Klasse zuweisen
    .Init Me.StatusBar1
  End With
End Sub
' Hilfsfunktion für diese Demo um die StatusBar1 aus
' der Form zu setzen.
Private Sub GenerateDemoBar()
  With StatusBar1.Panels
    .Add 1, "P1", "Neuer Datensatz", 0
    .Add 2, "S1", "", 0
    .Add 3, "P2", "Datensatz löschen", 0
    .Add 4, "S2", "", 0
    .Item(5).Text = "Anzahl Datensätze: xxx "
 
    .Item("P1").Width = 1800
    .Item("S1").Width = 30
    .Item("P2").Width = 1800
    .Item("S2").Width = 30
    .Item(5).AutoSize = sbrSpring
 
    .Item("S1").Bevel = sbrNoBevel
    .Item("S2").Bevel = sbrNoBevel
 
    .Item("P1").Alignment = sbrCenter
    .Item("P2").Alignment = sbrCenter
  End With
End Sub
' Ereignis der Klasse. Wird ausgelöst, wenn auf ein Button
' geklickt wird. Zurückgegeben wird dabei das Panel, auf
' dem der Anwender geklickt hat.
Private Sub DemoBar_cmdClick(ByVal Panel As MSComctlLib.Panel)
 
  ' Hier die Buttons auswerten...
  Select Case Panel.Key
    Case "P1": MsgBox Panel & " wurde gedrückt"
    Case "P2": MsgBox Panel & " wurde gedrückt"
  End Select
End Sub

So, das war´s... Viel Spaß damit.
 



Anzeige

Kauftipp Unser Dauerbrenner!Diesen und auch alle anderen Tipps & Tricks finden Sie auch auf unserer aktuellen vb@rchiv  Vol.6
(einschl. Beispielprojekt!)

Ein absolutes Muss - Geballtes Wissen aus mehr als 8 Jahren vb@rchiv!
- nahezu alle Tipps & Tricks und Workshops mit Beispielprojekten
- Symbol-Galerie mit mehr als 3.200 Icons im modernen Look
Weitere Infos - 4 Entwickler-Vollversionen (u.a. sevFTP für .NET), Online-Update-Funktion u.v.m.
 
 
Copyright ©2000-2024 vb@rchiv Dieter OtterAlle Rechte vorbehalten.


Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.