vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
Erstellen von dynamischen Kontextmen?s - wann immer Sie sie brauchen!  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2024
 
zurück
Rubrik:    |   VB-Versionen: VB4, VB5, VB605.04.07
Form als PopUp-SideBar verwenden

Mit diesem Code verwandeln Sie Ihre Anwendung in eine PopUp-Sidebar, die bspw. am rechten Rand des Windows-Desktop ausgerichtet erscheint.

Autor:  Dieter OtterBewertung:     [ Jetzt bewerten ]Views:  1.630 
http://www.tools4vb.de/System:  Win9x, WinNT, Win2k, WinXP, Win7, Win8, Win10, Win11 Beispielprojekt 

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:

  • BorderStyle = 0 - Kein
  • Caption = ""

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