Page 1 sur 1

transfert, ajout et suppression d'élément de liste

Posté : jeu. 01 nov. 2018 00:25
par yohanb767
Bonjour à tous ,

dans le script ci dessous , j'aimerai pouvoir ajouter des données dans la liste de gauche via un input mais aussi pouvoir ensuite les transférer dans la liste de droite ou bien les supprimer

je n'ai aucune idée pour le faire

merci d'avance

Code : Tout sélectionner

#include <GUIConstants.au3>
#include <GUIListBox.au3>


HotKeySet("{F1}", "quitter")
func quitter()
    Exit
EndFunc
;définition de la GUI
GUICreate("Transfert d'éléments de listes",420,270)

$Nserie = GUICtrlCreateInput("", 150, 10, 80, 20) ; j'aimerai pouvoir ajouter une entrée dans la liste via cette input
$liste = GUICtrlCreateList("", 10, 10, 124, 250)
GUICtrlSetData($liste, "a|b|c|t|u|z") ; ceci est un exemple mais j'aimerai pouvoir ajouter des entrer via un input
$listechoisie = GUICtrlCreateList("", 250, 10, 145, 250)
$Transferer = GUICtrlCreateButton("Transferer",150,50,80, 20) ;
$Supprimer = GUICtrlCreateButton("Supprimer",150,100,80, 20)
$lancer = GUICtrlCreateButton("Info", 150,200,80,50)

GUISetState()



    $msg = 0
    While 1
        sleep(20)
        if $msg = $GUI_EVENT_CLOSE Then
            Exit
        EndIf

        $msg = GUIGetMsg()
        Switch $msg
            Case $Transferer;tranférer de gauche à droite
                Local $selection
                $selection = GUICtrlRead($liste)
                GUICtrlSetData($listechoisie,$selection)
                $index_list_box=_GUICtrlListBox_GetCurSel($liste)
                $verif=_GUICtrlListBox_ReplaceString($liste, $index_list_box, "")
            Case $Supprimer;inversement
                Local $selection
                $selection = GUICtrlRead($listechoisie)
                GUICtrlSetData($liste,$selection)
                $index_list_box=_GUICtrlListBox_GetCurSel($listechoisie)
                $verif=_GUICtrlListBox_ReplaceString($listechoisie, $index_list_box, "")

             Case $lancer
                 MsgBox(0,"0",GUICtrlRead($listechoisie)) ;Vérification ... <= la variable n'a de valeur que lorsque je sélectionne un élément de la liste :s
        EndSwitch
    WEnd

Re: transfert, ajout et suppression d'élément de liste

Posté : jeu. 01 nov. 2018 16:45
par yohanb767
Bon , voilà ! j'avance sur ce que je veux faire mais il me manque encore des choses à mettre en place comme

la fonction "transfert" d'une liste a l'autre

voici ce que j'ai

Code : Tout sélectionner

#include <GuiConstantsEx.au3>
#include <ListviewConstants.au3>
#include <Array.au3>

Global $ini = @scriptdir & "\testini.ini"
Global $array = _ReadZeIni($ini)        ; lecture du ini => 1ère array ($array) pour stocker les infos
If @error Then                  ; si le ini est absent, corrompu ou vide
   FileCopy($ini, @scriptdir & "\test.bak")    ; sauvegarde si corrompu
   FileDelete($ini)        ; recréation nouveau ini
   Dim $array[3][2]      ; array par défaut



EndIf
; _ArrayDisplay($array)

$gui = GUICreate("liste des Litiges", 582, 280, 100, 20, -1)
$listview2 = GUICtrlCreateListView("|" &"soft", 370, 40, 200, 130, $LVS_NOCOLUMNHEADER)
$listview = GUICtrlCreateListView("|" &"soft", 10, 40, 200, 130, $LVS_NOCOLUMNHEADER)
GUICtrlSendMsg($listview, $LVM_SETCOLUMNWIDTH, 0, 20)
GUICtrlSendMsg($listview, $LVM_SETCOLUMNWIDTH, 1, 320)


; remplissage de la listview
Dim $ligne[UBound($array)]            ; 2ème array ($ligne) pour stocker les handles des items
For $i = 0 To UBound($array)-1
   $ligne[$i] = GUICtrlCreateListViewItem($array[$i][0] &"|" & $array[$i][1], $listview)
   GUICtrlSetImage(-1, $array[$i][1], -1)
Next

$ajoute = GuiCtrlCreateButton("Ajouter", 30, 220, 120, 25)
$degage = GuiCtrlCreateButton("Supprimer", 250, 130, 80, 25)
$Nserie = GUICtrlCreateInput("", 30, 190, 120, 25)
$Transferer = GuiCtrlCreateButton("Tranférer >>>", 250, 70, 80, 25)
$Transferer = GuiCtrlCreateButton("<<< Tranférer", 250, 100, 80, 25)
$Label = GUICtrlCreateLabel("Litige à traiter", 40, 20, 200, 25)
$Label = GUICtrlCreateLabel("Litige Résolu", 400, 20, 200, 25)
GUISetState()


