Code: Select all
DeclareModule CustomGadget
Enumeration #PB_EventType_FirstCustomValue
#PB_EventType_Size
#PB_EventType_Move
EndEnumeration
Declare GadgetEvents()
Declare AddGadget(ThisGadget.i)
Declare Free(ThisGadget.i)
Declare Resize(Gadget, X, Y, Width, Height)
EndDeclareModule
Module CustomGadget
Procedure GadgetResize( Gadget )
Protected GadgetMove, GadgetSize, GadgetX, GadgetY, GadgetWidth, GadgetHeight.i
Protected Window = GetActiveWindow()
If IsGadget( Gadget )
Structure StructGadgetResize
GadgetX.i
GadgetY.i
GadgetWidth.i
GadgetHeight.i
EndStructure : Static NewMap Map.StructGadgetResize()
GadgetX = GadgetX( Gadget )
GadgetY = GadgetY( Gadget )
GadgetWidth = GadgetWidth( Gadget )
GadgetHeight = GadgetHeight( Gadget )
With Map( )
If FindMapElement(Map(), Str( Gadget ))
If GadgetX <> \GadgetX : \GadgetX = GadgetX : GadgetMove = #True : EndIf
If GadgetY <> \GadgetY : \GadgetY = GadgetY : GadgetMove = #True : EndIf
If GadgetWidth <> \GadgetWidth : \GadgetWidth = GadgetWidth : GadgetSize = #True : EndIf
If GadgetHeight <> \GadgetHeight : \GadgetHeight = GadgetHeight : GadgetSize = #True : EndIf
Else
AddMapElement(Map(), Str( Gadget ))
\GadgetX = GadgetX
\GadgetY = GadgetY
\GadgetWidth = GadgetWidth
\GadgetHeight = GadgetHeight
EndIf
EndWith
Else
If MapSize(Map())
Debug "MapSize "+MapSize(Map())
Debug "FreeMap"
ClearMap(Map())
FreeMap(Map())
EndIf
EndIf
If GadgetMove : PostEvent( #PB_Event_Gadget, Window, Gadget, #PB_EventType_Move ) : EndIf
If GadgetSize : PostEvent( #PB_Event_Gadget, Window, Gadget, #PB_EventType_Size ) : EndIf
EndProcedure
Procedure Resize(Gadget, X, Y, Width, Height)
If IsGadget(Gadget) : ResizeGadget(Gadget, X, Y, Width, Height) : EndIf : GadgetResize( Gadget )
EndProcedure
Macro ResizeGadget(Gadget, X, Y, Width, Height) : Resize(Gadget, X, Y, Width, Height) : EndMacro
Global Dim gadgetArray.i(0)
Procedure AddGadget(ThisGadget.i)
ReDim gadgetArray(ArraySize(gadgetArray())+1)
gadgetArray(ArraySize(gadgetArray())) = ThisGadget
EndProcedure
Procedure Free(ThisGadget.i)
GadgetResize( #PB_Any )
FreeArray(gadgetArray())
EndProcedure
Procedure GadgetEvents()
Define CurrentGadget.i
;Which Gadget
For iLoop = 0 To ArraySize(gadgetArray())
If EventGadget() = gadgetArray(iLoop)
CurrentGadget = iLoop
EndIf
Next iLoop
Select EventType()
Case #PB_EventType_MouseEnter
Debug "Mouse Entered Gadget " + Str(CurrentGadget)
ResizeGadget( EventGadget(), #PB_Ignore, #PB_Ignore, 155, #PB_Ignore)
Case #PB_EventType_MouseLeave
Debug "Mouse Left Gadget " + Str(CurrentGadget)
ResizeGadget( EventGadget(), #PB_Ignore, #PB_Ignore, 135, #PB_Ignore)
Case #PB_EventType_MouseMove
;Debug "MouseMove On Gadget " + Str(CurrentGadget)
Case #PB_EventType_MouseWheel
Debug "MouseWheel On Gadget " + Str(CurrentGadget)
Case #PB_EventType_LeftButtonDown
Debug "LeftButtonDown On Gadget " + Str(CurrentGadget)
Case #PB_EventType_LeftButtonUp
Debug "LeftButtonUp On Gadget " + Str(CurrentGadget)
Case #PB_EventType_LeftClick
Debug "LeftClick On Gadget " + Str(CurrentGadget)
Case #PB_EventType_LeftDoubleClick
Debug "LeftDoubleClick On Gadget " + Str(CurrentGadget)
Case #PB_EventType_RightButtonDown
Debug "RightButtonDown On Gadget " + Str(CurrentGadget)
Case #PB_EventType_RightButtonUp
Debug "RightButtonUp On Gadget " + Str(CurrentGadget)
Case #PB_EventType_RightClick
Debug "RightClick On Gadget " + Str(CurrentGadget)
Case #PB_EventType_RightDoubleClick
Debug "RightDoubleClick On Gadget " + Str(CurrentGadget)
Case #PB_EventType_MiddleButtonDown
Debug "MiddleButtonDown On Gadget " + Str(CurrentGadget)
Case #PB_EventType_MiddleButtonUp
Debug "MiddleButtonUp On Gadget " + Str(CurrentGadget)
Case #PB_EventType_Size
Debug "#PB_EventType_Size " + Str(CurrentGadget)
Case #PB_EventType_Move
Debug "#PB_EventType_Move " + Str(CurrentGadget)
EndSelect
EndProcedure
EndModule
Procedure CustomGadget(Gadget, X,Y,Width,Height, Flag = 0)
Protected ID
;Create The Canvas For The Gadget
ID = CanvasGadget(Gadget, X,Y,Width,Height, Flag)
If IsGadget(ID) : Gadget = ID : EndIf
;Bind This gadgets Events
BindGadgetEvent(Gadget, CustomGadget::@GadgetEvents())
;Add To The Custom Gadget Array
CustomGadget::AddGadget(Gadget)
CustomGadget::Resize( Gadget, X,Y,Width,Height )
ProcedureReturn Gadget
EndProcedure
Macro ResizeGadget(Gadget, X, Y, Width, Height) : CustomGadget::Resize(Gadget, X, Y, Width, Height) : EndMacro
; then a little programme To test so far:-
;
; winMain.pb
;
; Code:
; IncludeFile "CustomGadget.pbi"
Enumeration FormGadget
#btnRedraw
#CustomGadget1
#CustomGadget2
EndEnumeration
Global Window_0,CustomGadget3.i,CustomGadget4.i
Window_0 = OpenWindow(#PB_Any, 0, 0, 600, 400, "", #PB_Window_SystemMenu)
CustomGadget(#CustomGadget1,250, 40, 130, 80,0)
CustomGadget(#CustomGadget2,100, 40, 130, 80,0)
CustomGadget3 = CustomGadget(#PB_Any,100, 240, 130, 80,0)
CustomGadget4 = CustomGadget(#PB_Any,250, 240, 130, 80,#PB_Canvas_Keyboard | #PB_Canvas_DrawFocus)
ButtonGadget(#btnRedraw, 470, 340, 70, 30, "")
Repeat
Event = WaitWindowEvent()
Select Event
Case #PB_Event_CloseWindow
End
Case #PB_Event_Gadget
Select EventGadget()
Case #btnRedraw
ResizeGadget(CustomGadget3,110,160,100,#PB_Ignore)
EndSelect
EndSelect
ForEver