Pour un autre projet, j'ai cherché comment créer des thèmes mais le système d'onglet posait problème.
A force j'ai pu obtenir quelque chose de sympa et fonctionnel mais encore améliorable.
Je vous le partage avec plaisir et si vous souhaitez l'améliorer, n’hésitez pas à faire un retour.
Bonne journée
le code :
#include <ButtonConstants.au3>
#include <ComboConstants.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <GUIListBox.au3>
#include <ListViewConstants.au3>
#include <StaticConstants.au3>
#include <TabConstants.au3>
#include <WindowsConstants.au3>
#include <Array.au3>
#include <GuiTab.au3>
;~ coloration
Global $text_color, $TAB_bk_color, $TAB_B_select_color, $TAB_B_color, $TAB_bar_color, $gui_color, $taille, $police, $tab_text_color
Local $aTabPos, $Abouton
_couleur()
$debut = GUICtrlCreateDummy()
#Region ### START Koda GUI section ### Form=K:\TAO-MKV\TAO-MKV beta\guitab skin.kxf
$Form2 = GUICreate("guitab skin", 601, 544, 600, 149, BitOR($GUI_SS_DEFAULT_GUI,$WS_MAXIMIZEBOX,$WS_SIZEBOX,$WS_THICKFRAME,$WS_TABSTOP))
$Tab1 = GUICtrlCreateTab(40, 64, 497, 425)
GUICtrlSetResizing(-1, $GUI_DOCKAUTO)
_GUICtrlTab_SetBkColor($Form2, $Tab1, $TAB_bk_color)
$TabSheet1 = GUICtrlCreateTabItem("longueur affichable")
$Edit1 = GUICtrlCreateEdit("", 80, 112, 409, 313)
GUICtrlSetData(-1, "Edit1")
$TabSheet2 = GUICtrlCreateTabItem("TabSheet2")
$ListView1 = GUICtrlCreateListView("", 64, 112, 418, 326)
$TabSheet3 = GUICtrlCreateTabItem("TabSheet3")
$Group1 = GUICtrlCreateGroup("Group1", 72, 104, 209, 169)
$Button1 = GUICtrlCreateButton("Button1", 104, 144, 75, 25)
$Button2 = GUICtrlCreateButton("Button2", 104, 192, 75, 25)
GUICtrlCreateGroup("", -99, -99, 1, 1)
$Group2 = GUICtrlCreateGroup("Group2", 296, 248, 225, 217)
$Radio1 = GUICtrlCreateRadio("Radio1", 320, 296, 113, 17)
$Radio2 = GUICtrlCreateRadio("Radio2", 320, 328, 113, 17)
$Checkbox1 = GUICtrlCreateCheckbox("Checkbox1", 320, 360, 97, 17)
$Checkbox2 = GUICtrlCreateCheckbox("Checkbox2", 320, 392, 97, 17)
GUICtrlCreateGroup("", -99, -99, 1, 1)
$TabSheet4 = GUICtrlCreateTabItem("TabSheet4")
$Label1 = GUICtrlCreateLabel("Label1", 64, 112, 36, 17)
$Combo1 = GUICtrlCreateCombo("Combo1", 112, 112, 145, 25, BitOR($CBS_DROPDOWN,$CBS_AUTOHSCROLL))
$List1 = GUICtrlCreateList("", 136, 224, 273, 201)
GUICtrlCreateTabItem("")
GUISetState(@SW_HIDE)
#EndRegion ### END Koda GUI section ###
$fin = GUICtrlCreateDummy()
_GUICtrlTab_SetBarColor($Form2, $Tab1, $TAB_bk_color, $gui_color)
_GUICtrl_SetColor($Form2, $debut, $fin)
_Tabitem($Tab1)
GUIRegisterMsg($WM_COMMAND, "WM_COMMAND_GENERAL")
GUISetState(@SW_SHOW,$Form2)
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
EndSwitch
WEnd
; #CODE COULEUR# ================================================================================================================
; Fonction.......: lecture des codes couleurs
; ===============================================================================================================================
Func _couleur()
$text_color=0XFFFFFF ; couleur du texte
$TAB_bk_color=0x292929 ; couleur de fond des onglets
$TAB_B_select_color=0x292929 ; couleur bouton sélectionné
$TAB_B_color=0x373560 ; couleur bouton
$TAB_bar_color=-1 ; "-1" pour éffacer la barre après les onglets
$gui_color=0x151515 ; couleur de fond de l'interface
$taille=8 ; taille de la police
$police="Russo One" ; police
$tab_text_color=0XFFFFFF ; couleur du texte dans onglet
EndFunc ;==>_couleur
Func WM_COMMAND_GENERAL($hWnd, $Msg, $wParam, $lParam) ; changement d'onglet
#forceref $hWnd, $Msg, $lParam
;~ onglets
If _ArraySearch ($Abouton, BitAND($wParam, 0xFFFF)) = -1 Then
Return
Else
GUICtrlSetState ( $Tab1, $GUI_HIDE )
_GUICtrlTab_ActivateTab($Tab1,_ArraySearch ($Abouton, BitAND($wParam, 0xFFFF)))
GUICtrlSetBkColor($Abouton[0], $TAB_B_color)
GUICtrlSetBkColor($Abouton[1], $TAB_B_color)
GUICtrlSetBkColor($Abouton[2], $TAB_B_color)
GUICtrlSetBkColor($Abouton[3], $TAB_B_color)
Select
Case BitAND($wParam, 0xFFFF) = _WinAPI_GetDlgCtrlID(ControlGetHandle($hWnd, "", $Abouton[0]))
GUICtrlSetBkColor(BitAND($wParam, 0xFFFF), $TAB_B_select_color)
Case BitAND($wParam, 0xFFFF) = _WinAPI_GetDlgCtrlID(ControlGetHandle($hWnd, "", $Abouton[1]))
GUICtrlSetBkColor(BitAND($wParam, 0xFFFF), $TAB_B_select_color)
Case BitAND($wParam, 0xFFFF) = _WinAPI_GetDlgCtrlID(ControlGetHandle($hWnd, "", $Abouton[2]))
GUICtrlSetBkColor(BitAND($wParam, 0xFFFF), $TAB_B_select_color)
Case BitAND($wParam, 0xFFFF) = _WinAPI_GetDlgCtrlID(ControlGetHandle($hWnd, "", $Abouton[3]))
GUICtrlSetBkColor(BitAND($wParam, 0xFFFF), $TAB_B_select_color)
EndSelect
EndIf
EndFunc ;==>WM_COMMAND_GENERAL
; #FONCTION# ====================================================================================================================
; Fonction.......: créer une couleur au dessus de l'onglet selectionné
; ===============================================================================================================================
Func _Tabitem($hSysTab32)
GUICtrlSetColor($Abouton[_GUICtrlTab_GetCurSel ($hSysTab32)], $tab_text_color)
GUICtrlSetBkColor($Abouton[_GUICtrlTab_GetCurSel ($hSysTab32)], $TAB_B_select_color)
EndFunc ;==>_TabEvent
; #FONCTION# ====================================================================================================================
; Fonction.......: créer une couleur sur chaque onglet
; ===============================================================================================================================
Func _GUICtrlTab_SetBkColor($hWnd, $hSysTab32, $TAB_bk_color)
Global $aTabPos = ControlGetPos($hWnd, "", $hSysTab32)
Local $aTab_Rect = _GUICtrlTab_GetItemRect($hSysTab32, -1)
GUICtrlCreateLabel("", $aTabPos[0], $aTabPos[1] + $aTab_Rect[3] + 8, $aTabPos[2] , $aTabPos[3] - $aTab_Rect[3]-10)
GUICtrlSetState(-1, $GUI_DISABLE)
GUICtrlSetState($hSysTab32, $GUI_HIDE)
EndFunc ;==>_GUICtrlTab_SetBkColor
; #FONCTION# ====================================================================================================================
; Fonction.......: créer les boutons et la couleur
; ===============================================================================================================================
Func _GUICtrlTab_SetBarColor($hWnd, $hSysTab32, $TAB_bk_color, $gui_color)
Local $aTab_Rect, $longueur, $PosH
GUICtrlSetDefBkColor ( $TAB_bk_color)
Global $aTabPos = ControlGetPos($hWnd, "", $hSysTab32) ; récupère la position du TAB
$aTab_Rect = _GUICtrlTab_GetItemRect($hSysTab32, 0) ; récupère les positions des boutons d'onglet d'origine
$longueur = $aTab_Rect[2]-$aTab_Rect[0]
$Button3 = GUICtrlCreateButton(_GUICtrlTab_GetItemText($hSysTab32, 0), $aTabPos[0],$aTabPos[1]+5, $longueur, 20)
GUICtrlSetColor(-1, $text_color)
GUICtrlSetBkColor(-1, $TAB_B_color)
GUICtrlSetResizing ( -1,$GUI_DOCKAUTO)
$aTab_Rect = _GUICtrlTab_GetItemRect($hSysTab32, 0)
$PosH += $aTab_Rect[2]-$aTab_Rect[0]
; GUICtrlCreateButton( récupère le nom de l'onglet , position du TAB + longueur du bouton précédent , hauteur du TAB + 5 , longueur , hauteur)
$Button4 = GUICtrlCreateButton(_GUICtrlTab_GetItemText($hSysTab32, 1),$aTabPos[0] + $PosH, $aTabPos[1]+5, $longueur, 20)
GUICtrlSetColor(-1, $text_color)
GUICtrlSetBkColor(-1, $TAB_B_color)
GUICtrlSetResizing ( -1,$GUI_DOCKAUTO)
$aTab_Rect = _GUICtrlTab_GetItemRect($hSysTab32, 0)
$PosH += $aTab_Rect[2]-$aTab_Rect[0]
$Button5 = GUICtrlCreateButton(_GUICtrlTab_GetItemText($hSysTab32, 2),$aTabPos[0] + $PosH, $aTabPos[1]+5, $longueur, 20)
GUICtrlSetColor(-1, $text_color)
GUICtrlSetBkColor(-1, $TAB_B_color)
GUICtrlSetResizing ( -1,$GUI_DOCKAUTO)
$aTab_Rect = _GUICtrlTab_GetItemRect($hSysTab32, 0)
$PosH += $aTab_Rect[2]-$aTab_Rect[0]
$Button6 = GUICtrlCreateButton( _GUICtrlTab_GetItemText($hSysTab32, 3),$aTabPos[0] + $PosH, $aTabPos[1]+5, $longueur, 20)
GUICtrlSetColor(-1, $text_color)
GUICtrlSetBkColor(-1, $TAB_B_color)
GUICtrlSetResizing ( -1,$GUI_DOCKAUTO)
GUISetBkColor ($gui_color) ;couleur du fond
Dim $Abouton[5] = [$Button3, $Button4, $Button5, $Button6]
EndFunc ;==>_GUICtrlTab_SetBarColor
; #FONCTION# ====================================================================================================================
; Fonction.......: coloration des controles et réglage de la résolution
; ===============================================================================================================================
Func _GUICtrl_SetColor($hWnd, $debut, $fin)
GUICtrlSetDefBkColor ( $GUI_BKCOLOR_TRANSPARENT)
Dim $ID_bouton[30] = ["11", "12"]
Dim $ID_liste[10] = ["6", "23"]
For $iID = $debut + 1 To $fin - 1
If _ArraySearch($ID_bouton, $iID) > -1 Then
GUICtrlSetColor($iID, $text_color)
GUICtrlSetBkColor($iID, $TAB_B_color)
GUICtrlSetFont($iID,$taille, 100, 0, $police)
ElseIf _ArraySearch($ID_liste, $iID) > -1 Then
GUICtrlSetColor($iID, $text_color)
GUICtrlSetBkColor($iID, $TAB_B_color)
GUICtrlSetFont($iID,$taille, 100, 0, $police)
Else
DllCall("UxTheme.dll", "int", "SetWindowTheme", "hwnd", GUICtrlGetHandle($iID), "wstr", 0, "wstr", 0)
GUICtrlSetColor($iID, $tab_text_color)
GUICtrlSetBkColor($iID, $TAB_bk_color)
GUICtrlSetFont($iID,$taille, 100, 0, $police)
EndIf
Next
EndFunc ;==>_GUICtrl_SetColor
#include <ComboConstants.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <GUIListBox.au3>
#include <ListViewConstants.au3>
#include <StaticConstants.au3>
#include <TabConstants.au3>
#include <WindowsConstants.au3>
#include <Array.au3>
#include <GuiTab.au3>
;~ coloration
Global $text_color, $TAB_bk_color, $TAB_B_select_color, $TAB_B_color, $TAB_bar_color, $gui_color, $taille, $police, $tab_text_color
Local $aTabPos, $Abouton
_couleur()
$debut = GUICtrlCreateDummy()
#Region ### START Koda GUI section ### Form=K:\TAO-MKV\TAO-MKV beta\guitab skin.kxf
$Form2 = GUICreate("guitab skin", 601, 544, 600, 149, BitOR($GUI_SS_DEFAULT_GUI,$WS_MAXIMIZEBOX,$WS_SIZEBOX,$WS_THICKFRAME,$WS_TABSTOP))
$Tab1 = GUICtrlCreateTab(40, 64, 497, 425)
GUICtrlSetResizing(-1, $GUI_DOCKAUTO)
_GUICtrlTab_SetBkColor($Form2, $Tab1, $TAB_bk_color)
$TabSheet1 = GUICtrlCreateTabItem("longueur affichable")
$Edit1 = GUICtrlCreateEdit("", 80, 112, 409, 313)
GUICtrlSetData(-1, "Edit1")
$TabSheet2 = GUICtrlCreateTabItem("TabSheet2")
$ListView1 = GUICtrlCreateListView("", 64, 112, 418, 326)
$TabSheet3 = GUICtrlCreateTabItem("TabSheet3")
$Group1 = GUICtrlCreateGroup("Group1", 72, 104, 209, 169)
$Button1 = GUICtrlCreateButton("Button1", 104, 144, 75, 25)
$Button2 = GUICtrlCreateButton("Button2", 104, 192, 75, 25)
GUICtrlCreateGroup("", -99, -99, 1, 1)
$Group2 = GUICtrlCreateGroup("Group2", 296, 248, 225, 217)
$Radio1 = GUICtrlCreateRadio("Radio1", 320, 296, 113, 17)
$Radio2 = GUICtrlCreateRadio("Radio2", 320, 328, 113, 17)
$Checkbox1 = GUICtrlCreateCheckbox("Checkbox1", 320, 360, 97, 17)
$Checkbox2 = GUICtrlCreateCheckbox("Checkbox2", 320, 392, 97, 17)
GUICtrlCreateGroup("", -99, -99, 1, 1)
$TabSheet4 = GUICtrlCreateTabItem("TabSheet4")
$Label1 = GUICtrlCreateLabel("Label1", 64, 112, 36, 17)
$Combo1 = GUICtrlCreateCombo("Combo1", 112, 112, 145, 25, BitOR($CBS_DROPDOWN,$CBS_AUTOHSCROLL))
$List1 = GUICtrlCreateList("", 136, 224, 273, 201)
GUICtrlCreateTabItem("")
GUISetState(@SW_HIDE)
#EndRegion ### END Koda GUI section ###
$fin = GUICtrlCreateDummy()
_GUICtrlTab_SetBarColor($Form2, $Tab1, $TAB_bk_color, $gui_color)
_GUICtrl_SetColor($Form2, $debut, $fin)
_Tabitem($Tab1)
GUIRegisterMsg($WM_COMMAND, "WM_COMMAND_GENERAL")
GUISetState(@SW_SHOW,$Form2)
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
EndSwitch
WEnd
; #CODE COULEUR# ================================================================================================================
; Fonction.......: lecture des codes couleurs
; ===============================================================================================================================
Func _couleur()
$text_color=0XFFFFFF ; couleur du texte
$TAB_bk_color=0x292929 ; couleur de fond des onglets
$TAB_B_select_color=0x292929 ; couleur bouton sélectionné
$TAB_B_color=0x373560 ; couleur bouton
$TAB_bar_color=-1 ; "-1" pour éffacer la barre après les onglets
$gui_color=0x151515 ; couleur de fond de l'interface
$taille=8 ; taille de la police
$police="Russo One" ; police
$tab_text_color=0XFFFFFF ; couleur du texte dans onglet
EndFunc ;==>_couleur
Func WM_COMMAND_GENERAL($hWnd, $Msg, $wParam, $lParam) ; changement d'onglet
#forceref $hWnd, $Msg, $lParam
;~ onglets
If _ArraySearch ($Abouton, BitAND($wParam, 0xFFFF)) = -1 Then
Return
Else
GUICtrlSetState ( $Tab1, $GUI_HIDE )
_GUICtrlTab_ActivateTab($Tab1,_ArraySearch ($Abouton, BitAND($wParam, 0xFFFF)))
GUICtrlSetBkColor($Abouton[0], $TAB_B_color)
GUICtrlSetBkColor($Abouton[1], $TAB_B_color)
GUICtrlSetBkColor($Abouton[2], $TAB_B_color)
GUICtrlSetBkColor($Abouton[3], $TAB_B_color)
Select
Case BitAND($wParam, 0xFFFF) = _WinAPI_GetDlgCtrlID(ControlGetHandle($hWnd, "", $Abouton[0]))
GUICtrlSetBkColor(BitAND($wParam, 0xFFFF), $TAB_B_select_color)
Case BitAND($wParam, 0xFFFF) = _WinAPI_GetDlgCtrlID(ControlGetHandle($hWnd, "", $Abouton[1]))
GUICtrlSetBkColor(BitAND($wParam, 0xFFFF), $TAB_B_select_color)
Case BitAND($wParam, 0xFFFF) = _WinAPI_GetDlgCtrlID(ControlGetHandle($hWnd, "", $Abouton[2]))
GUICtrlSetBkColor(BitAND($wParam, 0xFFFF), $TAB_B_select_color)
Case BitAND($wParam, 0xFFFF) = _WinAPI_GetDlgCtrlID(ControlGetHandle($hWnd, "", $Abouton[3]))
GUICtrlSetBkColor(BitAND($wParam, 0xFFFF), $TAB_B_select_color)
EndSelect
EndIf
EndFunc ;==>WM_COMMAND_GENERAL
; #FONCTION# ====================================================================================================================
; Fonction.......: créer une couleur au dessus de l'onglet selectionné
; ===============================================================================================================================
Func _Tabitem($hSysTab32)
GUICtrlSetColor($Abouton[_GUICtrlTab_GetCurSel ($hSysTab32)], $tab_text_color)
GUICtrlSetBkColor($Abouton[_GUICtrlTab_GetCurSel ($hSysTab32)], $TAB_B_select_color)
EndFunc ;==>_TabEvent
; #FONCTION# ====================================================================================================================
; Fonction.......: créer une couleur sur chaque onglet
; ===============================================================================================================================
Func _GUICtrlTab_SetBkColor($hWnd, $hSysTab32, $TAB_bk_color)
Global $aTabPos = ControlGetPos($hWnd, "", $hSysTab32)
Local $aTab_Rect = _GUICtrlTab_GetItemRect($hSysTab32, -1)
GUICtrlCreateLabel("", $aTabPos[0], $aTabPos[1] + $aTab_Rect[3] + 8, $aTabPos[2] , $aTabPos[3] - $aTab_Rect[3]-10)
GUICtrlSetState(-1, $GUI_DISABLE)
GUICtrlSetState($hSysTab32, $GUI_HIDE)
EndFunc ;==>_GUICtrlTab_SetBkColor
; #FONCTION# ====================================================================================================================
; Fonction.......: créer les boutons et la couleur
; ===============================================================================================================================
Func _GUICtrlTab_SetBarColor($hWnd, $hSysTab32, $TAB_bk_color, $gui_color)
Local $aTab_Rect, $longueur, $PosH
GUICtrlSetDefBkColor ( $TAB_bk_color)
Global $aTabPos = ControlGetPos($hWnd, "", $hSysTab32) ; récupère la position du TAB
$aTab_Rect = _GUICtrlTab_GetItemRect($hSysTab32, 0) ; récupère les positions des boutons d'onglet d'origine
$longueur = $aTab_Rect[2]-$aTab_Rect[0]
$Button3 = GUICtrlCreateButton(_GUICtrlTab_GetItemText($hSysTab32, 0), $aTabPos[0],$aTabPos[1]+5, $longueur, 20)
GUICtrlSetColor(-1, $text_color)
GUICtrlSetBkColor(-1, $TAB_B_color)
GUICtrlSetResizing ( -1,$GUI_DOCKAUTO)
$aTab_Rect = _GUICtrlTab_GetItemRect($hSysTab32, 0)
$PosH += $aTab_Rect[2]-$aTab_Rect[0]
; GUICtrlCreateButton( récupère le nom de l'onglet , position du TAB + longueur du bouton précédent , hauteur du TAB + 5 , longueur , hauteur)
$Button4 = GUICtrlCreateButton(_GUICtrlTab_GetItemText($hSysTab32, 1),$aTabPos[0] + $PosH, $aTabPos[1]+5, $longueur, 20)
GUICtrlSetColor(-1, $text_color)
GUICtrlSetBkColor(-1, $TAB_B_color)
GUICtrlSetResizing ( -1,$GUI_DOCKAUTO)
$aTab_Rect = _GUICtrlTab_GetItemRect($hSysTab32, 0)
$PosH += $aTab_Rect[2]-$aTab_Rect[0]
$Button5 = GUICtrlCreateButton(_GUICtrlTab_GetItemText($hSysTab32, 2),$aTabPos[0] + $PosH, $aTabPos[1]+5, $longueur, 20)
GUICtrlSetColor(-1, $text_color)
GUICtrlSetBkColor(-1, $TAB_B_color)
GUICtrlSetResizing ( -1,$GUI_DOCKAUTO)
$aTab_Rect = _GUICtrlTab_GetItemRect($hSysTab32, 0)
$PosH += $aTab_Rect[2]-$aTab_Rect[0]
$Button6 = GUICtrlCreateButton( _GUICtrlTab_GetItemText($hSysTab32, 3),$aTabPos[0] + $PosH, $aTabPos[1]+5, $longueur, 20)
GUICtrlSetColor(-1, $text_color)
GUICtrlSetBkColor(-1, $TAB_B_color)
GUICtrlSetResizing ( -1,$GUI_DOCKAUTO)
GUISetBkColor ($gui_color) ;couleur du fond
Dim $Abouton[5] = [$Button3, $Button4, $Button5, $Button6]
EndFunc ;==>_GUICtrlTab_SetBarColor
; #FONCTION# ====================================================================================================================
; Fonction.......: coloration des controles et réglage de la résolution
; ===============================================================================================================================
Func _GUICtrl_SetColor($hWnd, $debut, $fin)
GUICtrlSetDefBkColor ( $GUI_BKCOLOR_TRANSPARENT)
Dim $ID_bouton[30] = ["11", "12"]
Dim $ID_liste[10] = ["6", "23"]
For $iID = $debut + 1 To $fin - 1
If _ArraySearch($ID_bouton, $iID) > -1 Then
GUICtrlSetColor($iID, $text_color)
GUICtrlSetBkColor($iID, $TAB_B_color)
GUICtrlSetFont($iID,$taille, 100, 0, $police)
ElseIf _ArraySearch($ID_liste, $iID) > -1 Then
GUICtrlSetColor($iID, $text_color)
GUICtrlSetBkColor($iID, $TAB_B_color)
GUICtrlSetFont($iID,$taille, 100, 0, $police)
Else
DllCall("UxTheme.dll", "int", "SetWindowTheme", "hwnd", GUICtrlGetHandle($iID), "wstr", 0, "wstr", 0)
GUICtrlSetColor($iID, $tab_text_color)
GUICtrlSetBkColor($iID, $TAB_bk_color)
GUICtrlSetFont($iID,$taille, 100, 0, $police)
EndIf
Next
EndFunc ;==>_GUICtrl_SetColor