While 1
$msg = GUIGetMsg()
Switch $msg

    Case  -3
    _WriteInZeIni($ini)
       Exit

    Case $degage
        $index = ControlListView($gui, "", $listview, "GetSelected")
    If $ligne <>"" Then
            GUICtrlDelete($ligne[$index])
            _ArrayDelete($ligne, $index)
            _ArrayDelete($array, $index)
        _WriteInZeIni($ini)
	 EndIf


    Case $ajoute
    If $ligne = "" Then
        Dim $ligne[1]
        Dim $array[1][2]
        $prevnb = 0
    Else
        $prevnb = UBound($array)
        ReDim $array[$prevnb+1][2]
        ReDim $ligne[$prevnb+1]
	 EndIf

    $var = GUICtrlRead($Nserie)
    If not @error Then
        $array[$prevnb][0] = $prevnb+1
        $array[$prevnb][1] = $var
        $ligne[$prevnb] = GUICtrlCreateListViewItem($array[$prevnb][0] &"|" & $array[$prevnb][1], $listview)
        GUICtrlSetImage(-1, $array[$prevnb][1], -1)
        _WriteInZeIni($ini)
 ;_ArrayDisplay($array, "debug")
    EndIf

EndSwitch
Wend

Func _WriteInZeIni($file)
  FileDelete($file)    ; on peut faire un backup avant
   For $i = 0 To UBound($array)-1
    IniWrite($file, $i, $array[$i][0], $array[$i][1])
   Next
EndFunc

Func _ReadZeIni($file)
   $var = IniReadSectionNames($file)
   If @error Then
    SetError(1)
    Return
   EndIf
   Dim $array[$var[0]][2]
   For $i = 1 To $var[0]
    $readsection = IniReadSection($ini, $var[$i])
    $array[$i-1][0] = $readsection[1][0]
    $array[$i-1][1] = $readsection[1][1]
   Next
Return $array
EndFunc

Re: transfert, ajout et suppression d'élément de liste

Posté : jeu. 01 nov. 2018 19:21
par walkson
Bonsoir,
Tout d'abord, je souhaiterais que votre post soit conforme pour une lecture simple et intelligible !
Dans la barre des menus, vous avez un gros bouton bleu, c'est pour un code entier, pour une ligne partielle, 0/0. Tlem, administrateur, explique très bien cela !
Merci de corriger les balises sur votre post
Concernant votre première demande (premier code)

Code : Tout sélectionner

#include <GUIConstants.au3>
#include <GUIListBox.au3>
#include <StaticConstants.au3>


HotKeySet("{F2}", "quitter")
func quitter()
Exit
EndFunc
;définition de la GUI
GUICreate("Transfert d'éléments de listes",420,270)

$Nserie = GUICtrlCreateInput("", 150, 10, 80, 20) ; j'aimerai pouvoir ajouter une entrée dans la liste via cette input
$liste = GUICtrlCreateList("", 10, 10, 124, 250)
GUICtrlSetData($liste, "a|b|c|t|u|z") ; ceci est un exemple mais j'aimerai pouvoir ajouter des entrer via un input
$listechoisie = GUICtrlCreateList("", 250, 10, 145, 250)
$Transferer = GUICtrlCreateButton("Transferer",150,110,80, 20) ;
$label = GUICtrlCreateLabel("",150, 135,80,20,BitOR($SS_CENTER,$SS_CENTERIMAGE,$WS_BORDER))
GUICtrlSetFont(-1, 12, 800)
GUICtrlSetColor(-1,0x0000FF)
$Ajouter = GUICtrlCreateButton("Ajouter",150,40,80, 20)
$lancer = GUICtrlCreateButton("Info", 150,200,80,50)

GUISetState()




While 1
$msg = GUIGetMsg()

Switch $msg
Case $GUI_EVENT_CLOSE
		Exit
Case $liste
		GUICtrlSetData($label,"=" & ChrW(5580))
		_GUICtrlListBox_SetCurSel($listechoisie, -1) ;If this parameter is -1 the list box is set to have no selection.
		GUICtrlSetBkColor($listechoisie,0xFFFFDD)
		GUICtrlSetBkColor($liste,0xDDDDFF)
Case $listechoisie
		GUICtrlSetData($label,ChrW(5583) & "=")
		_GUICtrlListBox_SetCurSel($liste, -1)
		GUICtrlSetBkColor($liste,0xFFFFDD)
		GUICtrlSetBkColor($listechoisie,0xDDDDFF)
Case $Ajouter
		$string = GUICtrlRead($Nserie)
		If $string > "" Then
			_GUICtrlListBox_InsertString ( $liste, $string , -1 );If this parameter is -1 the string is added to the end of the list.
		EndIf
		GUICtrlSetData($Nserie,"")
		GUICtrlSetData($label,"")

Case $Transferer
		GUICtrlSetData($label,"")
	$index_list_box=_GUICtrlListBox_GetCurSel($liste)
	If $index_list_box <> -1 Then ;-1 if there is no selection
	$getText = _GUICtrlListBox_GetText ( $liste, $index_list_box )
	_GUICtrlListBox_InsertString ( $listechoisie, $getText , -1 )
	$verif=_GUICtrlListBox_DeleteString($liste, $index_list_box)
	EndIf
	$index_list_box=_GUICtrlListBox_GetCurSel($listechoisie)
	If $index_list_box <> -1 Then
	$getText = _GUICtrlListBox_GetText ( $listechoisie, $index_list_box )
	_GUICtrlListBox_InsertString ( $liste, $getText , -1 )
	$verif=_GUICtrlListBox_DeleteString($listechoisie, $index_list_box)
	EndIf


