ResizeGadget
Posted: Sat Sep 27, 2014 1:44 pm
Fred something like add, to be able to learn, has changed a gadget
Code: Select all
;Resize gadget constant
CompilerIf Defined(PB_Event_MoveGadget, #PB_Constant) =0 And
Defined(PB_Event_SizeGadget, #PB_Constant) =0
Enumeration #PB_Event_FirstCustomValue
#PB_Event_MoveGadget
#PB_Event_SizeGadget
EndEnumeration
Enumeration #PB_EventType_FirstCustomValue
#PB_EventType_MoveGadget_X
#PB_EventType_MoveGadget_Y
#PB_EventType_SizeGadget_Width
#PB_EventType_SizeGadget_Height
EndEnumeration
CompilerEndIf
;Get ID from handle
CompilerIf Defined(IDWindow, #PB_Function) =0
CompilerIf #PB_Compiler_OS = #PB_OS_Windows
Import ""
CompilerElse
ImportC ""
CompilerEndIf
PB_Object_EnumerateStart(*Object)
PB_Object_EnumerateNext(*Object,*ID.Integer)
PB_Object_EnumerateAbort(*Object)
PB_Window_Objects.l
EndImport
Procedure IDWindow(Handle)
Protected ID
PB_Object_EnumerateStart(PB_Window_Objects)
While PB_Object_EnumerateNext(PB_Window_Objects, @ID)
If Handle = WindowID(ID)
ProcedureReturn ID
EndIf
Wend
ProcedureReturn -1
EndProcedure
CompilerEndIf
;Get parent gadget
CompilerIf Defined(GetParent, #PB_Function) =0
Procedure GetParent(ChildID)
CompilerIf #PB_Compiler_OS = #PB_OS_Windows
ProcedureReturn GetParent_(ChildID)
CompilerElseIf #PB_Compiler_OS = #PB_OS_Linux
ProcedureReturn gtk_widget_get_parent_(ChildID)
CompilerEndIf
EndProcedure
Procedure GadgetWindow(Gadget)
Protected ParentID = GetParent(GadgetID(Gadget))
While ParentID
ParentID = GetParent(ParentID)
If ParentID
ProcedureReturn IDWindow(ParentID)
EndIf
Wend
EndProcedure
CompilerEndIf
;Get parent gadget
CompilerIf Defined(BindEventGadget, #PB_Function) =0
ProcedureDLL BindEventGadget(*CallBack, Gadget =-1, EventType =-1, Event =#PB_Event_Gadget)
If Gadget = #PB_All
BindEvent(Event, *CallBack)
Else
If EventType = #PB_All
BindEvent(Event, *CallBack, GadgetWindow(Gadget), Gadget)
Else
BindGadgetEvent(Gadget, *CallBack, EventType)
EndIf
EndIf
EndProcedure
CompilerEndIf
ProcedureDLL MoveGadget(Gadget, X, Y) ;Move gadget and set Event = #PB_Event_MoveGadget and EventType = #PB_EventType_MoveGadget_X|#PB_EventType_MoveGadget_Y
Static OldX, OldY
If IsGadget(Gadget)
If (OldX <> X And X <> #PB_Ignore) :OldX = X
PostEvent(#PB_Event_MoveGadget, GadgetWindow(Gadget), Gadget, #PB_EventType_MoveGadget_X)
PostEvent(#PB_Event_Gadget, GadgetWindow(Gadget), Gadget, #PB_EventType_MoveGadget_X)
EndIf
If (OldY<>Y And Y<>#PB_Ignore) :OldY=Y
PostEvent(#PB_Event_MoveGadget, GadgetWindow(Gadget), Gadget, #PB_EventType_MoveGadget_Y)
PostEvent(#PB_Event_Gadget, GadgetWindow(Gadget), Gadget, #PB_EventType_MoveGadget_Y)
EndIf
ResizeGadget(Gadget, X, Y, #PB_Ignore, #PB_Ignore)
EndIf
EndProcedure
ProcedureDLL SizeGadget(Gadget, Width, Height) ;Size gadget and set Event = #PB_Event_SizeGadget and EventType = #PB_EventType_SizeGadget_Width|#PB_EventType_SizeGadget_Height
Static OldWidth, OldHeight
If IsGadget(Gadget)
If (OldWidth <> Width And Width <> #PB_Ignore) :OldWidth = Width
PostEvent(#PB_Event_SizeGadget, GadgetWindow(Gadget), Gadget, #PB_EventType_SizeGadget_Width)
PostEvent(#PB_Event_Gadget, GadgetWindow(Gadget), Gadget, #PB_EventType_SizeGadget_Width)
EndIf
If (OldHeight <> Height And Height <> #PB_Ignore) :OldHeight = Height
PostEvent(#PB_Event_SizeGadget, GadgetWindow(Gadget), Gadget, #PB_EventType_SizeGadget_Height)
PostEvent(#PB_Event_Gadget, GadgetWindow(Gadget), Gadget, #PB_EventType_SizeGadget_Height)
EndIf
ResizeGadget(Gadget, #PB_Ignore, #PB_Ignore, Width, Height)
EndIf
EndProcedure
CompilerIf (#PB_Compiler_IsMainFile)
Procedure Event_SizeGadget()
;Debug "Size - " + EventGadget()
If EventType()=#PB_EventType_SizeGadget_Width
Result$ ="Size_w - " + EventGadget() + " w= " + GadgetWidth(EventGadget())
Debug Result$
EndIf
If EventType()=#PB_EventType_SizeGadget_Height
Result$ ="Size_h - " + EventGadget() + " h= " + GadgetHeight(EventGadget())
Debug Result$
EndIf
If IsWindow(GadgetWindow(EventGadget()))
SetWindowTitle(GadgetWindow(EventGadget()),Result$)
EndIf
EndProcedure
Procedure Event_MoveGadget()
;Debug "Move - " + EventGadget()
If EventType()=#PB_EventType_MoveGadget_X
Result$ ="Move_x - " + EventGadget() + " x= " + GadgetX(EventGadget())
Debug Result$
EndIf
If EventType()=#PB_EventType_MoveGadget_Y
Result$ ="Move_y - " + EventGadget() + " y= " + GadgetY(EventGadget())
Debug Result$
EndIf
If IsWindow(GadgetWindow(EventGadget()))
SetWindowTitle(GadgetWindow(EventGadget()),Result$)
EndIf
EndProcedure
Procedure OpenWindow_0(x = 0, y = 0, width = 330, height = 300)
;Global Window_0 = OpenWindow(#PB_Any, x, y, width, height, "0", #PB_Window_SystemMenu| #PB_Window_SizeGadget)
ButtonGadget(5, 20, 20, 20, 20,"5")
SetParent_(GadgetID(5),0)
BindEventGadget(@Event_MoveGadget(),5);,#PB_Any,#PB_Event_MoveGadget)
BindEventGadget(@Event_SizeGadget(),5);,#PB_Any,#PB_Event_SizeGadget)
EndProcedure
Procedure OpenWindow_1(x = 0, y = 340, width = 330, height = 300)
Global Window_1 = OpenWindow(#PB_Any, x, y, width, height, "1", #PB_Window_SystemMenu| #PB_Window_SizeGadget)
ButtonGadget(15, 20, 20, 20, 20,"15")
BindEvent(#PB_Event_MoveGadget,@Event_MoveGadget(),Window_1,15)
BindEvent(#PB_Event_SizeGadget,@Event_SizeGadget(),Window_1,15)
EndProcedure
Procedure ResizeButton(x,y,Text$)
ContainerGadget(#PB_Any, x, y, 300, 50)
TextGadget (#PB_Any, 0, 5, 250, 20,Text$, #PB_Text_Center)
TrackBar = TrackBarGadget(#PB_Any, 0, 30, 250, 20, 0, 300)
CloseGadgetList()
ProcedureReturn TrackBar
EndProcedure
Procedure ResizeButtonWindow(x = 350, y = 0, width = 265, height = 300)
OpenWindow(#PB_Any, x, y, width, height, "Center", #PB_Window_SystemMenu| #PB_Window_ScreenCentered)
TextGadget (#PB_Any, 30, 5, 200, 20,"Select Gadget", #PB_Text_Center)
ComboBoxGadget(1,30,30,205,21)
AddGadgetItem(1,-1,"5")
AddGadgetItem(1,-1,"15")
Global Xg=ResizeButton(5,55,"move gadget X coordinate") :DisableGadget(Xg,1)
Global Yg=ResizeButton(5,110,"move gadget Y coordinate") :DisableGadget(Yg,1)
Global Wg=ResizeButton(5,165,"Size gadget Width coordinate") :DisableGadget(Wg,1)
Global Hg=ResizeButton(5,215,"Size gadget Height coordinate") :DisableGadget(Hg,1)
EndProcedure
ResizeButtonWindow()
OpenWindow_0()
OpenWindow_1()
Repeat
Select WaitWindowEvent()
Case #PB_Event_Gadget
If EventGadget() =1
Global SGadget = Val(GetGadgetText(1))
DisableGadget(Xg,0)
DisableGadget(Yg,0)
DisableGadget(Wg,0)
DisableGadget(Hg,0)
EndIf
If EventGadget() =Xg
moveGadget(SGadget,GetGadgetState(Xg)+20,#PB_Ignore)
ElseIf EventGadget() =Yg
moveGadget(SGadget,#PB_Ignore,GetGadgetState(Yg)+20)
ElseIf EventGadget() =Wg
sizeGadget(SGadget,GetGadgetState(Wg)+20,#PB_Ignore)
ElseIf EventGadget() =Hg
sizeGadget(SGadget,#PB_Ignore,GetGadgetState(Hg)+20)
EndIf
Case #PB_Event_CloseWindow
End
EndSelect
ForEver
CompilerEndIf