Borderless Form soll Taskbar nicht verdecken

dennislassiter

Erfahrenes Mitglied
Hi!

Ich hab ein Form mit Caption = "" und Controlbox = False und mit einer eigenen "Titelleiste" bestehend aus einer Picturbox.
Soweit so gut! Jetzt passiert wenn ich auf "Maximieren" klicke folgendes:
Die Taskbar wird verdeckt.

Ich hab schon ein Script gefunden womit man die Position der Taskbar ermittlen kann, aber das hat mir komischerweiße auch nicht weitergeholfen.

Vb-Archiv:
http://www.vbarchiv.net/archiv/tipp_details.php?pid=358


Ich hab auch schon geschafft anstatt einem Button meine Titlebar in die Normal zu stecken. Das ganze war aber sehr wacklig.
Vb-Archiv: http://www.vbarchiv.net/archiv/tipp_details.php?pid=488

Kann mir jemand helfen?


Danke!

Grüße,

Dennis
 
Hallo dennislassiter,
WindowState musst Du auf 0 stellen
Code:
Private Sub Form_Resize()
Me.Top = 0
Me.Left = 0
Me.Height = Screen.Height - 440 ' Diese Zahl kann sich ändern, je nach Auflösung des Bildschirms
Me.Width = Screen.Width
End Sub
 
das problem dabei ist, dass ich erstmal keinen dünen 3d-Rahmen hab und 2. ist das nicht dynamisch genug...
was ist wenn der User seine Taskbar 3 Zeilen groß hat, oder sie links oder rechts ist?
 
So geht´s (getestet)
Code:
Private Declare Function SHAppBarMessage Lib _
  "shell32.dll" (ByVal dwMessage As Long, _
  pData As APPBARDATA) As Long

' und die APPBAR-Struktur
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

Public Enum tBarAlign
  tbalinks = 0
  tbaRechts = 1
  tbaOben = 2
  tbaUnten = 3
End Enum

Private Sub Command1_Click()
Unload Form1
End Sub

Private Sub Form_Resize()
If TaskBarAlign = tbaUnten Then
 Me.Move 0, 0, Screen.Width, Screen.Height - ScaleX(TaskBarHeight, vbPixels, vbTwips)
ElseIf TaskBarAlign = tbaOben Then
 Me.Move 0, ScaleX(TaskBarHeight, vbPixels, vbTwips), Screen.Width, Screen.Height - ScaleX(TaskBarHeight, vbPixels, vbTwips)
ElseIf TaskBarAlign = tbalinks Then
 Me.Move ScaleY(TaskBarWidth, vbPixels, vbTwips), 0, Screen.Width - ScaleY(TaskBarWidth, vbPixels, vbTwips), Screen.Height
ElseIf TaskBarAlign = tbaRechts Then
 Me.Move 0, 0, Screen.Width - ScaleY(TaskBarWidth, vbPixels, vbTwips), Screen.Height
Else
 Me.Top = 0
 Me.Left = 0
 Me.Height = Screen.Height
 Me.Width = Screen.Width
End If
End Sub

Public Function TaskBarHeight() As Long
  Dim AppBar As APPBARDATA
  Dim lResult As Long
  Const ABM_GETTASKBARPOS = &H5

  lResult = SHAppBarMessage(ABM_GETTASKBARPOS, AppBar)

  ' Größe der Taskbar
  With AppBar.rc
    TaskBarHeight = .Bottom - .Top
  End With
End Function

' Breite in Pixel
Public Function TaskBarWidth() As Long
  Dim AppBar As APPBARDATA
  Dim lResult As Long
  Const ABM_GETTASKBARPOS = &H5

  lResult = SHAppBarMessage(ABM_GETTASKBARPOS, AppBar)

  ' Breite der Taskbar
  With AppBar.rc
    TaskBarWidth = .Right - .Left
  End With
End Function

Public Function TaskBarAlign() As tBarAlign
  Dim AppBar As APPBARDATA
  Dim lResult As Long
  Dim tbHeight As Long
  Dim tbWidth As Long

  Const ABM_GETTASKBARPOS = &H5

  lResult = SHAppBarMessage(ABM_GETTASKBARPOS, AppBar)

  ' Größe der Taskbar
  With AppBar.rc
    tbHeight = .Bottom - .Top
    tbWidth = .Right - .Left
  End With

  ' Anhand der Größe die Position ermitteln
  If tbHeight < Screen.Height / Screen.TwipsPerPixelY Then
    If AppBar.rc.Top <= 0 Then
      TaskBarAlign = tbaOben
    Else
      TaskBarAlign = tbaUnten
    End If
  Else
    If AppBar.rc.Left <= 0 Then
      TaskBarAlign = tbalinks
    Else
      TaskBarAlign = tbaRechts
    End If
  End If
End Function
 
Zuletzt bearbeitet:

Neue Beiträge

Zurück