[R] TreeView et couleur de fond dans un Tab

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Répondre
Avatar du membre
Anthony
Niveau 7
Niveau 7
Messages : 315
Enregistré le : lun. 17 janv. 2011 14:08
Localisation : France
Status : Hors ligne

[R] TreeView et couleur de fond dans un Tab

#1

Message par Anthony »

Bonjour à tous,

Je cherche une solution de contournement pour ma TreeView ne soit pas cachée par la fonction...

Code : Tout sélectionner

Func _GUICtrlTab_SetBkColor($hWnd, $hSysTab32, $sBkColor)
J'ai éssayé avec un label et d'autres combinaisons, sans succès
Si une âme charitable passait par là je serai ravi d'apprendre de mes érreurs.
  • Code : Tout sélectionner

    #include <Array.au3>
    #include <ColorConstants.au3>
    #Include <EditConstants.au3>
    #include <File.au3>
    #include <FontConstants.au3>
    #include <GuiComboBox.au3>
    #include <GUIConstantsEx.au3>
    #include <GuiEdit.au3>
    #include <GuiRichEdit.au3>
    #include <GDIPlus.au3>
    #include <GuiTab.au3>
    #include <GUIConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <GuiTreeView.au3>
    #include <WinAPI.au3>
    
    __________0_Creation_De_La_GUI()
    __________1_Creation_Des_Tabs_Et_Redimensionnement_Automatique()
    __________2_Creation_Des_Fonction_Du_Tab_Configuration_Et_Redimensionnement_Automatique()
    __________4_Creation_Des_Fonction_Des_Tabs_Devis_Acompte_Facture_Et_Redimensionnement_Automatique()
    
    Func __________0_Creation_De_La_GUI()
       If IsDeclared( "Debug") And $Debug Then ConsoleWrite( "Line = "&@ScriptLineNumber &", "&	"Func " &@CRLF)
       Global $Title = "Bdd Gestion clientelle v1.0"
       Global $X = -1, $Y = -1, $W = 210, $H = 297, $Zoom = StringFormat("%.2f", 2.5)	; Dimentions de la GUI
    ;~    Global Const $hGui = GUICreate( $Title, $W*$Zoom+24, $H*$Zoom+74, $X, $Y, $WS_MINIMIZEBOX+$WS_SYSMENU+$WS_CAPTION, $WS_EX_ACCEPTFILES)	;$WS_OVERLAPPEDWINDOW, $WS_EX_ACCEPTFILES)
       Global Const $hGui = GUICreate( $Title, $W*$Zoom+24, $H*$Zoom+74, $X, $Y, $WS_OVERLAPPEDWINDOW, $WS_EX_ACCEPTFILES)
       GUISetFont( 10)
       GUISetStyle(BitOR($WS_MINIMIZEBOX, $WS_CAPTION, $WS_POPUPWINDOW, $WS_THICKFRAME), 0)
    ;~    GUISetStyle(BitOR($WS_MINIMIZEBOX, $WS_CAPTION, $WS_POPUPWINDOW, $WS_THICKFRAME), BitOR($WS_EX_CLIENTEDGE, ""))
    EndFunc
    
    
    Func __________1_Creation_Des_Tabs_Et_Redimensionnement_Automatique()
       If IsDeclared( "Debug") And $Debug Then ConsoleWrite( "Line = "&@ScriptLineNumber &", "&	"Func " &@CRLF)
    
       Local $X_Tab = 5, $Y_Tab = 5, $W_Tab = $W*$Zoom, $H_Tab = $H*$Zoom
    
       Global Const $id_Tab = GUICtrlCreateTab( $X_Tab, $Y_Tab, $W_Tab+16, $H_Tab+65), $h_Tab = GUICtrlGetHandle( $id_Tab)
       GUICtrlSetResizing( $id_Tab, $GUI_DOCKLEFT + $GUI_DOCKRIGHT + $GUI_DOCKTOP + $GUI_DOCKBOTTOM)
       GUICtrlSetFont( $id_Tab, 12)
    
       ; === Onglet n°1 à 4 ===
       Global Const 		$id_Tab_Sheet_0 = GUICtrlCreateTabItem("⚙ Configuration")
       Global Const 		$id_Tab_Sheet_1 = GUICtrlCreateTabItem("❔​ Devis")
       Global Const 		$id_Tab_Sheet_2 = GUICtrlCreateTabItem("🕗​ Acompte")
       Global Const 		$id_Tab_Sheet_3 = GUICtrlCreateTabItem("✔️​ Facture")
    
       GUICtrlCreateTabItem("")
    
       ; === Couleur Onglet n°0 ===
    	  $vRet = _Set_Tab_id( $id_Tab_Sheet_0, 1)	; Selctionne Tab 0
    			_GUICtrlTab_SetBkColor( $hGui, $id_Tab , 0xCCCCFF)
    			Global $id_Tab_Sheet_Color_0 = _WinAPI_GetDlgCtrlID(GUICtrlGetHandle(-1))	; Func _GetLastCtrlID()
    			GUICtrlSetResizing( -1, $GUI_DOCKLEFT + $GUI_DOCKRIGHT + $GUI_DOCKTOP + $GUI_DOCKBOTTOM)
    	  $vRet = _Set_Tab_id( $id_Tab_Sheet_0)
       ; === Couleur Onglet n°1 ===
    	  $vRet = _Set_Tab_id( $id_Tab_Sheet_1, 1)	; Selctionne Tab 1
    			_GUICtrlTab_SetBkColor( $hGui, $id_Tab , 0xCCCCFF)
    			Global $id_Tab_Sheet_Color_1 = _WinAPI_GetDlgCtrlID(GUICtrlGetHandle(-1))	; Func _GetLastCtrlID()
    			GUICtrlSetResizing( -1, $GUI_DOCKLEFT + $GUI_DOCKRIGHT + $GUI_DOCKTOP + $GUI_DOCKBOTTOM)
    	  $vRet = _Set_Tab_id( $id_Tab_Sheet_1)
       ; === Couleur Onglet n°2 ===
    	  $vRet = _Set_Tab_id( $id_Tab_Sheet_2, 1)	; Selctionne Tab 2
    			_GUICtrlTab_SetBkColor( $hGui, $id_Tab , 0xCCCCFF)
    			Global $id_Tab_Sheet_Color_2 = _WinAPI_GetDlgCtrlID(GUICtrlGetHandle(-1))	; Func _GetLastCtrlID()
    			GUICtrlSetResizing( -1, $GUI_DOCKLEFT + $GUI_DOCKRIGHT + $GUI_DOCKTOP + $GUI_DOCKBOTTOM)
    	  $vRet = _Set_Tab_id( $id_Tab_Sheet_2)
       ; === Couleur Onglet n°3 ===
    	  $vRet = _Set_Tab_id( $id_Tab_Sheet_3, 1)	; Selctionne Tab 3
    			_GUICtrlTab_SetBkColor( $hGui, $id_Tab , 0xCCCCFF)
    			Global $id_Tab_Sheet_Color_3 = _WinAPI_GetDlgCtrlID(GUICtrlGetHandle(-1))	; Func _GetLastCtrlID()
    			GUICtrlSetResizing( -1, $GUI_DOCKLEFT + $GUI_DOCKRIGHT + $GUI_DOCKTOP + $GUI_DOCKBOTTOM)
    	  $vRet = _Set_Tab_id( $id_Tab_Sheet_3)
    
    EndFunc
    
    
    Func __________2_Creation_Des_Fonction_Du_Tab_Configuration_Et_Redimensionnement_Automatique()
    
       $vRet = _Set_Tab_id( $id_Tab_Sheet_0, 1)	; === Tab n°0 ===	⚙ Configuration
    ;~    $vRet = _Set_Tab_id( $id_Tab_Sheet_1, 1)	; === Tab n°1 ===	❔​ Devis
    ;~    $vRet = _Set_Tab_id( $id_Tab_Sheet_2, 1)	; === Tab n°2 ===	🕗​ Acompte
    ;~    $vRet = _Set_Tab_id( $id_Tab_Sheet_3, 1)	; === Tab n°2 ===	✔️​ Facture
    
    	  Local $aPos	= ControlGetPos ( $hGui , "" , $id_Tab)
    ;~ 	  _ArrayDisplay( $aPos, "$aPos")
    	  Global $id_Nom_Entreprise									= GUICtrlCreateInput( "Nom de votre société ici", $aPos[0]+5, $aPos[1]+35, $aPos[2]-12-10, 20)
    	  Global $Nom_Entreprise									= GUICtrlRead( $id_Nom_Entreprise)
    	  GUICtrlSetTip( -1, "Modifiez ici le nom" &@CRLF& "de votre société")
    	  GUICtrlSetResizing( -1, BitOr( $GUI_DOCKLEFT, $GUI_DOCKRIGHT, $GUI_DOCKTOP, $GUI_DOCKSIZE))
    
    	  Global $Folder											= ".\BDD" & "\"
    	  Global $Folder_Configuration_GUI							= $Folder & "Configuration_Du_Logiciel.txt"
    	  Global $Folder_Entreprise									= $Nom_Entreprise & "\"
    
    ;~ Global $Folder_Entreprise_Configuration_TXT	= $Folder_Configuration & "Configuration.txt"
    
    	  Global $Tree_0											= _GUICtrlTab_GetItemText( $id_Tab, 0) & "\"	; ⚙ Configuration
    	  Global $Tree_1											= _GUICtrlTab_GetItemText( $id_Tab, 1) & "\"	; ❔​ Devis
    	  Global $Tree_2											= _GUICtrlTab_GetItemText( $id_Tab, 2) & "\"	; 🕗​ Acompte
    	  Global $Tree_3											= _GUICtrlTab_GetItemText( $id_Tab, 3) & "\"	; ✔️​ Facture
    
    	  #Region TREEVIEW ONE
    	  Local $aPos												= ControlGetPos ( $hGui , "" , $Nom_Entreprise)
    	  Global $idTreeView_Folder									= GUICtrlCreateTreeView( $aPos[0], $aPos[1]+35, $aPos[2]-12, 140)
    	  Global $hTreeView_Folder									= ControlGetHandle( $hGui, "", $idTreeView_Folder)
    	  GUICtrlSetFont( -1, 10)
    	  GUICtrlSetTip( -1, '#Region TREEVIEW ONE')
    
    		 Global $idRoot												= GUICtrlCreateTreeViewItem( $Folder							, $idTreeView_Folder)					; ".\BDD" & "\"
    
    		 Global $idRoot_Tree_Entreprise								= GUICtrlCreateTreeViewItem( $Folder_Entreprise					, $idRoot)								; $Nom_Entreprise & "\"
    		 Global $idRoot_Tree_Dossier_Clients_Configuration			= GUICtrlCreateTreeViewItem( $Tree_0							, $idRoot_Tree_Entreprise)				; ⚙ Configuration
    		 Global $idRoot_Tree_Dossier_Clients_Devis					= GUICtrlCreateTreeViewItem( $Tree_1							, $idRoot_Tree_Entreprise)				; ❔​ Devis
    		 Global $idRoot_Tree_Dossier_Clients_Acompte				= GUICtrlCreateTreeViewItem( $Tree_2							, $idRoot_Tree_Entreprise)				; 🕗​ Acompte
    		 Global $idRoot_Tree_Dossier_Clients_Factures				= GUICtrlCreateTreeViewItem( $Tree_3							, $idRoot_Tree_Entreprise)				; ✔️​ Facture
    		 Global $idRoot_Tree_Configuration_GUI						= GUICtrlCreateTreeViewItem( $Folder_Configuration_GUI			, $idTreeView_Folder)					; $Folder & "Configuration_Du_Logiciel.txt"
    
    		 Local $aPos												= ControlGetPos ( $hGui , "" , $idTreeView_Folder)
    		 Global $id_Folder											= GUICtrlCreateInput( "", $aPos[0], $aPos[1]+135, $aPos[2]-12-10, 20)
    
    		 Global $Folder_Entreprise_s								= $Folder &	ControlTreeView( $hGui, "", $hTreeView_Folder, "GetText", "#0|#0")	;
    		 Global $Folder_Entreprise_Dossiers_Clients_Configuration	= $Folder & $Folder_Entreprise & ControlTreeView( $hGui, "", $hTreeView_Folder, "GetText", "#0|#0|#0")	; ⚙ Configuration
    		 Global $Folder_Entreprise_Dossiers_Clients_Devis			= $Folder & $Folder_Entreprise & ControlTreeView( $hGui, "", $hTreeView_Folder, "GetText", "#0|#0|#1")	; ❔​ Devis
    		 Global $Folder_Entreprise_Dossiers_Clients_Acompte			= $Folder & $Folder_Entreprise & ControlTreeView( $hGui, "", $hTreeView_Folder, "GetText", "#0|#0|#2")	; 🕗​ Acompte
    		 Global $Folder_Entreprise_Dossiers_Clients_Factures		= $Folder & $Folder_Entreprise & ControlTreeView( $hGui, "", $hTreeView_Folder, "GetText", "#0|#0|#3")	; ✔️​ Facture
    
    		 _GUICtrlTreeView_Expand( $idTreeView_Folder)
    		 #EndRegion TREEVIEW ONE
    
    	  __________3_Mise_A_Jour_De_La_TreeView_Configuration_De_L_Interface()
    
    EndFunc
    Func __________3_Mise_A_Jour_De_La_TreeView_Configuration_De_L_Interface()
    
       $Var1	= ControlTreeView( $hGui, "", $hTreeView_Folder, "GetText", "#0|#0")
       $Var2	= GUICtrlRead( $id_Nom_Entreprise) & "\"
    
       If $Var1 <> $Var2 Then
    
    	  GUICtrlSetData( $idRoot_Tree_Entreprise, GUICtrlRead( $id_Nom_Entreprise) & "\")
    
    	  Global $Folder_Entreprise									= ControlTreeView( $hGui, "", $hTreeView_Folder, "GetText", "#0|#0")	; $Nom_Entreprise & "\"
    	  Global $Folder_Entreprise_s								= $Folder &	ControlTreeView( $hGui, "", $hTreeView_Folder, "GetText", "#0|#0")	;
    	  Global $Folder_Entreprise_Dossiers_Clients_Configuration	= $Folder & $Folder_Entreprise & ControlTreeView( $hGui, "", $hTreeView_Folder, "GetText", "#0|#0|#0")	; ⚙ Configuration
    	  Global $Folder_Entreprise_Dossiers_Clients_Devis			= $Folder & $Folder_Entreprise & ControlTreeView( $hGui, "", $hTreeView_Folder, "GetText", "#0|#0|#1")	; ❔​ Devis
    	  Global $Folder_Entreprise_Dossiers_Clients_Acompte			= $Folder & $Folder_Entreprise & ControlTreeView( $hGui, "", $hTreeView_Folder, "GetText", "#0|#0|#2")	; 🕗​ Acompte
    	  Global $Folder_Entreprise_Dossiers_Clients_Factures		= $Folder & $Folder_Entreprise & ControlTreeView( $hGui, "", $hTreeView_Folder, "GetText", "#0|#0|#3")	; ✔️​ Facture
       EndIf
    
    EndFunc
    
    
    Func __________4_Creation_Des_Fonction_Des_Tabs_Devis_Acompte_Facture_Et_Redimensionnement_Automatique()
       If IsDeclared( "Debug") And $Debug Then ConsoleWrite( "Line = "&@ScriptLineNumber &", "&	"Func " &@CRLF)
    
       ; === Onglet n°1 ===
    	  $vRet = _Set_Tab_id( $id_Tab_Sheet_1, 1)	; === Tab n°1 ===	❔​ Devis
    			Global $id_ComboBox_Tab_1 = GUICtrlCreateCombo("", 38, 36, $W*$Zoom-22*3 - 40, 20, $CBS_DROPDOWNLIST)
    			GUICtrlSetTip( -1, "Liste déroulante des " & _GUICtrlTab_GetItemText( $id_Tab, 1) & " classée par" &@CRLF& "numéros, date, Noms et Prénoms")
    			GUICtrlSetResizing( -1, BitOr( $GUI_DOCKLEFT, $GUI_DOCKRIGHT, $GUI_DOCKTOP))
       ; === Onglet n°2 ===
    	  $vRet = _Set_Tab_id( $id_Tab_Sheet_2, 1)	; === Tab n°2 ===	🕗​ Acompte
    			Global $id_ComboBox_Tab_2 = GUICtrlCreateCombo("", 38, 36, $W*$Zoom-22*3 - 40, 20, $CBS_DROPDOWNLIST)
    			GUICtrlSetTip( -1, "Liste déroulante des " & _GUICtrlTab_GetItemText( $id_Tab, 2) & " classée par" &@CRLF& "numéros, date, Noms et Prénoms")
    			GUICtrlSetResizing( -1, BitOr( $GUI_DOCKLEFT, $GUI_DOCKRIGHT, $GUI_DOCKTOP))
       ; === Onglet n°3 ===
    	  $vRet = _Set_Tab_id( $id_Tab_Sheet_3, 1)	; === Tab n°2 ===	✔️​ Facture
    			Global $id_ComboBox_Tab_3 = GUICtrlCreateCombo("", 38, 36, $W*$Zoom-22*3 - 40, 20, $CBS_DROPDOWNLIST)
    			GUICtrlSetTip( -1, "Liste déroulante des " & _GUICtrlTab_GetItemText( $id_Tab, 3) & " classée par" &@CRLF& "numéros, date, Noms et Prénoms")
    			GUICtrlSetResizing( -1, BitOr( $GUI_DOCKLEFT, $GUI_DOCKRIGHT, $GUI_DOCKTOP))
    
    EndFunc
    
    GUISetState(@SW_SHOW)
    
    _Set_Tab_id( $id_Tab_Sheet_0)
    
    While True
       $msg = GUIGetMsg()
       Switch $msg
    
    		 Case GUICtrlRead( $id_Nom_Entreprise)
    			   __________3_Mise_A_Jour_De_La_TreeView_Configuration_De_L_Interface()
    
    		 Case $idRoot
    			   ControlSetText( $hGui, "", $id_Folder, $Folder)
    		 Case $idRoot_Tree_Entreprise
    			   ControlSetText( $hGui, "", $id_Folder, $Folder_Entreprise_s)
    		 Case $idRoot_Tree_Dossier_Clients_Configuration
    			   ControlSetText( $hGui, "", $id_Folder, $Folder_Entreprise_Dossiers_Clients_Configuration)
    		 Case $idRoot_Tree_Dossier_Clients_Devis
    			   ControlSetText( $hGui, "", $id_Folder, $Folder_Entreprise_Dossiers_Clients_Devis)
    		 Case $idRoot_Tree_Dossier_Clients_Acompte
    			   ControlSetText( $hGui, "", $id_Folder, $Folder_Entreprise_Dossiers_Clients_Acompte)
    		 Case $idRoot_Tree_Dossier_Clients_Factures
    			   ControlSetText( $hGui, "", $id_Folder, $Folder_Entreprise_Dossiers_Clients_Factures)
    		 Case $idRoot_Tree_Configuration_GUI
    			   ControlSetText( $hGui, "", $id_Folder, $Folder_Configuration_GUI)
    
    		 Case $GUI_EVENT_CLOSE
    			   _Exit()
       EndSwitch
    
    WEnd
    
    Func _Set_Tab_id( $_idTabSheet = "", $_MemTab = "")
       If IsDeclared( "Debug") And $Debug Then ConsoleWrite( "Line = "&@ScriptLineNumber &", "&	"Func _Set_Tab_id()" &@CRLF)
    
       If Not IsDeclared( "_MemTab") Then Global $_MemTab
       If $_MemTab = "" Then			; NULL = ""
    	  GUISwitch($hGui, $_idTabSheet)
    	  GUICtrlCreateTabItem("")
       ElseIf $_MemTab <> "" Then		; Not NULL <> ""
    	  GUISwitch($hGui, $_idTabSheet)
    	  $_MemTab = "Open"
       ElseIf $_MemTab = "Open" Then	; Fermeture
    	  GUICtrlCreateTabItem("")
    	  $_MemTab = ""
       EndIf
    
       Return _GUICtrlTab_GetCurSel( $id_Tab) &","& _GUICtrlTab_GetItemText( $id_Tab, _GUICtrlTab_GetCurSel( $id_Tab))
    EndFunc
    
    Func _GUICtrlTab_SetBkColor($hWnd, $hSysTab32, $sBkColor)
       If IsDeclared( "Debug") And $Debug Then ConsoleWrite( "Line = "&@ScriptLineNumber &", "&	"Func _GUICtrlTab_SetBkColor()" &@CRLF)
    
       Local $aTabPos = ControlGetPos($hWnd, "", $hSysTab32)
       Local $aTab_Rect = _GUICtrlTab_GetItemRect($hSysTab32, -1)
       GUICtrlCreateLabel("", $aTabPos[0]+2, $aTabPos[1]+$aTab_Rect[3]+4, $aTabPos[2]-6, $aTabPos[3]-$aTab_Rect[3]-7)
       GUICtrlSetBkColor( -1, $sBkColor)
       GUICtrlSetState( -1, $GUI_DISABLE)
    EndFunc
    
    Func _Exit()
       If IsDeclared( "Debug") And $Debug Then ConsoleWrite( "Line = "&@ScriptLineNumber &", "&	"Func _Exit()" &@CRLF)
    ;~    _Fonction_1_Enregistrement_Du_Fichier_De_Configuration()
       _GDIPlus_Shutdown()
       ConsoleWrite( "Line = "&@ScriptLineNumber &", "&	"Func _Exit()" &@CRLF)
       GUIDelete( $hGUI)
       Exit
    EndFunc
    
Modifié en dernier par Anthony le jeu. 27 févr. 2025 06:25, modifié 1 fois.
J'ai été diagnostiqué pour trouble de la concentration, soyez indulgent
Merci à tous pour votre aide.
UDF: GuiStatusBarEx --- Une StatusBar complète, rapide et simple
Code: Code-Texte fusion --- Une GUI pour fusionner des GCodes pour CNC 3018
Avatar du membre
Nine
AutoIt MVPs (MVP)
AutoIt MVPs (MVP)
Messages : 133
Enregistré le : ven. 17 avr. 2020 01:23
Localisation : Montréal, Québec
Status : Hors ligne

Re: [..] TreeView et couleur de fond dans un Tab

#2

Message par Nine »

Ça aurait été super sympa de produire un snippet le plus simple possible pour démontrer ton problème et non pas d'avoir ton full script. Je sais pas si tu peux comprendre l'effort que ça prend pour comprendre le script de quelqu'un d'autre sans réellement savoir les tenants et aboutissants.

Bon, assez de mes états d'âmes. Avec beaucoup de temps, j'ai compris ce que tu voulais dire. Il y a en effet un problème avec les tab et les treeview. Je n'ai malheureusement pas de donnes nouvelles. Pour le moment, je n'ai pas de solutions magiques. Voici le code qui marche :

Code : Tout sélectionner

#include <GUIConstantsEx.au3>
#include <GuiTreeView.au3>
#include <WindowsConstants.au3>
#include <GuiTab.au3>

Example()

Func Example()
  Local $hGUI = GUICreate("TreeView", 400, 300)
  Local $idTab = GUICtrlCreateTab(10, 10, 280, 180)

  Local $TabItem_1 = GUICtrlCreateTabItem("TabItem 1")
  SetTabColor($hGUI, $idTab, 0xDDAA11)

  Local $iStyle = BitOR($TVS_EDITLABELS, $TVS_HASBUTTONS, $TVS_HASLINES, $TVS_LINESATROOT, $TVS_DISABLEDRAGDROP, $TVS_SHOWSELALWAYS)
  Local $hTreeView = _GUICtrlTreeView_Create($hGUI, 15, 35, 150, 150, $iStyle, $WS_EX_CLIENTEDGE)
  _GUICtrlTreeView_BeginUpdate($hTreeView)
  Local $hItem
  For $x = 0 To 1
    $hItem = _GUICtrlTreeView_Add($hTreeView, 0, StringFormat("[%02d] New Item", $x))
    For $y = 0 To 3
      _GUICtrlTreeView_AddChild($hTreeView, $hItem, StringFormat("[%02d] New Child", $y))
    Next
  Next
  _GUICtrlTreeView_EndUpdate($hTreeView)

  GUICtrlCreateTabItem("")
  GUISetState(@SW_SHOW)

  Do
  Until GUIGetMsg() = $GUI_EVENT_CLOSE
EndFunc   ;==>Example

Func SetTabColor($hWnd, $idTab, $nColor)
  Local $aPos = ControlGetPos($hWnd, "", $idTab)
  Local $aRect = _GUICtrlTab_GetItemRect($idTab, -1)
  GUICtrlCreateLabel("", $aPos[0] + 2, $aPos[1] + $aRect[3] + 4, $aPos[2] - 4, $aPos[3] - $aRect[3] - 6)
  GUICtrlSetBkColor(-1, $nColor)
  GUICtrlSetState(-1, $GUI_DISABLE)
EndFunc   ;==>SetTabColor
Avatar du membre
Anthony
Niveau 7
Niveau 7
Messages : 315
Enregistré le : lun. 17 janv. 2011 14:08
Localisation : France
Status : Hors ligne

Re: [..] TreeView et couleur de fond dans un Tab

#3

Message par Anthony »

Bonjour Nine,

Je pensais que mettre le script complet pouvais permettre de visionner facilement le soucis de TreeView, je me suis trompé et m'en esccuse.
J'ai testé et reussi à intégre la nouvelle TreeView à l'identique grace à ton exemple qui fonctionne correctement.
Même si l'UDF <GuiTreeView.au3> ne comporte pas de fonction aussi simple que :
_GUICtrlTreeView_SetFont car la police est trop petite pous mes :shock:
Le redimentionnement avec GUICtrlSetResizing, :? non plus
Je n'ai pas trouvé mon érreur pour, quand l'on créé tous les Tabs (Nécessaire pour la suite de ma GUI) à la suite et qu'on revient sur le premier Tab
$vRet = _Set_Tab_id( $TabItem_1, 1) pour créér le TreeView et bien celui-ci reste par dessus les trois Tab's, étrange.

Merci à toi.
  • Code : Tout sélectionner

    #include <GUIConstantsEx.au3>
    #include <GuiTreeView.au3>
    #include <WindowsConstants.au3>
    #include <GuiTab.au3>
    
    Example()
    
    Func Example()
      Global $hGUI = GUICreate("TreeView", 400, 300)
      Global $idTab = GUICtrlCreateTab(10, 10, 280, 180)
    
      Local $TabItem_1 = GUICtrlCreateTabItem("TabItem 1")
      SetTabColor($hGUI, $idTab, 0xDDAA11)
    
      Local $TabItem_2 = GUICtrlCreateTabItem("TabItem 2")
      SetTabColor($hGUI, $idTab, 0x11AADD)
    
      Local $TabItem_3 = GUICtrlCreateTabItem("TabItem 3")
      SetTabColor($hGUI, $idTab, 0xAA11DD)
    
    $vRet = _Set_Tab_id( $TabItem_1, 1)	; === Tab n°1 ===
    
      Local $iStyle = BitOR($TVS_EDITLABELS, $TVS_HASBUTTONS, $TVS_HASLINES, $TVS_LINESATROOT, $TVS_DISABLEDRAGDROP, $TVS_SHOWSELALWAYS)
      Local $hTreeView = _GUICtrlTreeView_Create($hGUI, 15, 35, 150, 150, $iStyle, $WS_EX_CLIENTEDGE)
      _GUICtrlTreeView_BeginUpdate($hTreeView)
      Local $hItem
      For $x = 0 To 1
        $hItem = _GUICtrlTreeView_Add($hTreeView, 0, StringFormat("[%02d] New Item", $x))
        For $y = 0 To 3
          _GUICtrlTreeView_AddChild($hTreeView, $hItem, StringFormat("[%02d] New Child", $y))
        Next
      Next
      _GUICtrlTreeView_EndUpdate($hTreeView)
    
      GUICtrlCreateTabItem("")
      GUISetState(@SW_SHOW)
    
      Do
      Until GUIGetMsg() = $GUI_EVENT_CLOSE
    EndFunc   ;==>Example
    
    Func SetTabColor($hWnd, $idTab, $nColor)
      Local $aPos = ControlGetPos($hWnd, "", $idTab)
      Local $aRect = _GUICtrlTab_GetItemRect($idTab, -1)
      GUICtrlCreateLabel("", $aPos[0] + 2, $aPos[1] + $aRect[3] + 4, $aPos[2] - 4, $aPos[3] - $aRect[3] - 6)
      GUICtrlSetBkColor(-1, $nColor)
      GUICtrlSetState(-1, $GUI_DISABLE)
    EndFunc   ;==>SetTabColor
    
    Func _Set_Tab_id( $_idTabSheet = "", $_MemTab = "")
       If IsDeclared( "Debug") And $Debug Then ConsoleWrite( "Line = "&@ScriptLineNumber &", "&	"Func _Set_Tab_id()" &@CRLF)
    
       If Not IsDeclared( "_MemTab") Then Global $_MemTab
       If $_MemTab = "" Then			; NULL = ""
    	  GUISwitch($hGUI, $_idTabSheet)
    	  GUICtrlCreateTabItem("")
       ElseIf $_MemTab <> "" Then		; Not NULL <> ""
    	  GUISwitch($hGUI, $_idTabSheet)
    	  $_MemTab = "Open"
       ElseIf $_MemTab = "Open" Then	; Fermeture
    	  GUICtrlCreateTabItem("")
    	  $_MemTab = ""
       EndIf
    
       Return _GUICtrlTab_GetCurSel( $idTab) &","& _GUICtrlTab_GetItemText( $idTab, _GUICtrlTab_GetCurSel( $idTab))
    EndFunc
    
J'ai été diagnostiqué pour trouble de la concentration, soyez indulgent
Merci à tous pour votre aide.
UDF: GuiStatusBarEx --- Une StatusBar complète, rapide et simple
Code: Code-Texte fusion --- Une GUI pour fusionner des GCodes pour CNC 3018
Avatar du membre
Nine
AutoIt MVPs (MVP)
AutoIt MVPs (MVP)
Messages : 133
Enregistré le : ven. 17 avr. 2020 01:23
Localisation : Montréal, Québec
Status : Hors ligne

Re: [..] TreeView et couleur de fond dans un Tab

#4

Message par Nine »

Pas du tout étrange. Il faut créer les contrôles à l'intérieur de chaque Tab. Si l'on veut un contrôle partagé entre tous les Tabs alors il faut le créer à l'extérieur comme tu as fait.

Edit : Après réflexions, je me suis souvenu d'un problème similaire avec les ListView. J'ai donc fouillé dans mes codes, et j'ai testé l'approche OwnerDraw. Et oh surprises, ça fonctionne, c'est un peu plus compliqué, mais là tu auras le choix...

Code : Tout sélectionner

#include <WinAPIGdiDC.au3>
#include <GuiConstants.au3>
#include <WindowsConstants.au3>
#include <GuiTab.au3>
#include <WinAPIGdiDC.au3>
#include <GuiListView.au3>

Opt("MustDeclareVars", True)

Global Const $ODT_TAB = 101
Global Const $ODA_DRAWENTIRE = 1
Global Const $tagDRAWITEMSTRUCT = "uint cType;uint cID;uint itmID;uint itmAction;uint itmState;hwnd hItm;hwnd hDC;dword itmRect[4];dword itmData"

Main()

Func Main()
  Local $hGUI = GUICreate("Draw Tabs", 300, 200)
  Local $idTab = GUICtrlCreateTab(10, 10, 280, 180, $TCS_OWNERDRAWFIXED)

  Local $TabItem_1 = GUICtrlCreateTabItem("TabItem 1")
  CreateTreeView()

  Local $TabItem_2 = GUICtrlCreateTabItem("TabItem 2")
  CreateTreeView()

  GUICtrlCreateTabItem("")

  GUISetState()
  GUIRegisterMsg($WM_DRAWITEM, WM_DRAWITEM)

  _GUICtrlTab_SetCurSel($idTab, 1)  ; to force draw of each tab
  _GUICtrlTab_SetCurSel($idTab, 0)

  Do
  Until GUIGetMsg() = $GUI_EVENT_CLOSE
EndFunc   ;==>Main

Func WM_DRAWITEM($hWnd, $Msg, $wParam, $lParam)
  Local $tDrawItem = DllStructCreate($tagDRAWITEMSTRUCT, $lParam)
  If $tDrawItem.cType <> $ODT_TAB Then Return $GUI_RUNDEFMSG

  Local $itmID = DllStructGetData($tDrawItem, "itmID")
  Local $hDC = DllStructGetData($tDrawItem, "hDC")

  If $tDrawItem.itmAction <> $ODA_DRAWENTIRE Then Return $GUI_RUNDEFMSG
  Local $iBrushColor = $itmID = 0 ? 0x11AADD : 0xEEBB99

  _WinAPI_SetBkMode($hDC, 1)
  Local $iBrush = _WinAPI_CreateSolidBrush($iBrushColor)
  Local $tRect = DllStructCreate($tagRect, DllStructGetPtr($tDrawItem, "itmRect"))
  _WinAPI_FillRect($hDC, $tRect, $iBrush)

  $tRect.left += 5
  $tRect.top += 5
  _WinAPI_DrawText($hDC, _GUICtrlTab_GetItemText($tDrawItem.hItm, $itmID), $tRect, $DT_LEFT)

  Local $hDCTab = _WinAPI_GetDC($tDrawItem.hItm)
  Local $aPos = ControlGetPos($hWnd, "", $tDrawItem.hItm)

  $tRect.left = 2
  $tRect.top = 22
  $tRect.right = $aPos[2] - 2
  $tRect.bottom = $aPos[3] - 2

  _WinAPI_FillRect($hDCTab, $tRect, $iBrush)
  _WinAPI_DeleteObject($iBrush)

  Return $GUI_RUNDEFMSG
EndFunc   ;==>WM_DRAWITEM

Func CreateTreeView()
  Local $iStyle = BitOR($TVS_EDITLABELS, $TVS_HASBUTTONS, $TVS_HASLINES, $TVS_LINESATROOT, $TVS_DISABLEDRAGDROP, $TVS_SHOWSELALWAYS)
  Local $idTreeview = GUICtrlCreateTreeView(15, 35, 150, 150, $iStyle, $WS_EX_CLIENTEDGE)

  Local $idGeneralitem = GUICtrlCreateTreeViewItem("General", $idTreeview)
  Local $idDisplayitem = GUICtrlCreateTreeViewItem("Display", $idTreeview)
  Local $idAboutitem = GUICtrlCreateTreeViewItem("About", $idGeneralitem)
  Local $idCompitem = GUICtrlCreateTreeViewItem("Computer", $idGeneralitem)
  GUICtrlCreateTreeViewItem("User", $idGeneralitem)
  GUICtrlCreateTreeViewItem("Resolution", $idDisplayitem)
  GUICtrlCreateTreeViewItem("Other", $idDisplayitem)
EndFunc   ;==>CreateTreeView
Avatar du membre
Nine
AutoIt MVPs (MVP)
AutoIt MVPs (MVP)
Messages : 133
Enregistré le : ven. 17 avr. 2020 01:23
Localisation : Montréal, Québec
Status : Hors ligne

Re: [..] TreeView et couleur de fond dans un Tab  

#5

Message par Nine »

Et bien. Après d'autres tests, j'ai pensé à une fonction que j'utilise assez souvent pour disposer les fenêtres dans un ordre spécifique. Je ne l'avais pas encore utilisé pour des contrôles, mais ça a permis de régler le problème du label qui recouvre le treeview. Je crois que c'est la meilleure solution jusqu'à date...

Code : Tout sélectionner

#include <GUIConstants.au3>
#include <WinAPISysWin.au3>
#include <GuiTab.au3>

Opt("MustDeclareVars", True)

Example3()

Func Example3()
  Local $hGUI = GUICreate("WindowPos", 300, 200)
  Local $idTab = GUICtrlCreateTab(10, 10, 280, 180)

  Local $TabItem_1 = GUICtrlCreateTabItem("TabItem 1")
  Local $idLabel = SetTabColor($hGUI, $idTab, 0xDDAA11)
  Local $idTreeview = CreateTreeView()
  _WinAPI_SetWindowPos(GUICtrlGetHandle($idTreeview), GUICtrlGetHandle($idLabel), 0, 0, 0, 0, $SWP_NOMOVE + $SWP_NOSIZE)

  Local $TabItem_2 = GUICtrlCreateTabItem("TabItem 2")
  $idLabel = SetTabColor($hGUI, $idTab, 0xAA11DD)
  $idTreeview = CreateTreeView()
  _WinAPI_SetWindowPos(GUICtrlGetHandle($idTreeview), GUICtrlGetHandle($idLabel), 0, 0, 0, 0, $SWP_NOMOVE + $SWP_NOSIZE)

  Local $TabItem_3 = GUICtrlCreateTabItem("TabItem 3")
  $idLabel = SetTabColor($hGUI, $idTab, 0x11DDAA)

  GUICtrlCreateTabItem("")

  GUISetState()
  While True
    Switch GUIGetMsg()
      Case $GUI_EVENT_CLOSE
        ExitLoop
    EndSwitch
  WEnd
EndFunc   ;==>Example3

Func SetTabColor($hWnd, $idTab, $nColor)
  Local $aPos = ControlGetPos($hWnd, "", $idTab)
  Local $aRect = _GUICtrlTab_GetItemRect($idTab, -1)
  Local $idLabel = GUICtrlCreateLabel("", $aPos[0] + 2, $aPos[1] + $aRect[3] + 4, $aPos[2] - 4, $aPos[3] - $aRect[3] - 6)
  GUICtrlSetBkColor(-1, $nColor)
  GUICtrlSetState(-1, $GUI_DISABLE)
  Return $idLabel
EndFunc   ;==>SetTabColor

Func CreateTreeView()
  Local $iStyle = BitOR($TVS_EDITLABELS, $TVS_HASBUTTONS, $TVS_HASLINES, $TVS_LINESATROOT, $TVS_DISABLEDRAGDROP, $TVS_SHOWSELALWAYS)
  Local $idTreeview = GUICtrlCreateTreeView(15, 35, 150, 150, $iStyle, $WS_EX_CLIENTEDGE)

  Local $idGeneralitem = GUICtrlCreateTreeViewItem("General", $idTreeview)
  Local $idDisplayitem = GUICtrlCreateTreeViewItem("Display", $idTreeview)
  Local $idAboutitem = GUICtrlCreateTreeViewItem("About", $idGeneralitem)
  Local $idCompitem = GUICtrlCreateTreeViewItem("Computer", $idGeneralitem)
  GUICtrlCreateTreeViewItem("User", $idGeneralitem)
  GUICtrlCreateTreeViewItem("Resolution", $idDisplayitem)
  GUICtrlCreateTreeViewItem("Other", $idDisplayitem)
  Return $idTreeview
EndFunc   ;==>CreateTreeView
Avatar du membre
Anthony
Niveau 7
Niveau 7
Messages : 315
Enregistré le : lun. 17 janv. 2011 14:08
Localisation : France
Status : Hors ligne

Re: [..] TreeView et couleur de fond dans un Tab

#6

Message par Anthony »

Bonjour Nine,

Merci bien pour ton retour, d'ailleurs si tu passes un jour en France dans le 72 je te dois un canon ; :bisou:
Voici en gros ce que je cherchais à faire.
  • Code : Tout sélectionner

    #include <Array.au3>
    #include <GUIConstants.au3>
    #include <GuiTab.au3>
    #include <GuiTreeView.au3>
    #include <WinAPISysWin.au3>
    
    Opt("MustDeclareVars", True)
    
    Local $hGUI = GUICreate( "WindowPos", 300, 200, -1, -1, $WS_OVERLAPPEDWINDOW, $WS_EX_ACCEPTFILES)
    
    Local $idTab = GUICtrlCreateTab(5, 5, 290, 190)
    GUICtrlSetResizing( -1, $GUI_DOCKLEFT + $GUI_DOCKRIGHT + $GUI_DOCKTOP + $GUI_DOCKBOTTOM)
    
    _TabItem_1()
    _TabItem_2()
    _TabItem_3()
    
    GUICtrlCreateTabItem("")
    
    Func _TabItem_1()
       Global $aTabItem_1 = _GUICtrlCreateTabItem_EX( $hGUI, $idTab, "TabItem 1", 0xDDAA11, 3, 3, 3, 3)		; Retourne sous forme d'Array $TabItem=[1] et $idLabel=[2]
       ;
       Global $idTreeview_1 = CreateTreeView( 15, 35, 150, 150)
       _WinAPI_SetWindowPos(GUICtrlGetHandle( $idTreeview_1), GUICtrlGetHandle( $aTabItem_1[2]), 0, 0, 0, 0, $SWP_NOMOVE + $SWP_NOSIZE)
       ;
       Local $idGeneralitem = GUICtrlCreateTreeViewItem("General 1", $idTreeview_1)
       Local $idDisplayitem = GUICtrlCreateTreeViewItem("Display 1", $idTreeview_1)
       Local $idAboutitem = GUICtrlCreateTreeViewItem("About 1", $idGeneralitem)
       Local $idCompitem = GUICtrlCreateTreeViewItem("Computer 1", $idGeneralitem)
       GUICtrlCreateTreeViewItem("User 1", $idGeneralitem)
       GUICtrlCreateTreeViewItem("Resolution 1", $idDisplayitem)
       GUICtrlCreateTreeViewItem("Other 1", $idDisplayitem)
       _GUICtrlTreeView_Expand( $idTreeview_1)
    EndFunc
    
    Func _TabItem_2()
       Global $aTabItem_2 = _GUICtrlCreateTabItem_EX( $hGUI, $idTab, "TabItem 2", 0xAA11DD, 6, 6, 6, 6)
       ;
       Global $idTreeview_2 = CreateTreeView( 18, 38, 144, 144)
       _WinAPI_SetWindowPos(GUICtrlGetHandle( $idTreeview_2), GUICtrlGetHandle( $aTabItem_2[2]), 0, 0, 0, 0, $SWP_NOMOVE + $SWP_NOSIZE)
       ;
       Local $idGeneralitem = GUICtrlCreateTreeViewItem("General 2", $idTreeview_2)
       Local $idDisplayitem = GUICtrlCreateTreeViewItem("Display 2", $idTreeview_2)
       Local $idAboutitem = GUICtrlCreateTreeViewItem("About 2", $idGeneralitem)
       Local $idCompitem = GUICtrlCreateTreeViewItem("Computer 2", $idGeneralitem)
       GUICtrlCreateTreeViewItem("User 2", $idGeneralitem)
       GUICtrlCreateTreeViewItem("Resolution 2", $idDisplayitem)
       GUICtrlCreateTreeViewItem("Other 2", $idDisplayitem)
       _GUICtrlTreeView_Expand( $idTreeview_2)
    EndFunc
    
    Func _TabItem_3()
       Global $aTabItem_3 = _GUICtrlCreateTabItem_EX( $hGUI, $idTab, "TabItem 3", 0x11DDAA, 9, 9, 9, 9)
       ;
       Global $idTreeview_3 = CreateTreeView( 21, 41, 138, 138)
       _WinAPI_SetWindowPos(GUICtrlGetHandle( $idTreeview_3), GUICtrlGetHandle( $aTabItem_3[2]), 0, 0, 0, 0, $SWP_NOMOVE + $SWP_NOSIZE)
       ;
       Local $idGeneralitem = GUICtrlCreateTreeViewItem("General 3", $idTreeview_3)
       Local $idDisplayitem = GUICtrlCreateTreeViewItem("Display 3", $idTreeview_3)
       Local $idAboutitem = GUICtrlCreateTreeViewItem("About 3", $idGeneralitem)
       Local $idCompitem = GUICtrlCreateTreeViewItem("Computer 3", $idGeneralitem)
       GUICtrlCreateTreeViewItem("User 3", $idGeneralitem)
       GUICtrlCreateTreeViewItem("Resolution 3", $idDisplayitem)
       GUICtrlCreateTreeViewItem("Other 3", $idDisplayitem)
       _GUICtrlTreeView_Expand( $idTreeview_3)
    EndFunc
    
    GUISetState()
    
    While True
    
    	  Switch GUIGetMsg()
    			Case $GUI_EVENT_CLOSE
    				  ExitLoop
    	  EndSwitch
    
    WEnd
    
    Func _GUICtrlCreateTabItem_EX( $hWnd, $id_CtrlTab, $vTabName, $nColor, $X, $Y, $W, $H)
       Local $TabItem = GUICtrlCreateTabItem( $vTabName)
       Local $aPos = ControlGetPos($hWnd, "", $id_CtrlTab)
       Local $aRect = _GUICtrlTab_GetItemRect( $id_CtrlTab, -1)
       Local $idLabel = GUICtrlCreateLabel("", $aPos[0] +3 + $X, $aPos[1] + $aRect[3] + 5 + $Y, $aPos[2] - 8 - $W*2, $aPos[3] - $aRect[3] - 9 - $H*2)
       GUICtrlSetResizing( -1, $GUI_DOCKLEFT + $GUI_DOCKRIGHT + $GUI_DOCKTOP + $GUI_DOCKBOTTOM)
       GUICtrlSetBkColor(-1, $nColor)
       GUICtrlSetState(-1, $GUI_DISABLE)
       Return StringSplit( $TabItem &","& $idLabel, ",")
    EndFunc   ; ==> _GUICtrlCreateTabItem_EX
    
    Func CreateTreeView( $X, $Y, $W, $H)
       Local $iStyle = BitOR($TVS_EDITLABELS, $TVS_HASBUTTONS, $TVS_HASLINES, $TVS_LINESATROOT, $TVS_DISABLEDRAGDROP, $TVS_SHOWSELALWAYS)
       Local $idTreeview = GUICtrlCreateTreeView( $X,$Y,$W,$H, $iStyle, $WS_EX_CLIENTEDGE)
       GUICtrlSetResizing( -1, $GUI_DOCKLEFT + $GUI_DOCKRIGHT + $GUI_DOCKTOP + $GUI_DOCKBOTTOM)
       Return $idTreeview
    EndFunc   ; ==> CreateTreeView
    
J'ai été diagnostiqué pour trouble de la concentration, soyez indulgent
Merci à tous pour votre aide.
UDF: GuiStatusBarEx --- Une StatusBar complète, rapide et simple
Code: Code-Texte fusion --- Une GUI pour fusionner des GCodes pour CNC 3018
Répondre