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