Case $lancer
MsgBox(0,"0",GUICtrlRead($listechoisie)) ;Vérification ... <= la variable n'a de valeur que lorsque je sélectionne un élément de la liste :s

EndSwitch
WEnd
Pour le deuxième post, sans ini, aucune analyse possible

Re: transfert, ajout et suppression d'élément de liste

Posté : ven. 02 nov. 2018 00:06
par yohanb767
voici ce que j'ai fais Walson

il n'y a que les boutons transfert qui ne fonctionne pas et que j'aimerai
pour le reste tout fonctionne comme je le veux

il me créer bien un fichier .ini , ajoute des entrer , supprime des entrer manque plus que le transfert
transférer de $listview en l’effaçant de la liste et en le rajoutant à la liste $listview2 ainsi que dans le .ini
#include <GuiConstantsEx.au3>
#include <ListviewConstants.au3>
#include <Array.au3>

Global $ini = @scriptdir & "\testini.ini"
Global $array = _ReadZeIni($ini)        ; lecture du ini => 1ère array ($array) pour stocker les infos
If @error Then                  ; si le ini est absent, corrompu ou vide
   FileCopy($ini, @scriptdir & "\test.bak")    ; sauvegarde si corrompu
   FileDelete($ini)        ; recréation nouveau ini
   Dim $array[0][2]      ; array par défaut



EndIf
; _ArrayDisplay($array)

$gui = GUICreate("liste des Litiges", 582, 280, 100, 20, -1)
GUISetBkColor(0x99B4D1)
$listview2 = GUICtrlCreateListView("|" &"soft", 370, 40, 200, 130, $LVS_NOCOLUMNHEADER)
$listview = GUICtrlCreateListView("|" &"soft", 10, 40, 200, 130, $LVS_NOCOLUMNHEADER)
GUICtrlSendMsg($listview, $LVM_SETCOLUMNWIDTH, 0, 80)
GUICtrlSendMsg($listview, $LVM_SETCOLUMNWIDTH, 1, 320)


; remplissage de la listview
Dim $ligne[UBound($array)]            ; 2ème array ($ligne) pour stocker les handles des items
For $i = 0 To UBound($array)-1
   $ligne[$i] = GUICtrlCreateListViewItem($array[$i][0] &"|" & $array[$i][1], $listview)
   GUICtrlSetImage(-1, $array[$i][1], -0)
Next

$ajoute = GuiCtrlCreateButton("Ajouter", 30, 220, 120, 25)
$degage = GuiCtrlCreateButton("Supprimer", 250, 130, 80, 25)
$Nserie = GUICtrlCreateInput("", 30, 190, 120, 25)
$Transferer = GuiCtrlCreateButton("Tranférer >>>", 250, 70, 80, 25)
$Transferer = GuiCtrlCreateButton("<<< Tranférer", 250, 100, 80, 25)
$Label = GUICtrlCreateLabel("Litige à traiter", 40, 20, 200, 25)
$Label = GUICtrlCreateLabel("Litige Résolu", 400, 20, 200, 25)
GUISetState()


While 1
$msg = GUIGetMsg()
Switch $msg

    Case  -3
    _WriteInZeIni($ini)
       Exit

    Case $degage
        $index = ControlListView($gui, "", $listview, "GetSelected")
    If $ligne <>"" Then
            GUICtrlDelete($ligne[$index])
            _ArrayDelete($ligne, $index)
            _ArrayDelete($array, $index)
        _WriteInZeIni($ini)
    EndIf


    Case $ajoute
    If $ligne = "" Then
        Dim $ligne[1]
        Dim $array[1][2]
        $prevnb = 0
    Else
        $prevnb = UBound($array)
        ReDim $array[$prevnb+1][2]
        ReDim $ligne[$prevnb+1]
    EndIf

    $var = GUICtrlRead($Nserie)
   If $var = "" Then
MsgBox(0,"Erreur",'Veuillez Saisir un Litige')
Return SetError(1)
EndIf
   $TIME = @MDAY &"/"& @MON &"/"& @YEAR
    If not @error Then
        $array[$prevnb][0] = $TIME
        $array[$prevnb][1] = $var
        $ligne[$prevnb] = GUICtrlCreateListViewItem($array[$prevnb][0] &"|" & $array[$prevnb][1], $listview)
        GUICtrlSetImage(-1, $array[$prevnb][1], -1)
        _WriteInZeIni($ini)
 ;_ArrayDisplay($array, "debug")
    EndIf

EndSwitch
Wend

Func _WriteInZeIni($file)
  FileDelete($file)    ; on peut faire un backup avant
   For $i = 0 To UBound($array)-1
    IniWrite($file, $i, $array[$i][0], $array[$i][1])
   Next
EndFunc

Func _ReadZeIni($file)
   $var = IniReadSectionNames($file)
   If @error Then
    SetError(1)
    Return
   EndIf
   Dim $array[$var[0]][2]
   For $i = 1 To $var[0]
    $readsection = IniReadSection($ini, $var[$i])
    $array[$i-1][0] = $readsection[1][0]
    $array[$i-1][1] = $readsection[1][1]
   Next
