Seite 1 von 1

Fenster relativ zur TaskBar verschieben

Verfasst: 14.04.2007 00:29
von Kai
Da ich in meinen aktuellen Projekt solch eine Funktion benötige,
und glaube das auch andere diese gebrauchen können,
poste ich sie einfach mal hier.

Die Funktion verschiebt ein Fenster in der unteren rechten Ecke am Bildschirm und beachtet dabei die TaskBar.

Code: Alles auswählen

Procedure MoveWindowAtTaskBar(hWnd, Gap)
 If IsWindow_(hWnd) <> 0
 
  Protected DesktopW.l, DesktopH.l
  DesktopW = GetSystemMetrics_(#SM_CXSCREEN)
  DesktopH = GetSystemMetrics_(#SM_CYSCREEN)
 
  Protected W.RECT, WindowW.l, WindowH.l
  GetWindowRect_(hWnd, @W)
  WindowW = W\right - W\left
  WindowH = W\bottom - W\top
 
  Protected TaskBar.APPBARDATA, TaskBarP.l, TaskBarW.l, TaskBarH.l
  SHAppBarMessage_(#ABM_GETTASKBARPOS, TaskBar)
  TaskBarP = TaskBar\uEdge
  SHAppBarMessage_(#ABM_GETTASKBARPOS, TaskBar)
  TaskBarW = DesktopW - TaskBar\rc\left
  TaskBarH = DesktopH - TaskBar\rc\top
 
  Select TaskBarP
   Case #ABE_LEFT:   MoveWindow_(hWnd, DesktopW - WindowW - Gap, DesktopH - WindowH - Gap, WindowW, WindowH, #True)
   Case #ABE_TOP:    MoveWindow_(hWnd, DesktopW - WindowW - Gap, DesktopH - WindowH - Gap, WindowW, WindowH, #True)
   Case #ABE_RIGHT:  MoveWindow_(hWnd, DesktopW - WindowW - TaskBarW - Gap, DesktopH - WindowH - Gap, WindowW, WindowH, #True)
   Case #ABE_BOTTOM: MoveWindow_(hWnd, DesktopW - WindowW - Gap, DesktopH - WindowH - TaskBarH - Gap, WindowW, WindowH, #True)
  EndSelect
 
  ProcedureReturn #True
 Else
  ProcedureReturn #False
 EndIf
EndProcedure