Rubrik: Controls · StatusBar/ProgressBar | VB-Versionen: VB6 | 16.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 Wutzke | Bewertung: | Views: 16.941 |
www.vb-power.net | System: 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.