[...] Modifier une listview générée par une fonction
Posté : lun. 02 mars 2020 17:10
				
				Bonjour,
Tout d'abord merci pour ce forum qui m'a déjà beaucoup aidé. 
 
J'ai un problème que je n'arrive désespérément pas à résoudre, je m'explique.
Mon programme lit des fichiers CSV (que je choisi via une combobox) et affiche son contenu dans une listview créée auparavant.
J'ai aussi un bouton qui permet d'enregistrer la listview dans un fichier.
Ce que je n'arrive pas à faire, c'est éditer cette listview.
J'ai trouvé de des fonctions telles que "_GUIListViewEx_SetEditStatus" et des programmes qui fonctionnent avec mais impossible de l'intégrer à ce programme.
J'ai réussi à faire qu'un item soit cliquable mais lorsque je modifie un item via cette fonction le programme plante.
Je pense que le problème vient du fait que ma listview est définie dans une fonction et non en "dur" dans la GUI principale.
Si quelqu'un a une idée je suis preneur (que ce soit via la fonction citée ci-dessus ou par un substitue) 
 
			Tout d'abord merci pour ce forum qui m'a déjà beaucoup aidé.
 
 J'ai un problème que je n'arrive désespérément pas à résoudre, je m'explique.
Mon programme lit des fichiers CSV (que je choisi via une combobox) et affiche son contenu dans une listview créée auparavant.
J'ai aussi un bouton qui permet d'enregistrer la listview dans un fichier.
Ce que je n'arrive pas à faire, c'est éditer cette listview.
J'ai trouvé de des fonctions telles que "_GUIListViewEx_SetEditStatus" et des programmes qui fonctionnent avec mais impossible de l'intégrer à ce programme.
J'ai réussi à faire qu'un item soit cliquable mais lorsque je modifie un item via cette fonction le programme plante.
Je pense que le problème vient du fait que ma listview est définie dans une fonction et non en "dur" dans la GUI principale.
Si quelqu'un a une idée je suis preneur (que ce soit via la fonction citée ci-dessus ou par un substitue)
 
 Code : Tout sélectionner
#include <GUIConstantsEx.au3>
#include <ColorConstants.au3>
#include <WindowsConstants.au3>
#include <MsgBoxConstants.au3>
#include <FileConstants.au3>
#include <string.au3>
#include <GuiListView.au3>
#include <Excel.au3>
#include <FontConstants.au3>
#include <GuiListBox.au3>
#include <GUIListViewEx.au3>
$gui_principale = GUICreate("liste Pokemon",@DesktopWidth,@DesktopHeight-65)
GUISwitch($gui_principale)
GUISetState()
;titre
$titre = GUICtrlCreateLabel("Liste Pokémon", (@DesktopWidth/2)-100,40,250,50)
GUICtrlSetFont(-1, 25, $FW_NORMAL, $GUI_FONTUNDER,"")
;images
;$imagepath=@DesktopDir&"\Pokemon\image\feunard.jpg"
;$t=GUICtrlCreatePic($imagepath, 40, 80,270,390)
;$imagepath=@DesktopDir&"\Pokemon\image\raichu.jpg"
;$t=GUICtrlCreatePic($imagepath, 40, 550,270,390)
;combo
$combo = GUICtrlCreateList("sdb",@DesktopWidth-285,200,200,230,$LBS_NOTIFY)
GUICtrlSetFont(-1, 18, $FW_NORMAL, "","")
GUICtrlSetData(-1,"jungle")
GUICtrlSetData(-1,"fossile")
GUICtrlSetData(-1,"rocket")
GUICtrlSetData(-1,"neo_genesis")
GUICtrlSetData(-1,"neo_discovery")
GUICtrlSetData(-1,"neo_revelation")
GUICtrlSetData(-1,"neo_destiny")
;liste view
$tableau = GUICtrlCreateListView("Numéro carte | Nom carte | ed1 | ed2",350, 100,1205,910,-1, BitOR($LVS_EX_FULLROWSELECT, $WS_EX_CLIENTEDGE, $LVS_EX_GRIDLINES))
GUICtrlSetFont(-1, 15, $FW_NORMAL, "","")
_GUICtrlListView_SetColumn($tableau,0,"Numéro carte",400,2)
_GUICtrlListView_SetColumn($tableau,1,"Nom Carte",400,2)
_GUICtrlListView_SetColumn($tableau,2,"Ed1",200,2)
_GUICtrlListView_SetColumn($tableau,3,"Ed2",200,2)
;Bouton quitter
$bt_quitter = GUICtrlCreateButton("Quitter", @DesktopWidth-285,800,200,75)
GUICtrlSetTip(-1, "quitter")
GUICtrlSetFont(-1, 20, $FW_NORMAL, "","")
;Bouton Save
$bt_save = GUICtrlCreateButton("Sauvegarder", @DesktopWidth-285,650,200,75)
GUICtrlSetTip(-1, "Sauvegarder")
GUICtrlSetFont(-1, 20, $FW_NORMAL, "","")
$sDelimiter = ';'
While 1
   $choix = GUIGetMsg()
   Select
	  Case $choix = $Gui_event_close
		 ExitLoop
	  Case $choix = $combo
		 f_lirefichier($combo)
	  Case $choix = $bt_save
		 _GUICtrlListView_SaveTxt($tableau, $combo, $sDelimiter)
	  Case $choix = $bt_quitter
		 Exit
   EndSelect
