The following code shows the same arrangement in the form of gadgets in the same sequence as they were adding.
Do not add to purebasik like out of the box.
This would eliminate a lot of surprises.
Code: Select all
;-
; Для виндовс чтобы приклепить гаджеты на место
; надо вызывать процедуру в конце создания всех гаджетов
; надо вызвать после создания всех гаджетов
;
EnableExplicit
CompilerIf #PB_Compiler_OS = #PB_OS_Windows
Procedure GadgetsClipCallBack( GadgetID, lParam )
If GadgetID
Protected Gadget = GetProp_( GadgetID, "PB_ID" )
; If IsGadget( Gadget ) And GadgetID = GadgetID( Gadget )
; Debug "Gadget "+ Gadget +" - "+ GadgetID
; Else
; Debug "- Gadget - "+ GadgetID
; EndIf
If GetWindowLongPtr_( GadgetID, #GWL_STYLE ) & #WS_CLIPSIBLINGS = #False
If IsGadget( Gadget )
Select GadgetType( Gadget )
Case #PB_GadgetType_ComboBox
Protected Height = GadgetHeight( Gadget )
; ; Из-за бага когда устанавливаешь фоновый рисунок (например точки на кантейнер)
; Case #PB_GadgetType_Container
; SetGadgetColor( Gadget, #PB_Gadget_BackColor, GetSysColor_( #COLOR_BTNFACE ))
;
; ; Для панел гаджета темный фон убирать
; Case #PB_GadgetType_Panel
; If Not IsGadget( Gadget ) And (GetWindowLongPtr_(GadgetID, #GWL_EXSTYLE) & #WS_EX_TRANSPARENT) = #False
; SetWindowLongPtr_(GadgetID, #GWL_EXSTYLE, GetWindowLongPtr_(GadgetID, #GWL_EXSTYLE) | #WS_EX_TRANSPARENT)
; EndIf
; ; SetClassLongPtr_(GadgetID, #GCL_HBRBACKGROUND, GetStockObject_(#NULL_BRUSH))
EndSelect
EndIf
SetWindowLongPtr_( GadgetID, #GWL_STYLE, GetWindowLongPtr_( GadgetID, #GWL_STYLE ) | #WS_CLIPSIBLINGS | #WS_CLIPCHILDREN )
If Height
ResizeGadget( Gadget, #PB_Ignore, #PB_Ignore, #PB_Ignore, Height )
EndIf
SetWindowPos_( GadgetID, #GW_HWNDFIRST, 0,0,0,0, #SWP_NOMOVE|#SWP_NOSIZE )
EndIf
EndIf
ProcedureReturn GadgetID
EndProcedure
CompilerEndIf
Procedure ClipGadgets( WindowID )
CompilerIf #PB_Compiler_OS = #PB_OS_Windows
EnumChildWindows_( WindowID, @GadgetsClipCallBack(), 0 )
CompilerEndIf
EndProcedure
CompilerIf #PB_Compiler_IsMainFile
EnableExplicit
;{ - example
Procedure onCallback_Canvas()
Debug "onCallback_Canvas " + EventGadget()
EndProcedure
Procedure Gadgets( Window )
Protected I
UseGadgetList( WindowID(Window) )
CanvasGadget(1, 8, 8, 210, 30, #PB_Canvas_Border)
CanvasGadget(2, 16, 16, 180, 60, #PB_Canvas_Border)
CanvasGadget(3, 16, 16, 150, 90, #PB_Canvas_Border)
CanvasGadget(4, 16, 16, 120, 120, #PB_Canvas_Border)
CanvasGadget(5, 16, 16, 90, 150, #PB_Canvas_Border)
CanvasGadget(6, 16, 16, 60, 180, #PB_Canvas_Border)
CanvasGadget(7, 16, 16, 30, 210, #PB_Canvas_Border)
For i=1 To 7
If IsGadget(i) And StartDrawing(CanvasOutput(i))
Box(0,0,OutputWidth(),OutputHeight(), RGB(Random(255), Random(255), Random(255)))
StopDrawing()
BindGadgetEvent(i, @onCallback_Canvas())
EndIf
Next
EndProcedure
Procedure _Gadgets( Window )
Protected I
UseGadgetList( WindowID(Window) )
CanvasGadget(7, 8, 8, 210, 30, #PB_Canvas_Border)
CanvasGadget(6, 16, 16, 180, 60, #PB_Canvas_Border)
CanvasGadget(5, 16, 16, 150, 90, #PB_Canvas_Border)
CanvasGadget(4, 16, 16, 120, 120, #PB_Canvas_Border)
CanvasGadget(3, 16, 16, 90, 150, #PB_Canvas_Border)
CanvasGadget(2, 16, 16, 60, 180, #PB_Canvas_Border)
CanvasGadget(1, 16, 16, 30, 210, #PB_Canvas_Border)
For i=7 To 1 Step -1
If IsGadget(i) And StartDrawing(CanvasOutput(i))
Box(0,0,OutputWidth(),OutputHeight(), RGB(Random(255), Random(255), Random(255)))
StopDrawing()
BindGadgetEvent(i, @onCallback_Canvas())
EndIf
Next
EndProcedure
If OpenWindow(0, 0, 0, 252, 212, "Test")
Gadgets( 0 )
; SpinGadget (10, 20, 20, 100, 25, 0, 1000)
; SetGadgetState (10, 5)
; SetGadgetText(10, "5") ; set initial value
; ComboBoxGadget (100, 20, 35, 100, 155)
ClipGadgets( UseGadgetList(0) )
EndIf
SetWindowColor(0,RGB(255,255,0))
Repeat : Until WaitWindowEvent()=#PB_Event_CloseWindow
ClearDebugOutput()
If OpenWindow(0, 250, 0, 252, 212, "-Test")
_Gadgets( 0 )
ClipGadgets( UseGadgetList(0) )
EndIf
SetWindowColor(0,RGB(255,255,0))
Repeat : Until WaitWindowEvent()=#PB_Event_CloseWindow
End
;}
CompilerEndIf
; IDE Options = PureBasic 5.42 LTS (Windows - x86)
; CursorPosition = 173
; FirstLine = 152
; Folding = ------
; EnableUnicode
; EnableXP
; EnableCompileCount = 3
; EnableBuildCount = 0
; EnableExeConstant
; }