Code: Alles auswählen
;Autor: Stefan
EnableExplicit
Define EventID
Define *APPBD.APPBARDATA
Define *APPBD2.APPBARDATA
Define X
Define Y
Define Width
Define Height
Define X2
Define Y2
Define Width2
Define Height2
Procedure CreateAPPBar(Edge,Size); unterstützt #ABE_LEFT,#ABE_RIGHT,#ABE_TOP,#ABE_BOTTOM für Edge
  Protected *APPBD.APPBARDATA=AllocateMemory(SizeOf(APPBARDATA))
  Protected TBD.APPBARDATA
  SHAppBarMessage_(#ABM_GETTASKBARPOS,TBD)
  Protected TBEdge=TBD\uEdge
  
  SHAppBarMessage_(#ABM_NEW,*APPBD)
  
  *APPBD\uEdge=Edge
  
  Select Edge
    Case #ABE_LEFT
      
      If TBEdge=Edge
        *APPBD\rc\Left=TBD\rc\Right
        *APPBD\rc\Right=TBD\rc\Right+Size
        *APPBD\rc\Top=0
        *APPBD\rc\Bottom=GetSystemMetrics_(#SM_CYSCREEN)
      Else
        *APPBD\rc\Left=0
        *APPBD\rc\Right=Size
        *APPBD\rc\Top=0
        *APPBD\rc\Bottom=GetSystemMetrics_(#SM_CYSCREEN)
      EndIf
      
    Case #ABE_RIGHT
      
      If TBEdge=Edge
        *APPBD\rc\Left=TBD\rc\Left-Size
        *APPBD\rc\Right=TBD\rc\Left
        *APPBD\rc\Top=0
        *APPBD\rc\Bottom=GetSystemMetrics_(#SM_CYSCREEN)
      Else
        *APPBD\rc\Left=GetSystemMetrics_(#SM_CXSCREEN)-Size
        *APPBD\rc\Right=GetSystemMetrics_(#SM_CXSCREEN)
        *APPBD\rc\Top=0
        *APPBD\rc\Bottom=GetSystemMetrics_(#SM_CYSCREEN)
      EndIf
      
    Case #ABE_TOP
      
      If TBEdge=Edge
        *APPBD\rc\Left=0
        *APPBD\rc\Right=GetSystemMetrics_(#SM_CXSCREEN)
        *APPBD\rc\Top=TBD\rc\Bottom
        *APPBD\rc\Bottom=TBD\rc\Bottom+Size
      Else
        *APPBD\rc\Left=0
        *APPBD\rc\Right=GetSystemMetrics_(#SM_CXSCREEN)
        *APPBD\rc\Top=0
        *APPBD\rc\Bottom=Size
      EndIf
      
    Case #ABE_BOTTOM
      
      If TBEdge=Edge
        *APPBD\rc\Left=0
        *APPBD\rc\Right=GetSystemMetrics_(#SM_CXSCREEN)
        *APPBD\rc\Top=TBD\rc\Top-Size
        *APPBD\rc\Bottom=TBD\rc\Top
      Else
        *APPBD\rc\Left=0
        *APPBD\rc\Right=GetSystemMetrics_(#SM_CXSCREEN)
        *APPBD\rc\Top=GetSystemMetrics_(#SM_CYSCREEN)-Size
        *APPBD\rc\Bottom=GetSystemMetrics_(#SM_CYSCREEN)
      EndIf
  EndSelect
  
  SHAppBarMessage_(#ABM_SETPOS,*APPBD)
  
  ProcedureReturn *APPBD
EndProcedure
Procedure RemoveAPPBar(*APPBD.APPBARDATA)
  SHAppBarMessage_(#ABM_REMOVE,*APPBD)
  FreeMemory(*APPBD)
EndProcedure
Procedure APPBarX(*APPBD.APPBARDATA)
  ProcedureReturn *APPBD\rc\Left
EndProcedure
Procedure APPBarY(*APPBD.APPBARDATA)
  ProcedureReturn *APPBD\rc\Top
EndProcedure
Procedure APPBarWidth(*APPBD.APPBARDATA)
  ProcedureReturn *APPBD\rc\Right-*APPBD\rc\Left
EndProcedure
Procedure APPBarHeight(*APPBD.APPBARDATA)
  ProcedureReturn *APPBD\rc\Bottom-*APPBD\rc\Top
EndProcedure
*APPBD2.APPBARDATA=CreateAPPBar(#ABE_LEFT,40) ; AppBar am linken Rand erstellen
X2=APPBarX(*APPBD2)
Y2=APPBarY(*APPBD2)
Width2=APPBarWidth(*APPBD2)
Height2=APPBarHeight(*APPBD2)
If OpenWindow(1,X2,Y2,Width2,Height2,"Window",#PB_Window_BorderLess)
  ButtonImageGadget(6,10,10,20,20,LoadIcon_(0,102))
  ButtonImageGadget(7,10,40,20,20,LoadIcon_(0,102))
  ButtonImageGadget(8,10,70,20,20,LoadIcon_(0,101))
  ButtonImageGadget(9,10,100,20,20,LoadIcon_(0,104))
  
  *APPBD.APPBARDATA=CreateAPPBar(#ABE_TOP,40) ; AppBar oben erstellen
  X=APPBarX(*APPBD)
  Y=APPBarY(*APPBD)
  Width=APPBarWidth(*APPBD)
  Height=APPBarHeight(*APPBD)
  
  If OpenWindow(0,X,Y,Width,Height,"Window",#PB_Window_BorderLess)
    ButtonImageGadget(2,10,10,20,20,LoadIcon_(0,100))
    ButtonImageGadget(3,40,10,20,20,LoadIcon_(0,100))
    ButtonImageGadget(4,70,10,20,20,LoadIcon_(0,100))
    ButtonImageGadget(5,100,10,20,20,LoadIcon_(0,103))
    
    SetWindowPos_(WindowID(0),#HWND_TOPMOST,0,0,0,0,#SWP_NOSIZE|#SWP_NOMOVE)
    
    Repeat
      EventID=WaitWindowEvent()
      If EventID=#PB_Event_Gadget
        Select EventGadget()
          Case 5
            EventID = #PB_Event_CloseWindow
          Case 9
            MessageRequester("","Hallo")
        EndSelect
      EndIf
      If EventID = #PB_Event_CloseWindow
        RemoveAPPBar(*APPBD) ; AppBar entfernen
        RemoveAPPBar(*APPBD2)
        End
      EndIf
    ForEver
  EndIf
EndIf