Que celui qui est à l'origine du code me pardonne, mais j'ai oublié son pseudo.
Code : Tout sélectionner
Enumeration
#Window_0
EndEnumeration
Enumeration
#Panel_0
#Button_1
#Button_2
#CheckBox_3
EndEnumeration
Global Dim Panels.l(5)
Procedure WinProcTab(hWnd, Msg, wParam, lParam)
Protected Result.l = #PB_ProcessPureBasicEvents
Protected tch.TC_HITTESTINFO
Protected *pNMHDR.NMHDR
Protected DeltaX.l
Protected Tab.TC_ITEM
Protected *lpdis.DRAWITEMSTRUCT
Protected DrawFoc.l
Protected Itm.TC_ITEM
Protected TextBuffer.s
Protected dtFlags.l
Protected TextColor.l
Select Msg
Case #WM_DRAWITEM
TextBuffer = Space(255)
*lpdis = lParam
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)
DeltaX = 8
TextColor = GetSysColor_(#COLOR_BTNTEXT)
Case #ODS_SELECTED | #ODS_FOCUS
DrawFoc = #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 + 4
TextColor = GetSysColor_(#COLOR_BTNHIGHLIGHT)
SetBkMode_(*lpdis\hdc, #TRANSPARENT)
SetTextColor_(*lpdis\hdc, TextColor)
DrawText_(*lpdis\hdc, TextBuffer, Len(TextBuffer), *lpdis\rcItem, dtFlags)
*lpdis\rcItem\top - 4
*lpdis\rcItem\left - 5
DeltaX = 4
TextColor = GetSysColor_(#COLOR_BTNSHADOW)
Else
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 + 4
TextColor = GetSysColor_(#COLOR_BTNHIGHLIGHT)
SetBkMode_(*lpdis\hdc, #TRANSPARENT)
SetTextColor_(*lpdis\hdc, TextColor)
DrawText_(*lpdis\hdc, TextBuffer, Len(TextBuffer), *lpdis\rcItem, dtFlags)
*lpdis\rcItem\top - 4
*lpdis\rcItem\left - 5
DeltaX = 4
TextColor = GetSysColor_(#COLOR_BTNTEXT)
EndIf
EndSelect
If DrawFoc = #True
DrawFocusRect_(*lpdis\hdc, *lpdis\rcItem)
EndIf
*lpdis\rcItem\left + DeltaX
*lpdis\rcItem\top + 3
SetBkMode_(*lpdis\hdc, #TRANSPARENT)
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\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
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
Procedure OpenWindow_Window_0()
If OpenWindow(#Window_0, 450, 200, 400, 381, "Window_0", #PB_Window_SystemMenu|#PB_Window_SizeGadget|#PB_Window_MinimizeGadget|#PB_Window_TitleBar)
ButtonGadget(#Button_1, 20, 340, 110, 30, "Activer")
ButtonGadget(#Button_2, 270, 340, 110, 30, "Désactiver")
PanelGadget(#Panel_0, 10, 10, 380, 320)
SetWindowLong_(GadgetID(#Panel_0), #GWL_STYLE, GetWindowLong_(GadgetID(#Panel_0), #GWL_STYLE) | #TCS_OWNERDRAWFIXED)
AddGadgetItem(#Panel_0, -1, "Tab #1")
AddGadgetItem(#Panel_0, -1, "Tab #2")
AddGadgetItem(#Panel_0, -1, "Tab #3")
CheckBoxGadget(#CheckBox_3, 10, 45, 147, 15, "CheckBoxGadget")
AddGadgetItem(#Panel_0, -1, "Tab #4")
CloseGadgetList()
EndIf
SetWindowCallback(@WinProcTab())
Panels(2) = 1
EndProcedure
OpenWindow_Window_0()
Repeat
Select WaitWindowEvent()
Case #PB_Event_Gadget
Select EventGadget()
Case #Button_1
Panels(2) = 0
RedrawWindow_(GadgetID(#Panel_0), 0, 0, #RDW_ERASE|#RDW_INTERNALPAINT|#RDW_INVALIDATE)
Case #Button_2
Panels(2) = 1
RedrawWindow_(GadgetID(#Panel_0), 0, 0, #RDW_ERASE|#RDW_INTERNALPAINT|#RDW_INVALIDATE)
EndSelect
Case #PB_Event_CloseWindow
Select EventWindow()
Case #Window_0
CloseWindow(#Window_0)
Break
EndSelect
EndSelect
ForEver