I'm always on this #~@£§! of code
If someone understand why the exes embeded not appears
https://prov.reec.fr/Splitter_Kcc_3.zip
Code: Select all
; https://www.purebasic.fr/english/viewtopic.php?p=649199#p649199 [CHI]
; https://www.purebasic.fr/english/viewtopic.php?p=45782#p45782 [Danilo]
Structure Addon
Name.s
Id_Run.i
H_Addon.i
Id_Cont.i
H_Cont.i
EndStructure
Global Dim ArrayAddon.Addon(9)
Enumeration 100
#FenetreProgramme
#SplitterV
#SplitterH
EndEnumeration
ArrayAddon(1)\Name = "WindowBlue"
ArrayAddon(2)\Name = "WindowRed"
ArrayAddon(3)\Name = "WindowYellow"
ArrayAddon(4)\Name = "WindowBlue"
ArrayAddon(5)\Name = "WindowRed"
ArrayAddon(6)\Name = "WindowYellow"
ArrayAddon(7)\Name = "WindowBlue"
ArrayAddon(8)\Name = "WindowRed"
ArrayAddon(9)\Name = "WindowYellow"
Dim ArrayColor(3)
ArrayColor(1) = #Red
ArrayColor(2) = #Yellow
ArrayColor(3) = #Blue
Procedure WindowProc(hWnd,Msg,wParam,lParam)
result = #PB_ProcessPureBasicEvents
If Msg = #WM_SIZE
If hWnd = WindowID(#FenetreProgramme)
ResizeGadget(#SplitterV,0,0,lParam&$FFFF,(lParam>>16)&$FFFF)
ResizeGadget(#SplitterH,0,0,lParam&$FFFF,(lParam>>16)&$FFFF)
result = 0
Else
For c = 1 To 9
If hWnd = ArrayAddon(c)\H_Cont And ArrayAddon(c)\H_Addon
SetWindowPos_(ArrayAddon(c)\H_Addon, #HWND_TOP, 0, 0, GadgetWidth(ArrayAddon(c)\Id_Cont), GadgetHeight(ArrayAddon(c)\Id_Cont), #SWP_NOZORDER|#SWP_NOACTIVATE)
result = 0
EndIf
Next
EndIf
EndIf
ProcedureReturn result
EndProcedure
OpenWindow(#FenetreProgramme,0,0,800,600,"Split",#PB_Window_SystemMenu|#PB_Window_ScreenCentered|#PB_Window_SizeGadget|#PB_Window_MaximizeGadget)
SetWindowCallback(@WindowProc())
For Panneau = 1 To 3
PanelGadget(Panneau, 0, 0, WindowWidth(#FenetreProgramme), WindowHeight(#FenetreProgramme))
For Onglet = 1 To 3
MaxOnglets + 1
AddGadgetItem(Panneau, -1, ArrayAddon(MaxOnglets)\Name)
; Create containers
ArrayAddon(MaxOnglets)\Id_Cont = ContainerGadget(#PB_Any,0,0,WindowWidth(#FenetreProgramme),WindowHeight(#FenetreProgramme))
CloseGadgetList()
;SetGadgetColor(ArrayAddon(MaxOnglets)\Id_Cont, #PB_Gadget_BackColor, ArrayColor(Onglet))
ArrayAddon(MaxOnglets)\H_Cont = GadgetID(ArrayAddon(MaxOnglets)\Id_Cont)
SetWindowLongPtr_(ArrayAddon(MaxOnglets)\H_Cont, #GWL_STYLE, GetWindowLongPtr_(ArrayAddon(MaxOnglets)\H_Cont, #GWL_STYLE)|#WS_CLIPCHILDREN) ; <- important
; Insert executable
ArrayAddon(MaxOnglets)\Id_Run = RunProgram(GetPathPart(ProgramFilename()) + "Addons_V\" + ArrayAddon(MaxOnglets)\Name + ".exe","",GetPathPart(ProgramFilename()), #PB_Program_Open|#PB_Program_Hide)
Delay(10)
If ArrayAddon(MaxOnglets)\Id_Run
While ArrayAddon(MaxOnglets)\H_Addon = #Null
ArrayAddon(MaxOnglets)\H_Addon = FindWindow_(0, ArrayAddon(MaxOnglets)\Name)
WaitWindowEvent(1)
Wend
Delay(100)
SetParent_(ArrayAddon(MaxOnglets)\H_Addon, ArrayAddon(MaxOnglets)\H_Cont)
ShowWindow_(ArrayAddon(MaxOnglets)\H_Addon, #SW_NORMAL)
RedrawWindow_(ArrayAddon(MaxOnglets)\H_Cont, 0, 0, #RDW_INVALIDATE|#RDW_UPDATENOW)
EndIf
Next
CloseGadgetList()
Offset + 250
Next
; splitter1 Vertical
SplitterGadget(#SplitterV,0,0,WindowWidth(#FenetreProgramme),WindowHeight(#FenetreProgramme),1,2,#PB_Splitter_Vertical|#PB_Splitter_Separator)
SetGadgetState(#SplitterV,350) ; Set splitter width
; splitter2: splitterV and Panel bas
SplitterGadget(#SplitterH,0,0,WindowWidth(#FenetreProgramme),WindowHeight(#FenetreProgramme),#SplitterV,3,#PB_Splitter_Separator)
SetGadgetState(#SplitterH,300) ; Set splitter width
Repeat
Event = WaitWindowEvent()
Until Event = #PB_Event_CloseWindow
For i = 1 To 9
If IsProgram(ArrayAddon(i)\Id_Run)
KillProgram(ArrayAddon(i)\Id_Run)
CloseProgram(ArrayAddon(i)\Id_Run)
EndIf
Next 



