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 4
Niveau 4
Messages : 92
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 » jeu. 01 nov. 2018 00:25

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 4
Niveau 4
Messages : 92
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 » jeu. 01 nov. 2018 16:45

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 : 598
Enregistré le : ven. 12 août 2011 18:49
Localisation : Essonne
Status : Hors ligne

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

#3

Message par walkson » jeu. 01 nov. 2018 19:21

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

yohanb767
Niveau 4
Niveau 4
Messages : 92
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 » ven. 02 nov. 2018 00:06

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 : 598
Enregistré le : ven. 12 août 2011 18:49
Localisation : Essonne
Status : Hors ligne

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

#5

Message par walkson » ven. 02 nov. 2018 10:17

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

yohanb767
Niveau 4
Niveau 4
Messages : 92
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 » ven. 02 nov. 2018 11:57

voici le .ini

yohanb767
Niveau 4
Niveau 4
Messages : 92
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 » ven. 02 nov. 2018 11:57

[0]
01/11/2018=123
[1]
01/11/2018=789

Avatar du membre
walkson
Modérateur
Modérateur
Messages : 598
Enregistré le : ven. 12 août 2011 18:49
Localisation : Essonne
Status : Hors ligne

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

#8

Message par walkson » ven. 02 nov. 2018 16:30

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

yohanb767
Niveau 4
Niveau 4
Messages : 92
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 » ven. 02 nov. 2018 17:07

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 : 598
Enregistré le : ven. 12 août 2011 18:49
Localisation : Essonne
Status : Hors ligne

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

#10

Message par walkson » ven. 02 nov. 2018 17:42

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

Avatar du membre
walkson
Modérateur
Modérateur
Messages : 598
Enregistré le : ven. 12 août 2011 18:49
Localisation : Essonne
Status : Hors ligne

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

#11

Message par walkson » ven. 02 nov. 2018 19:30

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

yohanb767
Niveau 4
Niveau 4
Messages : 92
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 » ven. 02 nov. 2018 19:49

merci Walkson

bon week end à vous aussi
je vais regarder ce soir

yohanb767
Niveau 4
Niveau 4
Messages : 92
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 » ven. 02 nov. 2018 23:35

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 : 598
Enregistré le : ven. 12 août 2011 18:49
Localisation : Essonne
Status : Hors ligne

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

#14

Message par walkson » sam. 03 nov. 2018 01:36

Vous avez vu mon dernier post et sa modification ?
Cordialement,
Walkson
"Horas non numero nisi serenas " Le canon de midi

yohanb767
Niveau 4
Niveau 4
Messages : 92
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 » sam. 03 nov. 2018 10:36

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 : 598
Enregistré le : ven. 12 août 2011 18:49
Localisation : Essonne
Status : Hors ligne

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

#16

Message par walkson » sam. 03 nov. 2018 16:22

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

yohanb767
Niveau 4
Niveau 4
Messages : 92
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 » sam. 03 nov. 2018 23:09

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 : 598
Enregistré le : ven. 12 août 2011 18:49
Localisation : Essonne
Status : Hors ligne

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

#18

Message par walkson » dim. 04 nov. 2018 15:50

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é 12 fois
testiniG.ini
(80 Octets) Téléchargé 12 fois
testini.ini
(40 Octets) Téléchargé 9 fois
testini.ini
(40 Octets) Téléchargé 9 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

yohanb767
Niveau 4
Niveau 4
Messages : 92
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 » dim. 04 nov. 2018 23:27

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