Eine Form - ein paar API-Funktionen - und schon lässt sich eine eigene Application-Bar (ähnlich der Windows-Taskbar) erstellen. Die AppBar kann hierbei oben, unten, links oder rechts ausgerichtet werden. Der für die AppBar benötigte Bildschirmbereich wird hierbei automatisch von den gestarteten Anwendungen berücksichtigt, so dass die AppBar niemals durch eine offene Anwendung verdeckt werden kann! Wie lässt sich das nun realisieren? Vorbereitung:
Und hier der Code für das Modul "basAppBar.bas" Option Explicit ' API Deklarationen Private Declare Function SHAppBarMessage Lib "shell32.dll" ( _ ByVal dwMessage As Long, _ pData As APPBARDATA) As Long Private Declare Function SetWindowPos Lib "user32" ( _ ByVal hWnd As Long, _ ByVal hwndInsertAfter As Long, _ ByVal X As Long, _ ByVal Y As Long, _ ByVal cx As Long, _ ByVal cy As Long, _ ByVal wFlags As Long) As Long ' Types für die API Private Type RECT Left As Long Top As Long Right As Long Bottom As Long End Type Private Type APPBARDATA cbSize As Long hWnd As Long uCallbackMessage As Long uEdge As Long rc As RECT lParam As Long End Type ' Konstanten für die API Private Const HWND_TOPMOST = -1 Private Const SWP_NOSIZE = &H1 Private Const SWP_NOMOVE = &H2 Private Const SWP_SHOWWINDOW = &H40 Private Const ABM_NEW = &H0 Private Const ABM_REMOVE = &H1 Private Const ABM_SETPOS = &H3 Private Const ABM_GETTASKBARPOS = &H5 Public Const ABE_LEFT = &H0 Public Const ABE_TOP = &H1 Public Const ABE_RIGHT = &H2 Public Const ABE_BOTTOM = &H3 ' Enum der Docking Positionen Public Enum AppBarPos BarLeft = 0 BarTop = 1 BarRight = 2 BarBottom = 3 End Enum ' Anwendungsvariablen Public frmAppForm As Form Public bDocked As Boolean Private lBorder As Long ' AppBar Informationen Private APD As APPBARDATA Public lDockMode As Long Public lXTwips As Long Public lYTwips As Long ' Application-Bar erstellen und ausrichten Public Sub LoadAppBar(AppForm As Form, _ Position As AppBarPos) Dim WTBPos As APPBARDATA Dim lTop, lBottom As Long Dim lLeft, lRight As Long Dim lWidth, lHeight As Long ' minimale Höhe oder Breite der Bar in Pixel Dim lMinSize As Long lDockMode = Position Set frmAppForm = AppForm bDocked = True ' Neue AppBar anlegen Call SHAppBarMessage(ABM_NEW, APD) ' Je nach Position die Variablen füllen Select Case lDockMode Case ABE_LEFT lMinSize = frmAppForm.fraBack.Width / lYTwips lLeft = 0 lTop = 0 lRight = lMinSize + lBorder lBottom = Screen.Height lWidth = lMinSize * lXTwips lHeight = Screen.Height Case ABE_TOP lMinSize = frmAppForm.fraBack.Height / lXTwips lLeft = 0 lTop = 0 lRight = Screen.Width / lXTwips lBottom = lMinSize + lBorder lWidth = Screen.Width lHeight = lMinSize * lYTwips Case ABE_RIGHT lMinSize = frmAppForm.fraBack.Width / lYTwips lLeft = Screen.Width / lXTwips - lMinSize - lBorder lTop = 0 lRight = Screen.Width / lXTwips lBottom = lMinSize + lBorder lWidth = lMinSize * lXTwips lHeight = Screen.Height Case ABE_BOTTOM lMinSize = frmAppForm.fraBack.Height / lXTwips lLeft = 0 lTop = Screen.Height / lXTwips - lMinSize - lBorder lRight = Screen.Width / lXTwips lBottom = Screen.Height / lXTwips lWidth = Screen.Width lHeight = (lBottom - lTop) * lYTwips End Select ' -------------------------------------------------- ' Nun noch die Windows Taskbar berücksichtigen Call SHAppBarMessage(ABM_GETTASKBARPOS, WTBPos) With WTBPos ' ------------------------------------------------ ' Taskbar unten If .uEdge = ABE_BOTTOM And lDockMode = ABE_BOTTOM Then lTop = .rc.Top - lMinSize - lBorder lBottom = .rc.Bottom ElseIf .uEdge = ABE_BOTTOM And _ (lDockMode = ABE_LEFT Or lDockMode = ABE_RIGHT) Then lHeight = .rc.Top * lYTwips ' ------------------------------------------------ ' Taskbar oben ElseIf .uEdge = ABE_TOP And lDockMode = ABE_TOP Then lTop = .rc.Bottom lBottom = lTop + lMinSize ElseIf .uEdge = ABE_TOP And _ (lDockMode = ABE_LEFT Or lDockMode = ABE_RIGHT) Then lTop = .rc.Bottom lHeight = Screen.Height - .rc.Bottom * lYTwips ' ------------------------------------------------ ' Taskbar links ElseIf .uEdge = ABE_LEFT And lDockMode = ABE_LEFT Then lLeft = .rc.Right ElseIf .uEdge = ABE_LEFT And _ (lDockMode = ABE_TOP Or lDockMode = ABE_BOTTOM) Then lLeft = .rc.Right lWidth = Screen.Width - .rc.Right * lYTwips ' ------------------------------------------------ ' Taskbar rechts ElseIf .uEdge = ABE_RIGHT And lDockMode = ABE_RIGHT Then lLeft = .rc.Left - lMinSize ElseIf .uEdge = ABE_RIGHT And _ (lDockMode = ABE_TOP Or lDockMode = ABE_BOTTOM) Then lWidth = .rc.Left * lYTwips End If End With ' AppData Objekt für die ApplicationBar füllen With APD .uEdge = lDockMode .rc.Top = lTop .rc.Left = lLeft .rc.Right = lRight .rc.Bottom = lBottom End With ' AppBar mit den neuen Werten füllen Call SHAppBarMessage(ABM_SETPOS, APD) ' Nun das Form an die Position der AppBar bringen DoEvents With frmAppForm .Show Call SetWindowPos(.hWnd, HWND_TOPMOST, 0, 0, 0, 0, _ SWP_SHOWWINDOW) .Top = lTop * lXTwips .Left = lLeft * lYTwips .Width = lWidth .Height = lHeight End With End Sub ' ApplicationBar entfernen Public Sub UnloadAppBar() If bDocked Then Call SHAppBarMessage(ABM_REMOVE, APD) bDocked = False End Sub Und hier die Start-Prozedur ' START-Prozedur: ' Hier wird die Form "frmAppBar" geladen und angezeigt. ' Über den zweiten Parameter der "LoadAppBar" - Prozedur ' legen Sie fest, wie die AppBar ausgerichtet werden ' soll: ' ' BerLeft: am linken Bildschirmrand anzeigen ' BarRight: am rechten Bildschirmrand anzeigen ' BarTop: am oberen Bildschirmrand anzeigen ' BarBottom: am unteren Bildschirmrand anzeigen Sub Main() lXTwips = Screen.TwipsPerPixelX lYTwips = Screen.TwipsPerPixelY lBorder = 0 LoadAppBar frmAppBar, BarTop End Sub Die Prozedur Sub Main zeigt die Application-Bar nun an. Um die Application-Bar wieder zu entfernen, ist es äussert wichtig, die Prozedur UnloadAppBar aufzurufen, da sonst der durch die AppBar belegte Bildschirmbereich nicht wieder freigegeben wird! ' AppBar entfernen und Anwendung beenden Private Sub cmdExit_Click() UnloadAppBar Unload Me End End Sub Dieser Tipp wurde bereits 34.203 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 Dezemeber 2024 Roland Wutzke MultiSort im ListView-Control Dieses Beispiel zeigt, wie sich verschiedene Sortierfunktionen für ein ListView Control realisieren lassen. TOP Entwickler-Paket TOP-Preis!! Mit der Developer CD erhalten Sie insgesamt 24 Entwickler- komponenten und Windows-DLLs. Die Einzelkomponenten haben einen Gesamtwert von 1605.50 EUR... |
||||||||||||||||
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. |