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:
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. Dieser Tipp wurde bereits 16.651 mal aufgerufen. Voriger Tipp | Zufälliger Tipp | Nächster Tipp
Anzeige
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. |
TOP! Unser Nr. 1 Neu! sevDataGrid 3.0 Mehrspaltige Listen, mit oder ohne DB-Anbindung. Autom. Sortierung, Editieren von Spalteninhalten oder das interaktive Hinzufügen von Datenzeilen sind ebenso möglich wie das Erstellen eines Web-Reports. Tipp des Monats April 2024 Skyfloy Chart von Microsoft und dazu noch gratis Tutorial für Microsoft Chart Controls für Microsoft .NET Framework 3.5 Access-Tools Vol.1 Über 400 MByte Inhalt Mehr als 250 Access-Beispiele, 25 Add-Ins und ActiveX-Komponenten, 16 VB-Projekt inkl. Source, mehr als 320 Tipps & Tricks für Access und VB |
||||||||||||||||
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. |