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

 EndSwitch
WEnd


Func 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)
 EndSwitch
WEnd

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.kxf
Global $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=3
Dim $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]
   Next

Next

_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 GUI
While 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)
EndSwitch
WEnd
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 :wink:
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=4
Local $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 GUI
While 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])
         Next
EndSwitch
WEnd

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