Mit unserem heutigen Extra-Tipp verwandeln Sie Ihre Anwendung in eine PopUp-Sidebar, die bspw. am rechten Rand des Windows-Desktop ausgerichtet erscheint. Was genau bedeutet das und wie funktioniert die SideBar? Beim Starten der Anwendung wird die Form in unserem Beispiel in der minimalen Größe (25 Pixel) am rechten Desktop ausgerichtet angezeigt. Sobald der Anwender die Maus auf die Form (Sidebar) bewegt, klappt diese nach links auf und die einzelnen Informationen und/oder Befehle werden sichtbar. Wird der Mauszeiger aus der Sidebar heraus bewegt, wird die Form wieder verkleinert. Die Steuerung der Mausaktion bzw. die Abfrage der aktuellen Mausposition erfolgt mit Hilfe der Windows-API und einem Timer. Erstellen Sie ein neues Projekt und platzieren auf die Form einen CommandButton (cmdExit) und ein Timer-Control (Timer1). Die minimale bzw. maximale Breite der Sidebar (Form) wird über die beiden Konstanten "MinWidth" und "MaxWidth" festgelegt. Die Größenangabe erfolgt hierbei in Pixel! Eigenschaften der Form:
Fügen Sie nachfolgenden Code in den Codeteil der Form ein: Option Explicit ' Minimale und maximale Größe der Form ' Achtung! Angaben in Pixel! Const MinWidth = 25 Const MaxWidth = 100 ' Status der Sidebar Dim bMinimized As Boolean ' Größe des verfügbaren Bildschirmbereichs Dim rDesktop As RECT ' benötigte API-Deklarationen Private Declare Function SystemParametersInfo Lib "user32" _ Alias "SystemParametersInfoA" ( _ ByVal uAction As Long, _ ByVal uParam As Long, _ ByRef lpvParam As Any, _ ByVal fuWinIni As Long) As Long Private Type RECT Left As Long Top As Long Right As Long Bottom As Long End Type Private Const SPI_GETWORKAREA = 48 Private Type POINTAPI X As Long Y As Long End Type Private Declare Function ScreenToClient Lib "user32" ( _ ByVal hwnd As Long, _ lpPoint As POINTAPI) As Long Private Declare Function GetCursorPos Lib "user32" ( _ lpPoint As POINTAPI) As Long Private Sub Form_Load() ' verfügbarer Bildschirmbereich SystemParametersInfo SPI_GETWORKAREA, 0, rDesktop, 0 ' Button beschriften und positionieren With cmdExit .Caption = "Schließen" .Move 60, 60, MaxWidth * Screen.TwipsPerPixelX - 120, 330 End With ' Minimalgröße der Form Sidebar_Hide bMinimized = True ' Timer initialisieren Timer1.Interval = 50 Timer1.Enabled = True End Sub Public Sub Sidebar_Hide() ' Form verkleinern, so dass nur die Minimalgröße ' unserer Sidebar sichtbar ist cmdExit.Visible = False bMinimized = True Me.Width = MinWidth * Screen.TwipsPerPixelX ' Form am rechten Desktop-Rand ausrichten Sidebar_Resize End Sub Public Sub Sidebar_Show() ' Form vergrößern, so dass alle Elemente der ' Sidebar sichtbar sind bMinimized = False Me.Width = MaxWidth * Screen.TwipsPerPixelX ' Form am rechten Desktop-Rand ausrichten Sidebar_Resize cmeExit.Visible = True End Sub Private Sub Sidebar_Resize() ' Sidebar am rechten Desktop-Rand ausrichten With rDesktop Me.Move .Right * Screen.TwipsPerPixelX - Me.Width, _ .Top * Screen.TwipsPerPixelY, Me.Width, _ (.Bottom - .Top) * Screen.TwipsPerPixelY End With End Sub Private Sub cmdExit_Click() ' Beenden Unload Me End Sub ' Mausposition prüfen Private Sub Timer1_Timer() Dim pt As POINTAPI ' aktuelle Mausposition GetCursorPos pt ' Mausposition auf aktuelle Form umrechnen ScreenToClient Me.hwnd, pt With pt ' Prüfen, ob sich Mauszeiger außerhalb der Form befindet If .X < 0 Or .Y < 0 Or _ .X > Me.ScaleWidth / Screen.TwipsPerPixelX Or _ .Y > Me.ScaleHeight / Screen.TwipsPerPixelY Then ' Maus befindet sich außerhalb unserer Form ' Sidebar schließen If Not bMinimized Then Sidebar_Hide Else ' Maus befindet sich innerhalb unserer Form ' Sidebar anzeigen If bMinimized Then Sidebar_Show End If End With End Sub Private Sub Form_Unload(Cancel As Integer) ' Timer deaktivieren Timer1.Enabled = False End Sub |