WEnd
Func f_lirefichier($serie)
   ;RAZ Listview et lecture du fichier choisi
   _GUICtrlListView_DeleteAllItems($tableau)
   $file=GUICtrlRead($serie)
   $filepath=@ScriptDir&"\liste_csv\"&$file&".csv"
   $read = FileRead($filepath)
   $line = StringSplit($read, @CR)
   Local $debut = StringMid($file, 1, 3)
   IF $debut = "neo" Then
	  ;gestion de la taille des colonnes ed
	  _GUICtrlListView_SetColumn($tableau,2,"Ed",200,2)
	  _GUICtrlListView_SetColumn($tableau,3,"Ed2",0,2)
	  GUICtrlCreateListViewItem(" | | |", $tableau)
	  ;Insertion des lignes si la série est une néo
  For $i = 2 To $line[0]-1
	$ligne = FileReadLine($filepath, $i)
	$info = StringSplit($ligne, ";")
	$num=$info[1]
	$nom=$info[2]
	$ed=$info[3]
	GUICtrlCreateListViewItem($num & "|" & $nom  & "|" &  $ed, $tableau)
  Next
   Else
	  ;gestion de la taille des colonnes ed
	  _GUICtrlListView_SetColumn($tableau,2,"Ed1",200,2)
	  _GUICtrlListView_SetColumn($tableau,3,"Ed2",200,2)
	  GUICtrlCreateListViewItem(" | | |", $tableau)
	  ;Insertion des lignes si la série est une normale
	  For $i = 2 To $line[0]-1
		$ligne = FileReadLine($filepath, $i)
		$info = StringSplit($ligne, ";")
		$num=$info[1]
		$nom=$info[2]
		$ed=$info[3]
		$ed2=$info[3]
		GUICtrlCreateListViewItem($num & "|" & $nom  & "|" & $ed & "|" & $ed2, $tableau)
	  Next
   EndIf
EndFunc
;fonction save
Func _GUICtrlListView_SaveTxt($hListView, $combo, $sDelimiter = '|')
   $file_to_text=GUICtrlRead($combo)
   $sFilePath_to_text=@ScriptDir&"\listetest_csv\"&$file_to_text&".csv"
    If $sDelimiter = Default Then
        $sDelimiter = '|'
    EndIf
    Local Const $iColumnCount = _GUICtrlListView_GetColumnCount($hListView) - 1
    Local Const $iItemCount = _GUICtrlListView_GetItemCount($hListView) - 1
    Local $sReturn = ''
    For $i = 0 To $iItemCount
        For $j = 0 To $iColumnCount
            $sReturn &= _GUICtrlListView_GetItemText($hListView, $i, $j)
            If $j < $iColumnCount Then
                $sReturn &= $sDelimiter
            EndIf
        Next
        $sReturn &= @CRLF
    Next
    Local $hFileOpen = FileOpen($sFilePath_to_text, $FO_OVERWRITE)
    If $hFileOpen = -1 Then
        Return SetError(1, 0, False)
	 EndIf
    FileWrite($hFileOpen, $sReturn)
    FileClose($hFileOpen)
	MsgBox(0,"","Fichier bien sauvegardé")
    Return True
 EndFunc   ;==>_GUICtrlListView_SaveTxt
