If you specify the ID of the create gadget, an error occurs
Code: Select all
wg::Create(2,30,30,100,100)Code: Select all
wg::Create(-1,30,30,100,100)Code: Select all
DeclareModule wg
Declare Create(Gadget, X,Y,Width,Height, Title$="", Flag=0, Parent=-1)
EndDeclareModule
Module wg
Structure WindowStruct
Parent.i
Gadget.i
EndStructure
Procedure ParentCallBack()
Static OffsetX, OffsetY
Protected Gadget = EventGadget()
Protected *wg.WindowStruct = GetGadgetData(Gadget)
With *wg
Select EventType()
Case #PB_EventType_MouseMove
Debug GetGadgetAttribute(Gadget, #PB_Canvas_MouseX)
EndSelect
EndWith
EndProcedure
Procedure CallBack()
Protected Gadget = EventGadget()
Protected *wg.WindowStruct = GetGadgetData(Gadget)
; PostEvent(#PB_Event_Gadget, EventWindow(), *wg\Parent, EventType()) ; good uncomment to see
; PostEvent(#PB_Event_Gadget, EventWindow(), *wg\Parent, EventType(), *wg) ; good uncomment to see
PostEvent(#PB_Event_Gadget, EventWindow(), *wg\Parent, EventType(), Gadget ) ; Bug? uncomment to see
EndProcedure
Procedure Create(Gadget, X,Y,Width,Height, Title$="", Flag=0, Parent=-1)
Protected *wg.WindowStruct = AllocateStructure(WindowStruct)
With *wg
\Parent = CanvasGadget(#PB_Any, x,y, Width,Height)
\Gadget = CanvasGadget(Gadget, x+Width+10,y, Width,Height )
If IsGadget(Gadget) : \Gadget = Gadget : EndIf
SetGadgetData(\Parent, *wg)
SetGadgetData(\Gadget, *wg)
BindGadgetEvent(\Parent, @ParentCallBack())
BindGadgetEvent(\Gadget, @CallBack(), #PB_EventType_MouseMove)
ProcedureReturn \Gadget
EndWith
EndProcedure
EndModule
;- Example
CompilerIf #PB_Compiler_IsMainFile
Enumeration
#Window
EndEnumeration
Procedure OpenWindow_0()
OpenWindow(#Window, 0, 0, 600, 400, "WindowTitle",
#PB_Window_SizeGadget|#PB_Window_MinimizeGadget|#PB_Window_ScreenCentered)
wg::Create(2,30,30,100,100)
EndProcedure
OpenWindow_0()
Repeat
Select WaitWindowEvent()
Case #PB_Event_CloseWindow
End
EndSelect
ForEver
CompilerEndIfCode: Select all
DeclareModule wg
Declare Create(Gadget, X,Y,Width,Height, Title$="", Flag=0, Parent=-1)
EndDeclareModule
Module wg
Structure WindowStruct
Parent.i
ParentMouseX.i
ParentMouseY.i
Gadget.i
GadgetMouseX.i
GadgetMouseY.i
EndStructure
Procedure Draw(Canvas, X, Y)
StartDrawing(CanvasOutput(Canvas))
Box(X, Y, 2, 2, $999999)
StopDrawing()
EndProcedure
Enumeration #PB_EventType_FirstCustomValue
#CustomEventType_MouseMoveNotify
EndEnumeration
Procedure ParentCallBack()
Protected Gadget = EventGadget( )
Protected *wg.WindowStruct = GetGadgetData(Gadget)
Select Event()
Case #PB_Event_Gadget
Select EventType()
Case #PB_EventType_MouseMove
If Not IsGadget(EventData( ))
*wg\GadgetMouseX = GetGadgetAttribute(Gadget, #PB_Canvas_MouseX)
*wg\GadgetMouseY = GetGadgetAttribute(Gadget, #PB_Canvas_MouseY)
PostEvent(#PB_Event_Gadget, EventWindow(), *wg\Gadget, #PB_EventType_MouseMove, Gadget)
EndIf
Draw(Gadget, *wg\GadgetMouseX, *wg\GadgetMouseY)
EndSelect
EndSelect
EndProcedure
Procedure CallBack()
Protected Gadget = EventGadget()
Protected *wg.WindowStruct = GetGadgetData(Gadget)
Select Event()
Case #PB_Event_Gadget
Select EventType()
Case #PB_EventType_MouseMove
If Not IsGadget(EventData( ))
*wg\GadgetMouseX = GetGadgetAttribute(Gadget, #PB_Canvas_MouseX)
*wg\GadgetMouseY = GetGadgetAttribute(Gadget, #PB_Canvas_MouseY)
PostEvent(#PB_Event_Gadget, EventWindow(), *wg\Parent, #PB_EventType_MouseMove, Gadget)
EndIf
Draw(Gadget, *wg\GadgetMouseX, *wg\GadgetMouseY)
EndSelect
EndSelect
EndProcedure
Procedure Create(Gadget, X,Y,Width,Height, Title$="", Flag=0, Parent=-1)
Protected *wg.WindowStruct = AllocateStructure(WindowStruct)
With *wg
\Parent = CanvasGadget(#PB_Any, X,Y, Width,Height)
\Gadget = CanvasGadget(Gadget, X+Width+10,Y, Width,Height )
If IsGadget(Gadget) : \Gadget = Gadget : EndIf
SetGadgetData(\Parent, *wg)
SetGadgetData(\Gadget, *wg)
BindGadgetEvent(\Parent, @ParentCallBack())
BindGadgetEvent(\Gadget, @CallBack(), #PB_EventType_MouseMove)
ProcedureReturn \Gadget
EndWith
EndProcedure
EndModule
;- Example
CompilerIf #PB_Compiler_IsMainFile
Enumeration
#Window
EndEnumeration
Procedure OpenWindow_0()
OpenWindow(#Window, 0, 0, 600, 400, "WindowTitle",
#PB_Window_SizeGadget|#PB_Window_MinimizeGadget|#PB_Window_ScreenCentered)
wg::Create(2,30,30,100,100)
;wg::Create(#PB_Any,30,230,100,100)
EndProcedure
OpenWindow_0()
Repeat
Select WaitWindowEvent()
Case #PB_Event_CloseWindow
End
EndSelect
ForEver
CompilerEndIf

