Page 1 sur 1

[...] Modifier une listview générée par une fonction

Posté : lun. 02 mars 2020 17:10
par Utilisateur 6854 supprimé
Bonjour,

Tout d'abord merci pour ce forum qui m'a déjà beaucoup aidé. :D
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) :D

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

Re: [...] Modifier une listview générée par une fonction  

Posté : lun. 02 mars 2020 21:13
par mikell
IL y a sur le forum US exactement le truc qu'il te faut, ici
C'est un éditeur CSV très complet

Re: [...] Modifier une listview générée par une fonction

Posté : mar. 03 mars 2020 08:51
par Utilisateur 6854 supprimé
Bonjour,
Merci pour cette réponse si rapide.
Je n'avais pas trouvé ce topic mais en effet il m'a l'air plutôt bien.
Je regarde ça et je reviens vers vous :D

Re: [...] Modifier une listview générée par une fonction

Posté : mar. 03 mars 2020 16:39
par Utilisateur 6854 supprimé
En effet l'éditeur était très (voir trop) complet par rapport à ce que je voulais faire à la base mais c'est super j'ai réussi à faire ce que je voulais.
Merci beaucoup pour ton aide :)