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   RSS-Feeds  | Newsletter  | Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2019
 
zurück
Rubrik: Oberfläche · Sonstiges   |   VB-Versionen: VB4, VB5, VB631.08.01
Erstellen einer eigenen Application-Bar

Eine Form - ein paar API-Funktionen - und schon lässt sich eine eigene AppBar (ähnlich der Taskbar) erstellen.

Autor:   Thomas BannertBewertung:     [ Jetzt bewerten ]Views:  31.355 
ohne HomepageSystem:  Win9x, WinNT, Win2k, WinXP, Vista, Win7, Win8, Win10 Beispielprojekt auf CD 

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?
Benötigt wird hierzu die nette API Funktion "SHAppBarMessage" der Shell32Lib. Damit kann eine Application-Bar erstellt werden, die alles hat was man braucht.

Vorbereitung:

  1. Den unten aufgeführten Code in ein neues Modul kopieren (basAppBar.bas).
  2. Ein Form anlegen mit dem Namen frmAppBar
  3. Auf dieser Form in der linken oberen Ecke ein Picture-Steuerelement (fraBack) plazieren, welches die Mindesthöhe bzw. -breite der AppBar vorgibt.
  4. Einen Button (z.B. cmdExit) irgendwo im oberen Bereich der Forms plazieren, welcher die Funktion UnloadAppBar aufruft. (WICHTIG!!!)
  5. Das Startobjekt des Projektes auf "Sub Main" stellen.
  6. Mit F5 starten und schauen was passiert...

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
Diese können Sie entweder in ein eigenes Modul setzen oder aber auch in das obige Modul.

' 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!

Wenn Sie also auf die Form frmAppBar einen Button cmdExit plaziert haben, so sollte folgender Code ausgeführt werden, um die AppBar zu entfernen und die Anwendung zu beenden:

' AppBar entfernen und Anwendung beenden
Private Sub cmdExit_Click()
  UnloadAppBar
  Unload Me
  End
End Sub

Dieser Tipp wurde bereits 31.355 mal aufgerufen.

Voriger Tipp   |   Zufälliger Tipp   |   Nächster Tipp

Über diesen Tipp im Forum diskutieren
Haben Sie Fragen oder Anregungen zu diesem Tipp, können Sie gerne mit anderen darüber in unserem Forum diskutieren.

Neue Diskussion eröffnen

nach obenzurück


Anzeige

Kauftipp Unser Dauerbrenner!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.
 
   

Druckansicht Druckansicht Copyright ©2000-2019 vb@rchiv Dieter Otter
Alle Rechte vorbehalten.
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.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel