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

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Répondre
yohanb767
Niveau 5
Niveau 5
Messages : 117
Enregistré le : mer. 28 déc. 2016 14:09
Status : Hors ligne

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

#1

Message 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
yohanb767
Niveau 5
Niveau 5
Messages : 117
Enregistré le : mer. 28 déc. 2016 14:09
Status : Hors ligne

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

#2

Message 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
Avatar du membre
walkson
Modérateur
Modérateur
Messages : 1020
Enregistré le : ven. 12 août 2011 19:49
Localisation : Hurepoix
Status : Hors ligne

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

#3

Message 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
Cordialement,
Walkson
"Horas non numero nisi serenas " Le canon de midi
(Je ne compte que les heures heureuses)
yohanb767
Niveau 5
Niveau 5
Messages : 117
Enregistré le : mer. 28 déc. 2016 14:09
Status : Hors ligne

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

#4

Message 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
Avatar du membre
walkson
Modérateur
Modérateur
Messages : 1020
Enregistré le : ven. 12 août 2011 19:49
Localisation : Hurepoix
Status : Hors ligne

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

#5

Message 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
Cordialement,
Walkson
"Horas non numero nisi serenas " Le canon de midi
(Je ne compte que les heures heureuses)
yohanb767
Niveau 5
Niveau 5
Messages : 117
Enregistré le : mer. 28 déc. 2016 14:09
Status : Hors ligne

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

#6

Message par yohanb767 »

voici le .ini
yohanb767
Niveau 5
Niveau 5
Messages : 117
Enregistré le : mer. 28 déc. 2016 14:09
Status : Hors ligne

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

#7

Message par yohanb767 »

[0]
01/11/2018=123
[1]
01/11/2018=789
Avatar du membre
walkson
Modérateur
Modérateur
Messages : 1020
Enregistré le : ven. 12 août 2011 19:49
Localisation : Hurepoix
Status : Hors ligne

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

#8

Message 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
Cordialement,
Walkson
"Horas non numero nisi serenas " Le canon de midi
(Je ne compte que les heures heureuses)
yohanb767
Niveau 5
Niveau 5
Messages : 117
Enregistré le : mer. 28 déc. 2016 14:09
Status : Hors ligne

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

#9

Message 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
Avatar du membre
walkson
Modérateur
Modérateur
Messages : 1020
Enregistré le : ven. 12 août 2011 19:49
Localisation : Hurepoix
Status : Hors ligne

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

#10

Message par walkson »

et il y a une grosse erreur $ligne <>"" sachant que $ligne est un array
idem pour $ligne = "" C'est forcement $ligne[quelquechose]
Cordialement,
Walkson
"Horas non numero nisi serenas " Le canon de midi
(Je ne compte que les heures heureuses)
Avatar du membre
walkson
Modérateur
Modérateur
Messages : 1020
Enregistré le : ven. 12 août 2011 19:49
Localisation : Hurepoix
Status : Hors ligne

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

#11

Message 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 !
Modifié en dernier par walkson le ven. 02 nov. 2018 20:29, modifié 1 fois.
Raison : Modifié le code
Cordialement,
Walkson
"Horas non numero nisi serenas " Le canon de midi
(Je ne compte que les heures heureuses)
yohanb767
Niveau 5
Niveau 5
Messages : 117
Enregistré le : mer. 28 déc. 2016 14:09
Status : Hors ligne

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

#12

Message par yohanb767 »

merci Walkson

bon week end à vous aussi
je vais regarder ce soir
yohanb767
Niveau 5
Niveau 5
Messages : 117
Enregistré le : mer. 28 déc. 2016 14:09
Status : Hors ligne

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

#13

Message 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
Avatar du membre
walkson
Modérateur
Modérateur
Messages : 1020
Enregistré le : ven. 12 août 2011 19:49
Localisation : Hurepoix
Status : Hors ligne

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

#14

Message par walkson »

Vous avez vu mon dernier post et sa modification ?
Cordialement,
Walkson
"Horas non numero nisi serenas " Le canon de midi
(Je ne compte que les heures heureuses)
yohanb767
Niveau 5
Niveau 5
Messages : 117
Enregistré le : mer. 28 déc. 2016 14:09
Status : Hors ligne

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

#15

Message 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
Avatar du membre
walkson
Modérateur
Modérateur
Messages : 1020
Enregistré le : ven. 12 août 2011 19:49
Localisation : Hurepoix
Status : Hors ligne

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

#16

Message 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
Cordialement,
Walkson
"Horas non numero nisi serenas " Le canon de midi
(Je ne compte que les heures heureuses)
yohanb767
Niveau 5
Niveau 5
Messages : 117
Enregistré le : mer. 28 déc. 2016 14:09
Status : Hors ligne

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

#17

Message 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é
Avatar du membre
walkson
Modérateur
Modérateur
Messages : 1020
Enregistré le : ven. 12 août 2011 19:49
Localisation : Hurepoix
Status : Hors ligne

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

#18

Message 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
Fichiers joints
testiniG.ini
(80 Octets) Téléchargé 1270 fois
testini.ini
(40 Octets) Téléchargé 1274 fois
Modifié en dernier par walkson le dim. 04 nov. 2018 21:54, modifié 1 fois.
Cordialement,
Walkson
"Horas non numero nisi serenas " Le canon de midi
(Je ne compte que les heures heureuses)
yohanb767
Niveau 5
Niveau 5
Messages : 117
Enregistré le : mer. 28 déc. 2016 14:09
Status : Hors ligne

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

#19

Message 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
Répondre