AutoResizeGadgets.pbi als Modul für PureBasic V5.2x
Code: Alles auswählen
;/ ===== AutoResizeGadgets.pbi =====
;/ Automatically Resize Window Gadgets (based on RS_ResizeGadget by USCode)
;/ [ PureBasic V5.2x ]
;/ January 2014 by Thorsten1867 (optimized by TS-Soft)
DeclareModule GadgetResize
Enumeration 1
#GR_LEFT
#GR_TOP = 1 << 1
#GR_RIGHT = 1 << 2
#GR_BOTTOM = 1 << 3
#GR_HCENTER = 1 << 4
#GR_VCENTER = 1 << 5
EndEnumeration
Declare AddGadget(WindowID.i, GadgetID.i, Flags.l)
Declare SetResizeColumn(GadgetID.i, Column.i)
Declare RemoveGadget(GadgetID.i)
Declare RemoveWindow(WindowID.i)
EndDeclareModule
Module GadgetResize
EnableExplicit
Structure GadgetResizeStructure
WindowID.i
GadgetID.i
Left.i
Top.i
Right.i
Bottom.i
Lock_Left.i
Lock_Top.i
Lock_Right.i
Lock_Bottom.i
HCenter.i
VCenter.i
Gadget.i
Column.i
EndStructure
Global NewMap GadgetResize.GadgetResizeStructure()
Procedure GadgetResize_WindowHandler()
Protected.i WindowID = EventWindow(), WinWidth, WinHeight, X, Y, Width, Height, ColWidth
If MapSize(GadgetResize())
WinWidth = WindowWidth(WindowID)
WinHeight = WindowHeight(WindowID)
ForEach GadgetResize()
If IsGadget(GadgetResize()\GadgetID) And GadgetResize()\WindowID = WindowID
X = GadgetX(GadgetResize()\GadgetID)
Y = GadgetY(GadgetResize()\GadgetID)
Width = #PB_Ignore
Height = #PB_Ignore
If GadgetResize()\Lock_Left = #False : X = WinWidth - GadgetResize()\Left : EndIf
If GadgetResize()\Lock_Top = #False : Y = WinHeight - GadgetResize()\Top : EndIf
If GadgetResize()\Lock_Right = #True : Width = WinWidth - X - GadgetResize()\Right : EndIf
If GadgetResize()\Lock_Bottom = #True : Height = WinHeight - Y - GadgetResize()\Bottom : EndIf
If GadgetResize()\HCenter : X = (WinWidth - GadgetWidth(GadgetResize()\GadgetID)) / 2 : EndIf
If GadgetResize()\VCenter : Y = (WinHeight - GadgetHeight(GadgetResize()\GadgetID)) / 2 : EndIf
Select GadgetResize()\Gadget
Case #PB_GadgetType_ListIcon ;{ ListIconGadget
If Width <> #PB_Ignore
ColWidth = GetGadgetItemAttribute(GadgetResize()\GadgetID, #Null, #PB_ListIcon_ColumnWidth, GadgetResize()\Column) + (Width - GadgetWidth(GadgetResize()\GadgetID))
SetGadgetItemAttribute(GadgetResize()\GadgetID, #Null, #PB_ListIcon_ColumnWidth, ColWidth, GadgetResize()\Column)
EndIf ;}
Case #PB_GadgetType_ExplorerList ;{ ExplorerListGadget
If Width <> #PB_Ignore
ColWidth = GetGadgetItemAttribute(GadgetResize()\GadgetID, #Null, #PB_Explorer_ColumnWidth, GadgetResize()\Column) + (Width - GadgetWidth(GadgetResize()\GadgetID))
SetGadgetItemAttribute(GadgetResize()\GadgetID, #Null, #PB_Explorer_ColumnWidth, ColWidth, GadgetResize()\Column)
EndIf ;}
EndSelect
ResizeGadget(GadgetResize()\GadgetID, X, Y, Width, Height)
EndIf
Next
EndIf
EndProcedure
Procedure AddGadget(WindowID.i, GadgetID.i, Flags.l)
Protected.i WinWidth, WinHeight, X, Y
Protected.s GId = Str(GadgetID)
If IsWindow(WindowID)
WinWidth = WindowWidth(WindowID)
WinHeight = WindowHeight(WindowID)
If IsGadget(GadgetID)
GadgetResize(GId)\WindowID = WindowID
GadgetResize(GId)\GadgetID = GadgetID
If Flags & #GR_LEFT : GadgetResize(GId)\Lock_Left = #True : EndIf
If Flags & #GR_TOP : GadgetResize(GId)\Lock_Top = #True : EndIf
If Flags & #GR_RIGHT : GadgetResize(GId)\Lock_Right = #True : EndIf
If Flags & #GR_BOTTOM : GadgetResize(GId)\Lock_Bottom = #True : EndIf
If Flags & #GR_HCENTER
X = (WinWidth - GadgetWidth(GadgetID)) / 2
GadgetResize(GId)\HCenter = #True
Else
X = GadgetX(GadgetID)
EndIf
If Flags & #GR_VCENTER
Y = (WinHeight - GadgetHeight(GadgetID)) / 2
GadgetResize(GId)\VCenter = #True
Else
Y = GadgetY(GadgetID)
EndIf
If GadgetResize(GId)\Lock_Left = #False : GadgetResize(GId)\Left = WinWidth - X : EndIf
If GadgetResize(GId)\Lock_Top = #False : GadgetResize(GId)\Top = WinHeight - Y : EndIf
If GadgetResize(GId)\Lock_Right = #True : GadgetResize(GId)\Right = WinWidth - (X + GadgetWidth(GadgetID)) : EndIf
If GadgetResize(GId)\Lock_Bottom = #True : GadgetResize(GId)\Bottom = WinHeight - (Y + GadgetHeight(GadgetID)) : EndIf
If Flags & #GR_HCENTER Or Flags & #GR_VCENTER
ResizeGadget(GadgetID, X, Y, #PB_Ignore, #PB_Ignore)
EndIf
EndIf
EndIf
EndProcedure
Procedure SetResizeColumn(GadgetID.i, Column.i)
Protected.s GId = Str(GadgetID)
GadgetResize(GId)\Gadget = GadgetType(GadgetID)
GadgetResize(GId)\Column = Column
EndProcedure
Procedure RemoveGadget(GadgetID.i) ; Stop resizing gadget
DeleteMapElement(GadgetResize(), Str(GadgetID))
EndProcedure
Procedure RemoveWindow(WindowID.i) ; Remove all gadgets (-> CloseWindow)
ForEach GadgetResize()
If GadgetResize()\WindowID = WindowID
DeleteMapElement(GadgetResize(), MapKey(GadgetResize()))
EndIf
Next
EndProcedure
BindEvent(#PB_Event_SizeWindow, @GadgetResize_WindowHandler())
EndModule
CompilerIf #PB_Compiler_IsMainFile
#Window = 0
#StatusBar = 1
Enumeration
#Button_0
#Button_1
#Button_2
#Button_3
#Button_4
#List
EndEnumeration
If OpenWindow(#Window, 358, 178, 300, 300, "Resize Test", #PB_Window_SizeGadget | #PB_Window_SystemMenu | #PB_Window_TitleBar | #PB_Window_ScreenCentered )
ButtonGadget(#Button_0, 5, 5, 50, 25, "Resize -")
ButtonGadget(#Button_1, 245, 5, 50, 25, "Resize +")
ButtonGadget(#Button_2, 5, 240, 50, 25, "Button2")
ButtonGadget(#Button_3, 245, 240, 50, 25, "Button3")
ListIconGadget(#List, 55, 30, 190, 210, "Spalte 0", 86, #PB_ListIcon_GridLines)
AddGadgetColumn(#List, 1, "Spalte 1", 100)
ButtonGadget(#Button_4, 5, 270, 80, 25, "Center")
WindowBounds(#Window, 200, 200, 400, 500)
GadgetResize::AddGadget(#Window, #Button_0, GadgetResize::#GR_LEFT | GadgetResize::#GR_TOP)
GadgetResize::AddGadget(#Window, #Button_1, GadgetResize::#GR_TOP | GadgetResize::#GR_RIGHT)
UseModule GadgetResize
AddGadget(#Window, #Button_2, #GR_LEFT | #GR_BOTTOM)
AddGadget(#Window, #Button_3, #GR_RIGHT | #GR_BOTTOM)
AddGadget(#Window, #List, #GR_LEFT | #GR_TOP | #GR_RIGHT | #GR_BOTTOM)
SetResizeColumn(#List, 0) ; Resize Column in the ListIconGadget
AddGadget(#Window, #Button_4, #GR_HCENTER)
UnuseModule GadgetResize
ExitWindow = #False
Repeat
Select WaitWindowEvent()
Case #PB_Event_CloseWindow
ExitWindow = #True
Case #PB_Event_Gadget
Select EventGadget()
Case #Button_0
ResizeWindow(#Window, #PB_Ignore, #PB_Ignore, 250, 250)
Case #Button_1
ResizeWindow(#Window, #PB_Ignore, #PB_Ignore, 350, 400)
EndSelect
EndSelect
Until ExitWindow
GadgetResize::RemoveWindow(#Window) ; Remove resize data of the window
CloseWindow(#Window)
EndIf
CompilerEndIf
Code: Alles auswählen
;/ ===== AutoResizeGadgets.pbi =====
;/ Automatically Resize Window Gadgets
;/ January 2014 by Thorsten1867
;/ based on RS_ResizeGadget by USCode
;- Definitions
;{ --- Flags -------
; #GR_LEFT|#GR_TOP|#GR_RIGHT|#GR_BOTTOM
#GR_LEFT = 1
#GR_TOP = 1 << 1
#GR_RIGHT = 1 << 2
#GR_BOTTOM = 1 << 3
#GR_HCENTER = 1 << 4
#GR_VCENTER = 1 << 5
;} -----------------
Structure GadgetResizeStructure
WindowID.i
GadgetID.i
Left.i
Top.i
Right.i
Bottom.i
Lock_Left.i
Lock_Top.i
Lock_Right.i
Lock_Bottom.i
HCenter.i
VCenter.i
Gadget.i
Column.i
EndStructure
Global NewMap GadgetResize.GadgetResizeStructure()
Procedure GadgetResize_Callback(WindowID, Message, wParam, lParam)
Protected ReturnValue = #PB_ProcessPureBasicEvents
Protected.i X, Y, Width, Hight, WinWidth, WinHeight, ColWidth
Select Message
Case #WM_SIZE ;{ Resize Gadgets
If MapSize(GadgetResize())
ForEach GadgetResize()
If GadgetResize()\WindowID = GetActiveWindow()
If IsGadget(GadgetResize()\GadgetID)
WinWidth = WindowWidth(GadgetResize()\WindowID)
WinHeight = WindowHeight(GadgetResize()\WindowID)
X = GadgetX(GadgetResize()\GadgetID)
Y = GadgetY(GadgetResize()\GadgetID)
Width = #PB_Ignore
Height = #PB_Ignore
If GadgetResize()\Lock_Left = #False : X = WinWidth - GadgetResize()\Left : EndIf
If GadgetResize()\Lock_Top = #False : Y = WinHeight - GadgetResize()\Top : EndIf
If GadgetResize()\Lock_Right = #True : Width = WinWidth - X - GadgetResize()\Right : EndIf
If GadgetResize()\Lock_Bottom = #True : Height = WinHeight - Y - GadgetResize()\Bottom : EndIf
If GadgetResize()\HCenter : X = (WinWidth - GadgetWidth(GadgetResize()\GadgetID)) / 2 : EndIf
If GadgetResize()\VCenter : Y = (WinHeight - GadgetHeight(GadgetResize()\GadgetID)) / 2 : EndIf
Select GadgetResize()\Gadget
Case #PB_GadgetType_ListIcon ;{ ListIconGadget
If Width <> #PB_Ignore
ColWidth = GetGadgetItemAttribute(GadgetResize()\GadgetID, #Null, #PB_ListIcon_ColumnWidth, GadgetResize()\Column) + (Width - GadgetWidth(GadgetResize()\GadgetID))
SetGadgetItemAttribute(GadgetResize()\GadgetID, #Null, #PB_ListIcon_ColumnWidth, ColWidth, GadgetResize()\Column)
EndIf ;}
Case #PB_GadgetType_ExplorerList ;{ ExplorerListGadget
If Width <> #PB_Ignore
ColWidth = GetGadgetItemAttribute(GadgetResize()\GadgetID, #Null, #PB_Explorer_ColumnWidth, GadgetResize()\Column) + (Width - GadgetWidth(GadgetResize()\GadgetID))
SetGadgetItemAttribute(GadgetResize()\GadgetID, #Null, #PB_Explorer_ColumnWidth, ColWidth, GadgetResize()\Column)
EndIf ;}
EndSelect
ResizeGadget(GadgetResize()\GadgetID, X, Y, Width, Height)
EndIf
EndIf
Next
EndIf ;}
EndSelect
ProcedureReturn ReturnValue
EndProcedure
;- Procedures
Procedure AutoResize_AddGadget(WindowID.i, GadgetID.i, Flags.l)
Protected.i WinWidth, WinHeight, X, Y
Protected.s GId = Str(GadgetID)
If IsWindow(WindowID)
WinWidth = WindowWidth(WindowID)
WinHeight = WindowHeight(WindowID)
If IsGadget(GadgetID)
GadgetResize(GId)\WindowID = WindowID
GadgetResize(GId)\GadgetID = GadgetID
If Flags & #GR_LEFT : GadgetResize(GId)\Lock_Left = #True : EndIf
If Flags & #GR_TOP : GadgetResize(GId)\Lock_Top = #True : EndIf
If Flags & #GR_RIGHT : GadgetResize(GId)\Lock_Right = #True : EndIf
If Flags & #GR_BOTTOM : GadgetResize(GId)\Lock_Bottom = #True : EndIf
If Flags & #GR_HCENTER
X = (WinWidth - GadgetWidth(GadgetID)) / 2
GadgetResize(GId)\HCenter = #True
Else
X = GadgetX(GadgetID)
EndIf
If Flags & #GR_VCENTER
Y = (WinHeight - GadgetHeight(GadgetID)) / 2
GadgetResize(GId)\VCenter = #True
Else
Y = GadgetY(GadgetID)
EndIf
If GadgetResize(GId)\Lock_Left = #False : GadgetResize(GId)\Left = WinWidth - X : EndIf
If GadgetResize(GId)\Lock_Top = #False : GadgetResize(GId)\Top = WinHeight - Y : EndIf
If GadgetResize(GId)\Lock_Right = #True : GadgetResize(GId)\Right = WinWidth - (X + GadgetWidth(GadgetID)) : EndIf
If GadgetResize(GId)\Lock_Bottom = #True : GadgetResize(GId)\Bottom = WinHeight - (Y + GadgetHeight(GadgetID)) : EndIf
If Flags & #GR_HCENTER Or Flags & #GR_VCENTER
ResizeGadget(GadgetID, X, Y, #PB_Ignore, #PB_Ignore)
EndIf
EndIf
EndIf
EndProcedure
Procedure AutoResize_SetResizeColumn(GadgetID.i, Column.i)
Protected.s GId = Str(GadgetID)
GadgetResize(GId)\Gadget = GadgetType(GadgetID)
GadgetResize(GId)\Column = Column
EndProcedure
Procedure AutoResize_RemoveGadget(GadgetID.i) ; Stop resizing gadget
DeleteMapElement(GadgetResize(), Str(GadgetID))
EndProcedure
Procedure AutoResize_RemoveWindow(WindowID.i) ; Remove all gadgets (-> CloseWindow)
ForEach GadgetResize()
If GadgetResize()\WindowID = WindowID
DeleteMapElement(GadgetResize(), MapKey(GadgetResize()))
EndIf
Next
EndProcedure
Code: Alles auswählen
;/ AutoResizeGadgets Test
XIncludeFile "AutoResizeGadgets.pbi"
#Window = 0
Enumeration
#Button_0
#Button_1
#Button_2
#Button_3
#Button_4
#Listview_0
EndEnumeration
If OpenWindow(#Window, 358, 178, 300, 300, "Resize Test", #PB_Window_SizeGadget | #PB_Window_SystemMenu | #PB_Window_TitleBar | #PB_Window_ScreenCentered )
ButtonGadget(#Button_0, 5, 5, 50, 25, "Button0")
ButtonGadget(#Button_1, 245, 5, 50, 25, "Button1")
ButtonGadget(#Button_2, 5, 240, 50, 25, "Button2")
ButtonGadget(#Button_3, 245, 240, 50, 25, "Button3")
ListViewGadget(#Listview_0, 55, 30, 190, 210)
ButtonGadget(#Button_4, 5, 270, 80, 25, "Center")
; AutoResize_SetWindow(Parent WindowID, Min. Width, Min. Hight, Max. Width, Max. Hight)
; AutoResize_SetWindow(#Window)
AutoResize_SetWindow(#Window, 200, 200, 400, 500) ; min/max window size
; AutoResize_AddGadget(GadgetID, Lock Left, Lock Top, Lock Right, Lock Bottom)
AutoResize_AddGadget(#Window, #Button_0, #GR_LEFT | #GR_TOP)
AutoResize_AddGadget(#Window, #Button_1, #GR_TOP | #GR_RIGHT)
AutoResize_AddGadget(#Window, #Button_2, #GR_LEFT | #GR_BOTTOM)
AutoResize_AddGadget(#Window, #Button_3, #GR_RIGHT| #GR_BOTTOM)
AutoResize_AddGadget(#Window, #Listview_0, #GR_LEFT | #GR_TOP | #GR_RIGHT | #GR_BOTTOM)
AutoResize_AddGadget(#Window, #Button_4, #GR_HCENTER)
ExitWindow = #False
Repeat
If WaitWindowEvent() = #PB_Event_CloseWindow
ExitWindow = #True
EndIf
Until ExitWindow
AutoResize_RemoveWindow(#Window)
CloseWindow(#Window)
EndIf