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

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Répondre
alexisprevoteau
Niveau 1
Niveau 1
Messages : 3
Enregistré le : lun. 02 mars 2020 16:28
Status : Hors ligne

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

#1

Message par alexisprevoteau »

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

Avatar du membre
mikell
Modérateur
Modérateur
Messages : 5917
Enregistré le : dim. 29 mai 2011 17:32
Localisation : Deep Cévennes
Status : Hors ligne

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

#2

Message 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
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )

alexisprevoteau
Niveau 1
Niveau 1
Messages : 3
Enregistré le : lun. 02 mars 2020 16:28
Status : Hors ligne

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

#3

Message par alexisprevoteau »

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

alexisprevoteau
Niveau 1
Niveau 1
Messages : 3
Enregistré le : lun. 02 mars 2020 16:28
Status : Hors ligne

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

#4

Message par alexisprevoteau »

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 :)

Répondre