Return $array
EndFunc

Re: transfert, ajout et suppression d'élément de liste

Posté : ven. 02 nov. 2018 10:17
par walkson
Bonjour,
sans ini, aucune analyse possible
Je ne vous demande pas un ini complet mais un ini ressemblant (même structure) qui me permet de tester votre code

Re: transfert, ajout et suppression d'élément de liste

Posté : ven. 02 nov. 2018 11:57
par yohanb767
voici le .ini

Re: transfert, ajout et suppression d'élément de liste

Posté : ven. 02 nov. 2018 11:57
par yohanb767
[0]
01/11/2018=123
[1]
01/11/2018=789

Re: transfert, ajout et suppression d'élément de liste

Posté : ven. 02 nov. 2018 16:30
par walkson
J'ai trouvé une erreur Return SetError(1)
Return ne fonctionne que dans une fonction.
Il y a aussi des choses bizarres comme GUICtrlSetImage() ???
Pour le reste, je suis resté dans votre état d'esprit bien que personnellement j'utilise WM_NOTIFY pour les listviews (voir l'exemple de _GUICtrlListView_GetHotItem() )
Un conseil pour finir, par précaution je demanderais un enregistrement du Ini à la fermeture de la gui et sans le modifier en même temps que la listview pour éviter les erreurs de manipulation (un peu comme Excel Word ou autres)
J'ai pas tout vérifié (trop fainéant)

Code : Tout sélectionner

#include <GuiConstantsEx.au3>
#include <ListviewConstants.au3>
#include <Array.au3>

Global $ini = @scriptdir & "\testini.ini"
Global $array = _ReadZeIni($ini)        ; lecture du ini => 1ère array ($array) pour stocker les infos
If @error Then                  ; si le ini est absent, corrompu ou vide
   FileCopy($ini, @scriptdir & "\test.bak")    ; sauvegarde si corrompu
   FileDelete($ini)        ; recréation nouveau ini
   Dim $array[0][2]      ; array par défaut



EndIf
; _ArrayDisplay($array)

$gui = GUICreate("liste des Litiges", 582, 280, -1, -1, -1)
GUISetBkColor(0x99B4D1)
$listview2 = GUICtrlCreateListView("|" &"soft", 370, 40, 200, 130, $LVS_NOCOLUMNHEADER,BitOR($LVS_EX_GRIDLINES,$LVS_EX_FULLROWSELECT))
$listview = GUICtrlCreateListView("|" &"soft", 10, 40, 200, 130, $LVS_NOCOLUMNHEADER,BitOR($LVS_EX_GRIDLINES,$LVS_EX_FULLROWSELECT))
GUICtrlSendMsg($listview, $LVM_SETCOLUMNWIDTH, 0, 80)
GUICtrlSendMsg($listview, $LVM_SETCOLUMNWIDTH, 1, 320)
GUICtrlSendMsg($listview2, $LVM_SETCOLUMNWIDTH, 0, 80)
GUICtrlSendMsg($listview2, $LVM_SETCOLUMNWIDTH, 1, 320)

; remplissage de la listview
Dim $ligne[UBound($array)]            ; 2ème array ($ligne) pour stocker les handles des items
For $i = 0 To UBound($array)-1
   $ligne[$i] = GUICtrlCreateListViewItem($array[$i][0] &"|" & $array[$i][1], $listview)
   ;GUICtrlSetImage(-1, $array[$i][1], -0) => image ???
Next

$ajoute = GuiCtrlCreateButton("Ajouter", 30, 220, 120, 25)
$degage = GuiCtrlCreateButton("Supprimer", 250, 130, 80, 25)
$Nserie = GUICtrlCreateInput("", 30, 190, 120, 25)
$Transferer = GuiCtrlCreateButton("<<< Tranférer >>>", 240, 70, 100, 25)
$Label = GUICtrlCreateLabel("Litige à traiter", 40, 10, 200, 25)
$Label = GUICtrlCreateLabel("Litige Résolu", 400, 10, 200, 25)
GUISetState()


While 1
$msg = GUIGetMsg()
Switch $msg

    Case  -3
    _WriteInZeIni($ini)
       Exit
	Case $Transferer
		$itemID = GUICtrlRead($listview); ID de l'item
		If $itemID > 0 Then
		$item = GUICtrlRead(GUICtrlRead($listview));valeur text de l'item
		GUICtrlDelete($itemID)
		GUICtrlCreateListViewItem($item, $listview2)
		EndIf
		$itemID = GUICtrlRead($listview2); ID de l'item
		If $itemID > 0 Then
		$item = GUICtrlRead(GUICtrlRead($listview2));valeur text de l'item
		GUICtrlDelete($itemID)
		GUICtrlCreateListViewItem($item, $listview)
		EndIf
		$itemID = 0
    Case $degage
        $index = ControlListView($gui, "", $listview, "GetSelected")
    If $ligne <>"" Then
            GUICtrlDelete($ligne[$index])
            _ArrayDelete($ligne, $index)
            _ArrayDelete($array, $index)
        _WriteInZeIni($ini)
         EndIf


    Case $ajoute
    If $ligne = "" Then
        Dim $ligne[1]
        Dim $array[1][2]
        $prevnb = 0
    Else
        $prevnb = UBound($array)
        ReDim $array[$prevnb+1][2]
        ReDim $ligne[$prevnb+1]
         EndIf

    $var = GUICtrlRead($Nserie)
        If $var = "" Then
		MsgBox(0,"Erreur",'Veuillez Saisir un Litige')
		;Return SetError(1) => erreur à sup
		Else
        $TIME = @MDAY &"/"& @MON &"/"& @YEAR
			If not @error Then
				$array[$prevnb][0] = $TIME
				$array[$prevnb][1] = $var
				$ligne[$prevnb] = GUICtrlCreateListViewItem($array[$prevnb][0] &"|" & $array[$prevnb][1], $listview)
				;GUICtrlSetImage(-1, $array[$prevnb][1], -1) => image ????
				_WriteInZeIni($ini)
				GUICtrlSetData($Nserie,"")
			EndIf
		EndIf
EndSwitch
Wend

Func _WriteInZeIni($file)
  FileDelete($file)    ; on peut faire un backup avant
   For $i = 0 To UBound($array)-1
    IniWrite($file, $i, $array[$i][0], $array[$i][1])
   Next
EndFunc

Func _ReadZeIni($file)
   $var = IniReadSectionNames($file)
   If @error Then
    SetError(1)
    Return
   EndIf
   Dim $array[$var[0]][2]
   For $i = 1 To $var[0]
    $readsection = IniReadSection($ini, $var[$i])
    $array[$i-1][0] = $readsection[1][0]
    $array[$i-1][1] = $readsection[1][1]
   Next
Return $array
EndFunc :P 
Pour le transfère, il n'y a qu'un bouton. Le choix de la copie (vers la droite ou l’inverse) se fait par la sélection de l'item de la listview

Re: transfert, ajout et suppression d'élément de liste

Posté : ven. 02 nov. 2018 17:07
par yohanb767
merci Walkson , tu vas dire que je suis chiant mais j'aurai voulu que ce que l'on transfert à gauche reste en mémoire donc enregistré dans le .ini

promis je ne t'embête plus après et je continu de mon côté à chercher de toute façon

merci de ta patience

Re: transfert, ajout et suppression d'élément de liste

Posté : ven. 02 nov. 2018 17:42
par walkson
et il y a une grosse erreur $ligne <>"" sachant que $ligne est un array
idem pour $ligne = "" C'est forcement $ligne[quelquechose]

Re: transfert, ajout et suppression d'élément de liste

Posté : ven. 02 nov. 2018 19:30
par walkson
J'ai trouvé d’autres bugs...
En espérant que cela fonctionne (et que vous puissiez passer un bon weekend :lol: )
#include <GuiConstantsEx.au3>
#include <ListviewConstants.au3>
#include <Array.au3>

Global $ini = @ScriptDir & "\testini.ini"
Global $array = _ReadZeIni($ini) ; lecture du ini => 1ère array ($array) pour stocker les infos
If @error Then ; si le ini est absent, corrompu ou vide
   FileCopy($ini, @ScriptDir & "\test.bak") ; sauvegarde si corrompu
   FileDelete($ini) ; recréation nouveau ini
   Dim $array[0][2] ; array par défaut



EndIf
; _ArrayDisplay($array)

$gui = GUICreate("liste des Litiges", 582, 280, -1, -1, -1)
GUISetBkColor(0x99B4D1)
Global $listview2 = GUICtrlCreateListView("|" & "soft", 370, 40, 200, 130, $LVS_NOCOLUMNHEADER, BitOR($LVS_EX_GRIDLINES, $LVS_EX_FULLROWSELECT))
Global $listview = GUICtrlCreateListView("|" & "soft", 10, 40, 200, 130, $LVS_NOCOLUMNHEADER, BitOR($LVS_EX_GRIDLINES, $LVS_EX_FULLROWSELECT))
GUICtrlSendMsg($listview, $LVM_SETCOLUMNWIDTH, 0, 80)
GUICtrlSendMsg($listview, $LVM_SETCOLUMNWIDTH, 1, 320)
GUICtrlSendMsg($listview2, $LVM_SETCOLUMNWIDTH, 0, 80)
GUICtrlSendMsg($listview2, $LVM_SETCOLUMNWIDTH, 1, 320)

; remplissage de la listview
Dim $ligne[UBound($array)] ; 2ème array ($ligne) pour stocker les handles des items
For $i = 0 To UBound($array) - 1
   $ligne[$i] = GUICtrlCreateListViewItem($array[$i][0] & "|" & $array[$i][1], $listview)
   ;GUICtrlSetImage(-1, $array[$i][1], -0) => image ???
Next

$ajoute = GUICtrlCreateButton("Ajouter", 30, 220, 120, 25)
$degage = GUICtrlCreateButton("Supprimer", 250, 130, 80, 25)
$Nserie = GUICtrlCreateInput("", 30, 190, 120, 25)
$Transferer = GUICtrlCreateButton("<<< Tranférer >>>", 240, 70, 100, 25)
$Label = GUICtrlCreateLabel("Litige à traiter", 40, 10, 200, 25)
$Label = GUICtrlCreateLabel("Litige Résolu", 400, 10, 200, 25)
GUISetState()


While 1
   $msg = GUIGetMsg()
   Switch $msg

      Case -3
         _WriteInZeIni($ini)
         Exit
      Case $Transferer
         $itemID = GUICtrlRead($listview) ; ID de l'item
         If $itemID > 0 Then
            $item = GUICtrlRead(GUICtrlRead($listview)) ;valeur text de l'item
            $index = ControlListView($gui, "", $listview, "GetSelected")
            _ArrayDelete($ligne, $index)
            _ArrayDelete($array, $index)
            _WriteInZeIni($ini)
            GUICtrlDelete($itemID)
            GUICtrlCreateListViewItem($item, $listview2)
            ;_ArrayDisplay($array)
            ;_ArrayDisplay($ligne)
         EndIf
         $itemID = GUICtrlRead($listview2) ; ID de l'item
         If $itemID > 0 Then
            $item = GUICtrlRead(GUICtrlRead($listview2)) ;valeur text de l'item
            GUICtrlDelete($itemID)
            GUICtrlCreateListViewItem($item, $listview)
            _ArrayAdd($array, StringTrimRight($item, 1))
            _ArrayAdd($ligne, $itemID)
            _WriteInZeIni($ini)
            ;_ArrayDisplay($array)
            ;_ArrayDisplay($ligne)
         EndIf
         $itemID = 0
      Case $degage
         $index = ControlListView($gui, "", $listview, "GetSelected")
         Local $rep = 0
         If IsArray($ligne) Then $rep = 1
         If $rep = 1 And $index <> "" Then
            GUICtrlDelete($ligne[$index])
            _ArrayDelete($ligne, $index)
            _ArrayDelete($array, $index)
            _WriteInZeIni($ini)
         EndIf


      Case $ajoute
         $rep = 0
         If IsArray($ligne) Then $rep = 1
         If $rep = 0 Then
            Dim $ligne[1]
            Dim $array[1][2]
            $prevnb = 0
         Else
            $prevnb = UBound($array)
            ReDim $array[$prevnb + 1][2]
            ReDim $ligne[$prevnb + 1]
         EndIf

         $var = GUICtrlRead($Nserie)
         If $var = "" Then
            MsgBox(0, "Erreur", 'Veuillez Saisir un Litige')
            ;Return SetError(1) => erreur à sup
         Else
            $TIME = @MDAY & "/" & @MON & "/" & @YEAR
            If Not @error Then
               $array[$prevnb][0] = $TIME
               $array[$prevnb][1] = $var
               $ligne[$prevnb] = GUICtrlCreateListViewItem($array[$prevnb][0] & "|" & $array[$prevnb][1], $listview)
               ;GUICtrlSetImage(-1, $array[$prevnb][1], -1) => image ????
               _WriteInZeIni($ini)
               GUICtrlSetData($Nserie, "")
            EndIf
         EndIf
   EndSwitch
WEnd

Func _WriteInZeIni($file)
   FileDelete($file) ; on peut faire un backup avant
   For $i = 0 To UBound($array) - 1
      IniWrite($file, $i, $array[$i][0], $array[$i][1])
   Next
   If Not FileExists($file) Then FileWrite($file,"") ;quand array est vide
EndFunc   ;==>_WriteInZeIni

Func _ReadZeIni($file)
   $var = IniReadSectionNames($file)
   If @error Then
      Return SetError(1)
   EndIf
   Dim $array[$var[0]][2]
   For $i = 1 To $var[0]
      $readsection = IniReadSection($ini, $var[$i])
      $array[$i - 1][0] = $readsection[1][0]
      $array[$i - 1][1] = $readsection[1][1]
   Next
   Return $array
EndFunc   ;==>_ReadZeIni

 
[EDIT] J'ai trouvé d'autres problèmes et modifié le code en fonction (quand la listeview est vide, le ini était supprimé)
C'est vraiment dommage de ne pas utiliser Func WM_NOTIFY($hWnd, $iMsg, $iwParam, $ilParam) car d'un seul clic, on a l'item et sa valeur et un double clic (ou un clic droit), on peut supprimer ou déplacer l'item sélectionné (ou tout ce que l'on veut !). Beaucoup de bugs n'existeraient plus !

Re: transfert, ajout et suppression d'élément de liste

Posté : ven. 02 nov. 2018 19:49
par yohanb767
merci Walkson

bon week end à vous aussi
je vais regarder ce soir

Re: transfert, ajout et suppression d'élément de liste

Posté : ven. 02 nov. 2018 23:35
par yohanb767
effectivement il y avait quelques bugs

le point bloquant et qu'il ne garde pas en mémoire ce qui a été transferé dans la listview2
quand je rappel le script me garde en mémoire que ce qu'il y a dans la listview seulement

si tu as une piste a me donner ou une solution
c'est frustrant d'être si proche de ce que je souhaite

Re: transfert, ajout et suppression d'élément de liste

Posté : sam. 03 nov. 2018 01:36
par walkson
Vous avez vu mon dernier post et sa modification ?

Re: transfert, ajout et suppression d'élément de liste

Posté : sam. 03 nov. 2018 10:36
par yohanb767
oui j'ai bien vu le dernier post mais je me demande comment faire pour qu'il garde en mémoire ce que l'on transfert

Re: transfert, ajout et suppression d'élément de liste

Posté : sam. 03 nov. 2018 16:22
par walkson
Bonjour,
Pour la Listview de gauche, elle est enregistrée à chaque modification
Pour la Listview de droite, je pense à un autre Ini enregistré en fermant le programme. Vous enregistrez la Lisview dans un array avec cette fonction Func LisviewToArray($ListView) (le code est en dessous avec un exemple) et vous utilisez _WriteInZeIni($file) pour écrire l'Ini. Vous pourriez modifier _WriteInZeIni($file) en _WriteInZeIni($file, $array) pour le rendre polyvalent
Ne pas oublier les includes.
Il y a _GUICtrlListView_AddArray ( $hWnd, ByRef $aItems ) pour charger les listviews mais il ne fonctionne pas avec votre configuration
Func LisviewToArray($ListView) est utilisable quelque soit le nombre de colonnes et de lignes
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
;===================== Indispensable pour la fonction =================================
#include <GuiListView.au3>
#include <Array.au3>
;==========================================================================

Global $Form1 = GUICreate("Form1", 409, 334, 691, 192)
Global $ListView1 = GUICtrlCreateListView("|", 32, 16, 161, 233)
Global $ListView1_0 = GUICtrlCreateListViewItem("aa", $ListView1)
Global $ListView1_1 = GUICtrlCreateListViewItem("bb", $ListView1)
Global $ListView1_2 = GUICtrlCreateListViewItem("", $ListView1)
Global $ListView1_3 = GUICtrlCreateListViewItem("dd", $ListView1)
Global $ListView1_4 = GUICtrlCreateListViewItem("ee", $ListView1)
Global $Button1 = GUICtrlCreateButton("Button1", 64, 280, 97, 33)
Global $ListView2 = GUICtrlCreateListView("|||||", 224, 16, 153, 233)
Global $ListView2_0 = GUICtrlCreateListViewItem("AA|11|PP|88|WW", $ListView2)
Global $ListView2_1 = GUICtrlCreateListViewItem("bb|22|TT", $ListView2)
Global $ListView2_2 = GUICtrlCreateListViewItem("cc|33|RR|4", $ListView2)
Global $ListView2_3 = GUICtrlCreateListViewItem("ee|44|ZZ", $ListView2)
Global $Button2 = GUICtrlCreateButton("Button1", 260, 282, 97, 33)
GUISetState(@SW_SHOW)
While 1
 $nMsg = GUIGetMsg()
 Switch $nMsg
  Case $GUI_EVENT_CLOSE
   Exit

    Case $Button1
       _ArrayDisplay(LisviewToArray($ListView1))
    Case $Button2
       _ArrayDisplay(LisviewToArray($ListView2))
 EndSwitch
WEnd


Func LisviewToArray($ListView)
   $nbLigne = _GUICtrlListView_GetItemCount($ListView)
   $nbCol = _GUICtrlListView_GetColumnCount ( $ListView )
   Local $TT
   If $nbCol > 1 Then
      Local $arrayA[0][$nbCol]
      For $i = 0 To $nbLigne - 1
         For $y = 0 To $nbCol - 1
         $rep = _GUICtrlListView_GetItem ( $ListView, $i , $y )
         $TT &= $rep[3] &"|"
         Next
         _ArrayAdd($arrayA, StringTrimRight($TT,1))
         $TT = ""
      Next

   Else
      Local $arrayA[0]
      For $i = 0 To $nbLigne - 1
         $rep = _GUICtrlListView_GetItem ( $ListView, $i )
         _ArrayAdd($arrayA, $rep[3])
      Next
   EndIf

   Return $arrayA
EndFunc

Re: transfert, ajout et suppression d'élément de liste

Posté : sam. 03 nov. 2018 23:09
par yohanb767
merci beaucoup pour tout !

cela reste compliqué pour moi je ne suis pas très à l'aise encore avec vos solutions
je pensais bien à un deuxiéme .ini , ma difficulté et de le caser dans le script (création du .ini , lecture et enregistrement) avec les Array
je continu à tester de mon côté

Re: transfert, ajout et suppression d'élément de liste

Posté : dim. 04 nov. 2018 15:50
par walkson
Bonjour,
Un poil plus simple
#include <GuiConstantsEx.au3>
#include <ListviewConstants.au3>
#include <Array.au3>
#include <GuiListView.au3>
#include <WindowsConstants.au3>
#include <GuiStatusBar.au3>
Global $ini = @ScriptDir & "\testini.ini"
Global $iniG = @ScriptDir & "\testiniG.ini"
If Not FileExists($iniG) Then FileWrite($iniG,"")
If Not FileExists($ini) Then FileWrite($ini,"")
Global $arrayG = _ReadZeIni($iniG)
Global $array = _ReadZeIni($ini) ; lecture du ini => 1ère array ($array) pour stocker les infos
Global $itemG = -1, $itemD = -1
$gui = GUICreate("liste des Litiges", 582, 280, -1, -1, -1)
GUISetBkColor(0x99B4D1)
Global $listview2 = GUICtrlCreateListView("|" & "soft", 370, 40, 200, 130, $LVS_NOCOLUMNHEADER, BitOR($LVS_EX_GRIDLINES, $LVS_EX_FULLROWSELECT))
Global $listview = GUICtrlCreateListView("|" & "soft", 10, 40, 200, 130, $LVS_NOCOLUMNHEADER, BitOR($LVS_EX_GRIDLINES, $LVS_EX_FULLROWSELECT))
GUICtrlSendMsg($listview, $LVM_SETCOLUMNWIDTH, 0, 80)
GUICtrlSendMsg($listview, $LVM_SETCOLUMNWIDTH, 1, 320)
GUICtrlSendMsg($listview2, $LVM_SETCOLUMNWIDTH, 0, 80)
GUICtrlSendMsg($listview2, $LVM_SETCOLUMNWIDTH, 1, 320)
_GUICtrlListView_AddArray ($listview,$array)
_GUICtrlListView_AddArray ($listview2,$arrayG)
$ajoute = GUICtrlCreateButton("Ajouter", 30, 220, 120, 25)
$degage = GUICtrlCreateButton("Supprimer", 250, 130, 80, 25)
$Nserie = GUICtrlCreateInput("", 30, 190, 120, 25)
$Transferer = GUICtrlCreateButton("Tranférer >>>", 240, 70, 100, 25)
$TransfererG = GUICtrlCreateButton("<<< Tranférer", 240, 100, 100, 25)
$Label = GUICtrlCreateLabel("Litige à traiter", 40, 10, 200, 25)
$Label = GUICtrlCreateLabel("Litige Résolu", 400, 10, 200, 25)
GUISetState()
While 1
   $msg = GUIGetMsg()
   Switch $msg

      Case -3
         $rep = MsgBox(4 + 32,"Fermeture du programme","Voulez vous enregistrer ?",0,$gui)
         If $rep = 6 Then
            $arrayList =  LisviewToArray($listview)
            _WriteInZeIni($ini,$arrayList)
            $arrayList =  LisviewToArray($listview2)
            _WriteInZeIni($iniG,$arrayList)
         EndIf
         Exit
      Case $Transferer
         $itemG = _GUICtrlListView_GetNextItem($listview);item sélectionné
         If $itemG > -1 Then
            _GUICtrlListView_CopyItems(GUICtrlGetHandle($listview), GUICtrlGetHandle($listview2), 1)
         EndIf
      Case $TransfererG
         $itemD = _GUICtrlListView_GetNextItem($listview2)
         If $itemD > -1 Then
            _GUICtrlListView_CopyItems(GUICtrlGetHandle($listview2), GUICtrlGetHandle($listview), 1)
         EndIf
      Case $degage
         $itemS = _GUICtrlListView_GetNextItem($listview)
         If $itemS > -1 Then _GUICtrlListView_DeleteItem ( $listview, $itemS )
          $itemS = - 1
      Case $ajoute

         $var = GUICtrlRead($Nserie)
         If $var = "" Then
            MsgBox(0, "Erreur", 'Veuillez Saisir un Litige')
         Else
            $TIME = @MDAY & "/" & @MON & "/" & @YEAR
               $nbLigne = _GUICtrlListView_GetItemCount($listview)
                _GUICtrlListView_AddItem($listview,$TIME )
                _GUICtrlListView_AddSubItem($listview,$nbLigne, $var,1 )
               GUICtrlSetData($Nserie, "")
               GUICtrlSetState($Nserie,$GUI_FOCUS )
         EndIf


   EndSwitch
WEnd
Func _WriteInZeIni($file, $array)
   FileDelete($file)
   FileWrite($file,"")
   For $i = 0 To UBound($array) - 1
      IniWrite($file, $i, $array[$i][0], $array[$i][1])
   Next
EndFunc   ;==>_WriteInZeIni

Func _ReadZeIni($file)
   $var = IniReadSectionNames($file)
   If @error Then
      Return SetError(1)
   EndIf
   Dim $array[$var[0]][2]
   For $i = 1 To $var[0]
      $readsection = IniReadSection($file, $var[$i])
      $array[$i - 1][0] = $readsection[1][0]
      $array[$i - 1][1] = $readsection[1][1]
   Next
   Return $array
EndFunc   ;==>_ReadZeIni
Func LisviewToArray($ListView)
   $nbLigne = _GUICtrlListView_GetItemCount($ListView)
   $nbCol = _GUICtrlListView_GetColumnCount ( $ListView )
   Local $TT
   If $nbCol > 1 Then
      Local $arrayA[0][$nbCol]
      For $i = 0 To $nbLigne - 1
         For $y = 0 To $nbCol - 1
         $rep = _GUICtrlListView_GetItem ( $ListView, $i , $y )
         $TT &= $rep[3] &"|"
         Next
         _ArrayAdd($arrayA, StringTrimRight($TT,1))
         $TT = ""
      Next

   Else
      Local $arrayA[0]
      For $i = 0 To $nbLigne - 1
         $rep = _GUICtrlListView_GetItem ( $ListView, $i )
         _ArrayAdd($arrayA, $rep[3])
      Next
   EndIf

   Return $arrayA
EndFunc
J'ai rajouté les ini pour ceux qui veulent tester
Dans la famille des ListViews, il a https://www.autoitscript.com/forum/topi ... -6-oct-18/ qui vaut le coup d’œil

Re: transfert, ajout et suppression d'élément de liste  

Posté : dim. 04 nov. 2018 23:27
par yohanb767
Merci Walkson de ta patience et ton professionnalisme

je vais avoir d'autre chose à mettre en place et à faire évoluer mais mon point bloquant est résolu et grâce a ton script j'en apprend beaucoup