[R] GuiList, aide fonction

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Répondre
Avatar du membre
yanius
Niveau 4
Niveau 4
Messages : 72
Enregistré le : mer. 23 févr. 2011 17:51
Status : Hors ligne

[R] GuiList, aide fonction

#1

Message par yanius »

Bonjour !!

Je faisais des recherches sur les foncions liées aux Listes des Gui, et je suis tombé sur deux fonctions que je ne comprends pas : "_GUICTRLListBox_GetSelItems" et "_GUICtrlListBox_GetSelItemsText" !

Pourriez-vous m'expliquer ces dernières et comment les utiliser (leurs paramètres) ?

Merci d'avance !
Modifié en dernier par yanius le lun. 18 juil. 2011 11:31, modifié 1 fois.
0.110001000000000000000001000
Avatar du membre
mikell
Spammer !
Spammer !
Messages : 6292
Enregistré le : dim. 29 mai 2011 17:32
Localisation : Deep Cévennes
Status : Hors ligne

Re: [..] GuiList, aide fonction

#2

Message par mikell »

Ben les exemples donnés dans l'aide sont très compréhensibles :shock:

Code : Tout sélectionner

#Include <GuiListBox.au3>
_GUICtrlListBox_GetSelItems($myListBox) => renvoie l'emplacement dans la liste des items sélectionnés
_GUICtrlListBox_GetSelItemsText($myListBox) => renvoie le texte des items sélectionnés
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
Avatar du membre
yanius
Niveau 4
Niveau 4
Messages : 72
Enregistré le : mer. 23 févr. 2011 17:51
Status : Hors ligne

Re: [..] GuiList, aide fonction

#3

Message par yanius »

Ok !

Merci beaucoup pour ta réponse !

Eh...juste une dernière question, comment faire pour attribuer à un élément d'un liste, un texte par exemple dans un "Edit", après avoir écrit le texte dans un "Edit" et avoir cliqué sur un boutton (ici $Button3) ?
Est-ce comme cela ?

Code : Tout sélectionner

Case $Button3
            $selitems2 = _GUICtrlListBox_GetSelItemsText($List1)

            $Read = GUICtrlRead($Edit1)
            IniWrite($inifile, $selitems2, "key", $Read)
0.110001000000000000000001000
Avatar du membre
mikell
Spammer !
Spammer !
Messages : 6292
Enregistré le : dim. 29 mai 2011 17:32
Localisation : Deep Cévennes
Status : Hors ligne

Re: [..] GuiList, aide fonction

#4

Message par mikell »

RTFM

Code : Tout sélectionner

_GUICtrlListBox_ReplaceString : Replaces the text of an item
 
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
Avatar du membre
yanius
Niveau 4
Niveau 4
Messages : 72
Enregistré le : mer. 23 févr. 2011 17:51
Status : Hors ligne

Re: [..] GuiList, aide fonction

#5

Message par yanius »

Avec cette fonction, je remplace le nom de l'item !

Alors que moi en fait, je voulais attribuer un texte à un item d'un liste : "Tarte aux cerises" par exemple et à côté je vais associer à cet item sa recette (le texte) dans un edit !
0.110001000000000000000001000
Avatar du membre
mikell
Spammer !
Spammer !
Messages : 6292
Enregistré le : dim. 29 mai 2011 17:32
Localisation : Deep Cévennes
Status : Hors ligne

Re: [..] GuiList, aide fonction

#6

Message par mikell »

Ben là tu peux faire _GUICtrlListBox_ReplaceString avec comme nouveau texte :
$text = GUICtrlListBox_GetSelItemsText($hListBox) & GUICtrlRead($Edit1) )

Mais c'est pas terrible, apparemment ce qu'il te faut c'est pas une ListBox, c'est une ListView à 2 colonnes : colonne 1 => "Tarte aux cerises", colonne 2 => "recette"
Il y a un magnifique exemple ici : http://www.autoitscript.com/forum/topic ... _p__696257

Mais la vue de cet exemple peut amener à penser qu'une bonne solution pourrait aussi être l'affichage de la recette dans une Edit externe si tu cliques "Tarte aux cerises" dans ta Listbox :mrgreen:
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
Avatar du membre
yanius
Niveau 4
Niveau 4
Messages : 72
Enregistré le : mer. 23 févr. 2011 17:51
Status : Hors ligne

Re: [..] GuiList, aide fonction

#7

Message par yanius »

Merci pour le lien :wink: !

Juste une petite aide, après quelques recherches dans les fonctions, je n'ai pas trouvé comment retrouver le " zero based index" de l'item selectionné. Y a t-il un moyen ?
0.110001000000000000000001000
Avatar du membre
mikell
Spammer !
Spammer !
Messages : 6292
Enregistré le : dim. 29 mai 2011 17:32
Localisation : Deep Cévennes
Status : Hors ligne

Re: [..] GuiList, aide fonction

#8

Message par mikell »

Ah oui, le fameux "zero based index"...

Code : Tout sélectionner

_GUICtrlListView_GetSelectedIndices()  [img]http://www.autoitscript.com/forum/public/style_emoticons/autoit/smile.gif[/img]
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
Avatar du membre
yanius
Niveau 4
Niveau 4
Messages : 72
Enregistré le : mer. 23 févr. 2011 17:51
Status : Hors ligne

Re: [..] GuiList, aide fonction

#9

Message par yanius »

Oui c'est ce fameux zero :lol:

Merci pour ton aide mikell, je vais essayer de réunir toutes ces fonctions pour réaliser mon script !!
0.110001000000000000000001000
Avatar du membre
yanius
Niveau 4
Niveau 4
Messages : 72
Enregistré le : mer. 23 févr. 2011 17:51
Status : Hors ligne

Re: [..] GuiList, aide fonction

#10

Message par yanius »

Ah lala, les ListView c'est vraiment pas mon domaine :( !

Donc voilà mon problème :
Je voulais insérer un bouton "supprimer" afin que l'utilisateur puisse supprimer un objet de la ListView. Par ailleurs, à chaque démarrage du programme, ce dernier va récupérer tous les objets de la ListView pour les placer dans celle-ci.
En clair,

Code : Tout sélectionner

$inifile = "List.ini"

$var = IniReadSectionNames($inifile)
If @error Then
    MsgBox(4096, "", "Error occurred, probably no INI file.")
Else
    For $i = 1 To $var[0]
          _GUICtrlListView_AddItem($hListView, $var[$i])
    Next
EndIf

 


Lorsque l'utilisateur supprime un item, il doit donc être également supprimé du fichier .ini (c'est ici que j'ai un problème) !

J'ai essayer de faire ce bout de script, pourtant en vain !

Code : Tout sélectionner

Case $Button3

        $hWndListView = GUICtrlGetHandle($hListView)
        $ItemIndex = _GUICtrlListView_GetSelectedIndices($hWndListView)

        _GUICtrlListView_DeleteItemsSelected($hWndListView)
        $itxt = _GUICtrlListView_GetItemText($hListView, $ItemIndex)

        IniDelete($inifile, $itxt)
Sachant que pour ajouter un item, j'ai fait comme suit :

Code : Tout sélectionner

Case $Button1
        $Input1 = InputBox("Le nom !", "Veuillez entrer le nom de la propriété ou du théorème !")

        If $Input1 = "" Then
            MsgBox(0, "Erreur !", "Veuillez entrer un nom valide !")
        Else
            _GUICtrlListView_AddItem($hListView, $Input1)
            IniWriteSection($inifile, $Input1, "Edit=")
        EndIf
Cela marche très bien pour ajouter un item alors que je bloque pour la phase de suppression !
De l'aide please :lol: !
0.110001000000000000000001000
Avatar du membre
mikell
Spammer !
Spammer !
Messages : 6292
Enregistré le : dim. 29 mai 2011 17:32
Localisation : Deep Cévennes
Status : Hors ligne

Re: [..] GuiList, aide fonction

#11

Message par mikell »

Code : Tout sélectionner

        _GUICtrlListView_DeleteItemsSelected($hWndListView)
        $itxt = _GUICtrlListView_GetItemText($hListView, $ItemIndex)
A priori je dirais que si tu deletes l'item avant de le lire c'est pas top :mrgreen:
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
Avatar du membre
yanius
Niveau 4
Niveau 4
Messages : 72
Enregistré le : mer. 23 févr. 2011 17:51
Status : Hors ligne

Re: [..] GuiList, aide fonction

#12

Message par yanius »

Ah oui lol !!

C'est dans ces moments là que je me sens bête :lol: !
Merci à toi mikell !
0.110001000000000000000001000
Avatar du membre
yanius
Niveau 4
Niveau 4
Messages : 72
Enregistré le : mer. 23 févr. 2011 17:51
Status : Hors ligne

Re: [..] GuiList, aide fonction

#13

Message par yanius »

Euh Oupss, une dernière question (c'est la dernière promis :wink:) !

En fait pour attribuer (par exemple) la recette, je l'ai enregistré dans un fichier ini. En ouvrant ce dernier, on a:

Code : Tout sélectionner

[Tarte aux cerises]
Edit=C'est tout simple, alors il vous faut des cerises et des tartes !
Lorsque que vous avez tous ces ingrédients, mélangez les cerises et la tarte ! Mettez ensuite le tout au four. 
Eh hop c'est prêt (c'est bon mais c'est chaud  :mrgreen: )
Bon je ne suis pas non plus fort en cuisine :lol: !

Pour insérer la recette dans l'Edit qui apparaîtra, j'ai établi ce code :

Code : Tout sélectionner

Case $msg[0] = $hListView
        $hWndListView = GUICtrlGetHandle($hListView)
        $ItemIndex = _GUICtrlListView_GetSelectedIndices($hWndListView)
        $itxt = _GUICtrlListView_GetItemText($hWndListView, $ItemIndex)

        Global $Form1 = GUICreate($itxt, 378, 426, 192, 124)
        Global $Edit = GUICtrlCreateEdit("", 0, 0, 377, 425)

        $rsect = IniReadSection($inifile2, $itxt)

        If @error = 1 Then
            MsgBox(0,"Error", "Error ! Il n'y a rien pour ce théorème !")
        Else
            For $i = 1 To $rsect[0][0]
            GUICtrlSetData(-1, $rsect[$i][1])
            Next
        EndIf
        GUISetState(@SW_SHOW, $Form1)


Pourtant, lorsque je lance le script seul la ligne contenant la clé (dans mon exemple la clé est "Edit") est insérer dans mon Edit : "C'est tout simple, alors il vous faut des cerises et des tartes !"

Où ai-je encore fait une erreur ?
0.110001000000000000000001000
Avatar du membre
zeshrek
Niveau 10
Niveau 10
Messages : 984
Enregistré le : mer. 17 nov. 2010 09:31
Localisation : Sur ma chaise
Status : Hors ligne

Re: [..] GuiList, aide fonction

#14

Message par zeshrek »

Un fichier INI est lu ligne a ligne.
Donc si tu veux mettre des retours a la ligne dans le contenu de la ligne il faut que tu utilises un (ou des) caractere(s) spécial(aux), pour ensuite les transformer en retours a la ligne
Tu peux par exemple utiliser le signe paragraphe -> '§' et on ini resemblera a ceci :

Code : Tout sélectionner

[Tarte aux cerises]
Edit=C'est tout simple, alors il vous faut des cerises et des tartes !§Lorsque que vous avez tous ces ingrédients, mélangez les cerises et la tarte ! Mettez ensuite le tout au four.§Eh hop c'est prêt (c'est bon mais c'est chaud :mrgreen: )
Et dans ton source tu mets la modifs suivante pour remplacer les '§' par des '@CRLF'

Code : Tout sélectionner

GUICtrlSetData(-1, StringReplace($rsect[$i][1],'§',@CrLf))



Tant que j'y suis, on peut savoir ce que fait cette ligne ?

Code : Tout sélectionner

MsgBox(0,"Error", "Error ! Il n'y a rien pour ce théorème !")
je croyais que tu faisais des recettes de cuisine, pas des théorèmes ?!? :shock:
Si vis pacem para bellum
Avatar du membre
mikell
Spammer !
Spammer !
Messages : 6292
Enregistré le : dim. 29 mai 2011 17:32
Localisation : Deep Cévennes
Status : Hors ligne

Re: [..] GuiList, aide fonction

#15

Message par mikell »

Il est mentionné ici qu'une ligne de fichier ini est limitée à 1024 caractères
Donc si la méthode de zeshrek ne marche pas parce que la recette est trop longue, alors tu peux aussi écrire le ini comme ça :

Code : Tout sélectionner

[Tarte aux cerises]
Edit1=C'est tout simple, alors il vous faut des cerises et des tartes !
Edit2=Lorsque que vous avez tous ces ingrédients, mélangez les cerises et la tarte ! 
Edit3=Mettez ensuite le tout au four.
Edit4=Eh hop c'est prêt (c'est bon mais c'est chaud  :mrgreen: )
et récupérer avec

Code : Tout sélectionner

$rsect = IniReadSection($inifile2, $itxt)
$text = ""
For $i = 1 To $rsect[0][0]
$text &= $text & $rsect[$i][1] & @CRLF
GUICtrlSetData(-1, $text)
Next
L'idée est mieux développée par ZDS dans ce post
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
Avatar du membre
yanius
Niveau 4
Niveau 4
Messages : 72
Enregistré le : mer. 23 févr. 2011 17:51
Status : Hors ligne

Re: [..] GuiList, aide fonction

#16

Message par yanius »

Parfait !!

Merci vraiment pour votre aide, j'ai enfin fini mon script :D !

@zeshrek
Je n'ai pris le thème des recettes qu'à titre d'exemple :wink: lol !
0.110001000000000000000001000
Avatar du membre
zeshrek
Niveau 10
Niveau 10
Messages : 984
Enregistré le : mer. 17 nov. 2010 09:31
Localisation : Sur ma chaise
Status : Hors ligne

Re: [..] GuiList, aide fonction

#17

Message par zeshrek »

Il reste aussi la possibilité de combiner les 2 méthodesavec par ex le ini comme ça :

Code : Tout sélectionner

[Tarte aux cerises]
Ingredients = 1 tarte§Des Cerises
Temps=Préparation : 10mn§Cuisson : 30mn
Préparation=Mélangez les cerises et la tarte§Mettez ensuite le tout au four§Eh hop c'est prêt 
Suggestion = Laisser refroidir avant de déguster (c'est bon mais c'est chaud  :mrgreen: )
et récupérer avec

Code : Tout sélectionner

$rsect = IniReadSection($inifile2, $itxt)
$text = ""
For $i = 1 To $rsect[0][0]
$text = $text & $rsect[$i][0] &" : "& StringReplace($rsect[$i][1],'§',@CrLf) & @CRLF
GUICtrlSetData(-1, $text)
Next
L'idée est mieux développée par ZDS dans ce post[/quote]
Comme ca tu peux 'spliter' ta recette en sections, en plus des retours a la ligne. Juste prendre garde a la limite des caracteres...
Si vis pacem para bellum
Répondre