Page 1 sur 1
[R] Treeview et clic sur item
Posté : mar. 12 mai 2020 12:05
par scorp84
Bonjour à tous,
Voici mon problème du jour : J'ai un Treeview que je remplie d'après un tableau et j'aimerai au clic sur un des item ouvrir le fichier associé.
Voici mon code :
#include <Array.au3>#include <GuiTreeView.au3>Dim $tab_treeview[4][3]$tab_treeview[0][0]="CAT"$tab_treeview[0][1]="LIBELE"$tab_treeview[0][2]="FICHIER"$tab_treeview[1][0]="CONTRATS"$tab_treeview[1][1]="Contrat 001"$tab_treeview[1][2]=@ScriptDir & "\contrat001.txt"$tab_treeview[1][0]="CONTRATS"$tab_treeview[1][1]="Contrat 002"$tab_treeview[1][2]=@ScriptDir & "\contrat002.txt"$tab_treeview[2][0]="CONTRATS"$tab_treeview[2][1]="Contrat 003"$tab_treeview[2][2]=@ScriptDir & "\contrat003.txt"$tab_treeview[3][0]="CONSIGNES"$tab_treeview[3][1]="Consignes 001"$tab_treeview[3][2]=@ScriptDir & "\consignes.txt";_ArrayDisplay($tab_treeview,"$tab_treeview " & @ScriptLineNumber)#include <GUIConstantsEx.au3>#include <TreeViewConstants.au3>#include <WindowsConstants.au3>#Region ### START Koda GUI section ### Form=Global $Form1 = GUICreate("Form1", 615, 437, 192, 124)Global $TreeView1 = GUICtrlCreateTreeView(40, 48, 425, 217)GUISetState(@SW_SHOW)#EndRegion ### END Koda GUI section ###f_generertreeview
()While 1 $nMsg = GUIGetMsg() Switch $nMsg Case $GUI_EVENT_CLOSE Exit EndSwitchWEndFunc f_generertreeview
() $ged_cat_ex="" $TreeView1_menu_item=0 Global $aItem[UBound($tab_treeview)] For $i = 1 To UBound($tab_treeview)-1 ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : $tab_treeview[$i][0] = ' & $tab_treeview[$i][0] & @CRLF & '>Error code: ' & @error & @CRLF) ;### Debug Console $ged_cat="DOCS " & $tab_treeview[$i][0] If $ged_cat<>$ged_cat_ex Then $aItem[$i]=_GUICtrlTreeView_Add($TreeView1,0,$ged_cat) $ged_cat_ex=$ged_cat $TreeView1_menu_item=$aItem[$i] EndIf _GUICtrlTreeView_AddChild($TreeView1,$TreeView1_menu_item, $tab_treeview[$i][1]) Next _GUICtrlTreeView_EndUpdate($TreeView1)EndFunc
J'ai trouvé des exemples de récup de l'item cliqué mais soit via un bouton, soit je ne comprenais pas comment cela était construit.
Quelqu'un aurait il la solution svp ?
Merci à tous et prenez soin de vous.
Amicalement.
BM
Re: [..] Treeview et clic sur item
Posté : mar. 12 mai 2020 16:17
par walkson
Bonjour,
Comme ça ?
#include <GUIConstantsEx.au3>#include <TreeViewConstants.au3>#include <WindowsConstants.au3>#include <GuiTreeView.au3>;========== création des txt ================For $i = 1 To 3 $open = FileOpen(@ScriptDir & "\contrat" & $i & ".txt",8 + 2) FileWrite($open,"contrat" & $i & ".txt") FileClose($open)Next;===========================================Global $Form1 = GUICreate("Form1", 383, 438, 192, 124)Global $TreeView1 = GUICtrlCreateTreeView(40, 24, 281, 329,-1,$WS_EX_CLIENTEDGE)Global $TreeView1_0 = GUICtrlCreateTreeViewItem("contrat", $TreeView1)Global $TreeView1_1 = GUICtrlCreateTreeViewItem("contrat1", $TreeView1_0)Global $TreeView1_2 = GUICtrlCreateTreeViewItem("contrat1.txt", $TreeView1_1)Global $TreeView1_3 = GUICtrlCreateTreeViewItem("contrat", $TreeView1)Global $TreeView1_4 = GUICtrlCreateTreeViewItem("contrat2", $TreeView1_3)Global $TreeView1_5 = GUICtrlCreateTreeViewItem("contrat2.txt", $TreeView1_4)Global $TreeView1_6 = GUICtrlCreateTreeViewItem("contrat", $TreeView1)Global $TreeView1_7 = GUICtrlCreateTreeViewItem("contrat3", $TreeView1_6)Global $TreeView1_8 = GUICtrlCreateTreeViewItem("contrat3.txt", $TreeView1_7)GUISetState(@SW_SHOW)_GUICtrlTreeView_Expand($TreeView1)While 1 $nMsg = GUIGetMsg() Switch $nMsg Case $GUI_EVENT_CLOSE Exit Case $TreeView1_2 $contrat = GUICtrlRead($TreeView1_2,1) If FileExists($contrat) Then ShellExecute($contrat) Case $TreeView1_5 $contrat = GUICtrlRead($TreeView1_5,1) If FileExists($contrat) Then ShellExecute($contrat) Case $TreeView1_8 $contrat = GUICtrlRead($TreeView1_8,1) If FileExists($contrat) Then ShellExecute($contrat) EndSwitchWEnd
Re: [..] Treeview et clic sur item
Posté : mar. 12 mai 2020 16:51
par scorp84
Bonjour Walkson,
Votre exemple est excellent mais comment faire pour l'associer à un tableau dynamique car je ne pourrai pas déclarer dans ma construction de GUI tous les items ne les sachant pas à l'avance ?
Merci +++
Amicalement.
BM
Dim $tab_treeview[4][3]
$tab_treeview[0][0]="CAT"
$tab_treeview[0][1]="LIBELE"
$tab_treeview[0][2]="FICHIER"
$tab_treeview[1][0]="CONTRATS"
$tab_treeview[1][1]="Contrat 001"
$tab_treeview[1][2]=@ScriptDir & "\contrat001.txt"
$tab_treeview[1][0]="CONTRATS"
$tab_treeview[1][1]="Contrat 002"
$tab_treeview[1][2]=@ScriptDir & "\contrat002.txt"
$tab_treeview[2][0]="CONTRATS"
$tab_treeview[2][1]="Contrat 003"
$tab_treeview[2][2]=@ScriptDir & "\contrat003.txt"
$tab_treeview[3][0]="CONSIGNES"
$tab_treeview[3][1]="Consignes 001"
$tab_treeview[3][2]=@ScriptDir & "\consignes.txt"
Re: [..] Treeview et clic sur item
Posté : mar. 12 mai 2020 17:30
par walkson
Vous préférez cela ?
Code : Tout sélectionner
#include <GUIConstantsEx.au3>
#include <TreeViewConstants.au3>
#include <WindowsConstants.au3>
#include <GuiTreeView.au3>
#include <Array.au3>
#include <File.au3>
;========== création des txt ================
For $i = 1 To 20
$open = FileOpen(@ScriptDir & "\AA\" & $i & " contrat.txt",8 + 2)
FileWrite($open,$i & " contrat.txt")
FileClose($open)
Next
;===========================================
Global $array = _FileListToArray(@ScriptDir & "\AA","*.txt",$FLTA_FILES,True)
_ArrayDelete($array,0);sup nb de lignes
Global $myArray[0]
Global $Form1 = GUICreate("Form1", 383, 438, 192, 124)
Global $TreeView1 = GUICtrlCreateTreeView(20, 24, 350, 329,BitOR($TVS_TRACKSELECT,$GUI_SS_DEFAULT_TREEVIEW), BitOR($WS_EX_CLIENTEDGE,$WS_EX_STATICEDGE))
GUISetState(@SW_SHOW)
For $i = 0 To UBound($array) - 1
$niveau1 = GUICtrlCreateTreeViewItem("contrat", $TreeView1)
$string = StringRegExp($array[$i],"(?i)AA\\(.*?)\.txt",1);ne conserve que $i & " contrat"
$niveau2 = GUICtrlCreateTreeViewItem($string[0], $niveau1)
$niveau3 = GUICtrlCreateTreeViewItem($array[$i], $niveau2);chemin des txt
_ArrayAdd($myArray, $niveau3)
Next
$bb = GUICtrlCreateButton("I see",50,380,100,25)
$bb1 = GUICtrlCreateButton("Expand",160,380,100,25)
GUISetState(@SW_SHOW)
Local $expand = False
_GUICtrlTreeView_SelectItem($TreeView1, GUICtrlGetHandle($myArray[0] - 2) );sélectionne le premier item
_GUICtrlTreeView_SetLineColor($TreeView1,0xFFFFFF)
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
Case $myArray[0] To $myArray[UBound($myArray) - 1]
$contrat = GUICtrlRead($nMsg,1)
If FileExists($contrat) Then ShellExecute($contrat)
Case $bb
MsgBox(0,"",GUICtrlRead($TreeView1,1))
Case $bb1
$expand = Not $expand
_GUICtrlTreeView_Expand($TreeView1,0, $expand)
GUICtrlSetData($bb1,$expand = True ? "Reduit":"Developpe")
EndSwitch
WEnd
Re: [..] Treeview et clic sur item
Posté : mer. 13 mai 2020 20:50
par scorp84
Bonsoir,
C'est parfait +++
Merci.
Amicalement.
BM
Re: [R] Treeview et clic sur item
Posté : lun. 20 juil. 2020 14:54
par scorp84
Bonjour Walkson,
J'ai essayé de traduire à ma manière votre code pour essayer de le comprendre et voici ce que cela donne :
#include <Array.au3>#include <GUIConstantsEx.au3>#include <TreeViewConstants.au3>#include <WindowsConstants.au3>#include <GuiTreeView.au3>; GUI PRRINCIPALE#Region ### START Koda GUI section ### Form=X:\Dropbox\DEVELOPPEMENT\Autoit - BM'Tools_encrypted\_Fonctions\GUI - Treeview\Test treeview.kxfGlobal $Form1 = GUICreate("Form1", 615, 437, 192, 124)Global $TreeView1 = GUICtrlCreateTreeView(40, 40, 441, 201)GUISetState(@SW_SHOW)#EndRegion ### END Koda GUI section ###; TABLEAU CAT / FICHIERS$nb_cols=3Dim $tab_cat_tmp[1]Dim $tab_final[1][$nb_cols]_ArrayAdd($tab_cat_tmp,"CAT A;FICHIER 1;URL1")_ArrayAdd($tab_cat_tmp,"CAT A;FICHIER 2;URL2")_ArrayAdd($tab_cat_tmp,"CAT B;FICHIER 1;URL1")_ArrayAdd($tab_cat_tmp,"CAT B;FICHIER 2;URL2")_ArrayAdd($tab_cat_tmp,"CAT C;FICHIER 1;URL1")_ArrayAdd($tab_cat_tmp,"CAT C;FICHIER 2;URL2")Dim $tab_cat_id[1][3]For $i=1 to UBound($tab_cat_tmp)-1 $tmp=StringSplit($tab_cat_tmp[$i],";") ReDim $tab_final[UBound($tab_final)+1][$nb_cols] For $j=1 to $nb_cols $tab_final[$i][$j-1]=$tmp[$j] NextNext_ArrayDelete($tab_final,0)_ArrayDisplay($tab_final); MAJ TREEVIEW_GUICtrlTreeView_BeginUpdate($TreeView1)$cat_ex=""For $i=0 to UBound($tab_final)-1 $cat_en_cours=$tab_final[$i][0] $fichier_en_cours=$tab_final[$i][1] $url_en_cours=$tab_final[$i][2] If $cat_en_cours<>$cat_ex Then $niveau1=GUICtrlCreateTreeViewItem($cat_en_cours, $TreeView1) $cat_ex=$cat_en_cours EndIf GUICtrlCreateTreeViewItem($fichier_en_cours, $niveau1) $tab_cat_id[UBound($tab_cat_id)-1][0]=UBound($tab_cat_id)-1 $tab_cat_id[UBound($tab_cat_id)-1][1]=$fichier_en_cours $tab_cat_id[UBound($tab_cat_id)-1][2]=$url_en_cours Redim $tab_cat_id[UBound($tab_cat_id)+1][3]Next_GUICtrlTreeView_EndUpdate($TreeView1)_ArrayDisplay($tab_cat_id); BOUCLE GUIWhile 1$nMsg = GUIGetMsg() Switch $nMsg Case $GUI_EVENT_CLOSE Exit Case $i=0 to UBound($tab_cat_id)-1 $ligne = GUICtrlRead($nMsg,1) If $ligne<>"" then ConsoleWrite("URL du fichier cliqué" & $tab_cat_id[$i][2] & @CRLF)EndSwitchWEnd
Malheureusement, je n'arrive pas au clic sur un des éléments du Treeview à afficher le nom du fichier.
Auriez-vous la gentillesse de me dire où je me trompe ?
Merci d'avance.
Amicalement.
BM
Re: [R] Treeview et clic sur item
Posté : lun. 20 juil. 2020 19:42
par mikell
Si je puis me permettre de m'imiscer, il y a quand même
beaucoup plus simple, comme construire une seule array directement et mettre l'id du treeviewitem en 4ème colonne
Note aussi qu'on peut remplir une array 2D avec _ArrayAdd() en utilisant le ";" comme séparateur. Si le fichier lu est sous la forme
CAT A;FICHIER 1;URL A1
CAT A;FICHIER 2;URL A2
etc, un seul _ArrayAdd() suffit (ou un _FileReadToArray)
#include <Array.au3>#include <GUIConstantsEx.au3>#include <WindowsConstants.au3>#include <GuiTreeView.au3>Global $Form1 = GUICreate("Form1", 615, 437, 192, 124)Global $TreeView1 = GUICtrlCreateTreeView(40, 40, 441, 201)GUISetState(@SW_SHOW); TABLEAU CAT / FICHIERS$nb_cols=4Local $tab_final[0][$nb_cols]$text = "CAT A;FICHIER 1;URL A1" & @crlf & _
"CAT A;FICHIER 2;URL A2" & @crlf & _
"CAT B;FICHIER 1;URL B1" & @crlf & _
"CAT B;FICHIER 2;URL B2" & @crlf & _
"CAT C;FICHIER 1;URL C1" & @crlf & _
"CAT C;FICHIER 2;URL C2"_ArrayAdd($tab_final,$text, 0, ";"); MAJ TREEVIEW_GUICtrlTreeView_BeginUpdate($TreeView1)$u = UBound($tab_final) ;<<<<$cat_ex=""For $i=0 to $u-1 $cat_en_cours=$tab_final[$i][0] $fichier_en_cours=$tab_final[$i][1] $url_en_cours=$tab_final[$i][2] If $cat_en_cours<>$cat_ex Then $niveau1=GUICtrlCreateTreeViewItem($cat_en_cours, $TreeView1) $cat_ex=$cat_en_cours EndIf $tab_final[$i][3] = GUICtrlCreateTreeViewItem($fichier_en_cours, $niveau1)Next_GUICtrlTreeView_EndUpdate($TreeView1)_ArrayDisplay($tab_final); BOUCLE GUIWhile 1$nMsg = GUIGetMsg() Switch $nMsg Case $GUI_EVENT_CLOSE Exit Case $tab_final[0][3] to $tab_final[$u-1][3] For $i = 0 to $u-1 If $nMsg = $tab_final[$i][3] Then Msgbox(0,"", $tab_final[$i][2]) NextEndSwitchWEnd
Re: [R] Treeview et clic sur item
Posté : mar. 21 juil. 2020 10:46
par scorp84
Bonjour Mikell,
Y a pas à dire : quand on est bon, on est bon
Merci beaucoup pour votre aide.
Amicalement.
BM