Code : Tout sélectionner
Global Dim Panels.l(0)
Procedure winproc(hwnd,msg,wParam,lParam)
Protected result, tch.TC_HITTESTINFO, *pNMHDR.NMHDR, newtab
result=#PB_ProcessPureBasicEvents
Select msg
Case #WM_DRAWITEM
textbuffer.s=Space(255)
*lpdis.DRAWITEMSTRUCT=lParam
tab.TC_ITEM
Select *lpdis\CtlType
Case #ODT_TAB
Select *lpdis\itemState
Case #ODS_SELECTED
tab\Mask=#TCIF_TEXT
tab\pszText=@textbuffer
tab\cchTextMax=255
SendMessage_(*lpdis\hwndItem,#TCM_GETITEM ,*lpdis\itemID,@tab)
textcolor.l= #Black
Case #ODS_SELECTED | #ODS_FOCUS
drawfoc.l=#True
Case 0
tab\Mask=#TCIF_PARAM
SendMessage_(*lpdis\hwndItem,#TCM_GETITEM ,*lpdis\itemID,@tab)
If Panels(*lpdis\itemID)
tab\Mask=#TCIF_TEXT
tab\pszText=@textbuffer
tab\cchTextMax=255
SendMessage_(*lpdis\hwndItem,#TCM_GETITEM,*lpdis\itemID,@tab)
*lpdis\rcItem\left+5
*lpdis\rcItem\top+3
textcolor.l= #White
SetTextColor_(*lpdis\hdc, textcolor)
DrawText_(*lpdis\hdc, textbuffer, Len(textbuffer), *lpdis\rcItem, dtFlags)
textcolor.l= 5526100 ;RGB(84,82,84)
*lpdis\rcItem\top -3
*lpdis\rcItem\left-5
Else
tab\Mask=#TCIF_TEXT
tab\pszText=@textbuffer
tab\cchTextMax=255
SendMessage_(*lpdis\hwndItem,#TCM_GETITEM,*lpdis\itemID,@tab)
textcolor.l= #Black
EndIf
EndSelect
If drawfoc=#True
DrawFocusRect_(*lpdis\hdc, *lpdis\rcItem)
EndIf
SetBkMode_(*lpdis\hdc, #TRANSPARENT)
*lpdis\rcItem\left+4
*lpdis\rcItem\top+2
SetTextColor_(*lpdis\hdc, textcolor)
DrawText_(*lpdis\hdc, textbuffer, Len(textbuffer), *lpdis\rcItem, dtFlags)
ProcedureReturn 0
EndSelect
Case #WM_NOTIFY
*pNMHDR= lParam
Select *pNMHDR\code
Case #TCN_SELCHANGING
itm.TC_ITEM
itm\Mask=#TCIF_PARAM
If GetAsyncKeyState_(#VK_LBUTTON) & 32768
GetCursorPos_(tch\pt)
MapWindowPoints_(#Null,*pNMHDR\hwndFrom,tch\pt,1)
If Panels(SendMessage_(*pNMHDR\hwndFrom, #TCM_HITTEST,0, tch) )
result=1
EndIf
ElseIf GetAsyncKeyState_(#VK_LEFT)& 32768 ;
panel = SendMessage_(*pNMHDR\hwndFrom,#TCM_GETCURSEL,0,0) - 1
If panel > 0 And Panels(panel)
result=1
EndIf
ElseIf GetAsyncKeyState_(#VK_RIGHT)& 32768 ;Selection by right cursor.
panel = SendMessage_(*pNMHDR\hwndFrom,#TCM_GETCURSEL,0,0) + 1
ct = PeekL(@Panels()-8) -1
If panel < ct And Panels(panel)
result=1
EndIf
EndIf
EndSelect
EndSelect
ProcedureReturn result
EndProcedure
If OpenWindow(0, 100, 200, 390, 350, "", #PB_Window_MinimizeGadget)
If CreateGadgetList(WindowID(0))
For i=1 To 4
ButtonGadget(5+i,5+i*48,5,48,25,"D/E"+Str(i+1))
Next i
PanelGadget(30,5,45,380,300)
SetWindowLong_(GadgetID(30),#GWL_STYLE,GetWindowLong_(GadgetID(30),#GWL_STYLE) |#TCS_OWNERDRAWFIXED)
For a=1 To 5
ReDim Panels.l(a)
Panels.l(a)=#False ; Enable the new Panel
AddGadgetItem(30,a,"Panel " + Str(a))
StringGadget(a,a*15,a*10,100,20,"Panel " + Str(a))
Next
CloseGadgetList()
EndIf
SetWindowCallback(@winproc())
Repeat
EventID = WaitWindowEvent()
If EventID = #PB_Event_Gadget
eg=EventGadget()
Select eg
Case 6,7,8,9
Panels(eg-5)=1-Panels(eg-5)
RedrawWindow_(GadgetID(30),0,0,7)
ShowWindow_(GadgetID(30),#SW_SHOW)
EndSelect
EndIf
Until EventID = #PB_Event_CloseWindow
EndIf
End