Page 1 sur 1
[R] GuiList, aide fonction
Posté : jeu. 14 juil. 2011 19:42
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 !
Re: [..] GuiList, aide fonction
Posté : jeu. 14 juil. 2011 21:42
par mikell
Ben les exemples donnés dans l'aide sont très compréhensibles
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
Re: [..] GuiList, aide fonction
Posté : jeu. 14 juil. 2011 22:01
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)
Re: [..] GuiList, aide fonction
Posté : ven. 15 juil. 2011 12:53
par mikell
Re: [..] GuiList, aide fonction
Posté : ven. 15 juil. 2011 14:02
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 !
Re: [..] GuiList, aide fonction
Posté : ven. 15 juil. 2011 15:49
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

Re: [..] GuiList, aide fonction
Posté : ven. 15 juil. 2011 20:40
par yanius
Merci pour le lien

!
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 ?
Re: [..] GuiList, aide fonction
Posté : sam. 16 juil. 2011 09:55
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]
Re: [..] GuiList, aide fonction
Posté : sam. 16 juil. 2011 15:38
par yanius
Oui c'est ce fameux zero
Merci pour ton aide mikell, je vais essayer de réunir toutes ces fonctions pour réaliser mon script !!
Re: [..] GuiList, aide fonction
Posté : sam. 16 juil. 2011 17:52
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

!
Re: [..] GuiList, aide fonction
Posté : sam. 16 juil. 2011 20:00
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

Re: [..] GuiList, aide fonction
Posté : sam. 16 juil. 2011 23:11
par yanius
Ah oui lol !!
C'est dans ces moments là que je me sens bête

!
Merci à toi mikell !
Re: [..] GuiList, aide fonction
Posté : lun. 18 juil. 2011 00:11
par yanius
Euh Oupss, une dernière question (c'est la dernière promis

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

!
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 ?
Re: [..] GuiList, aide fonction
Posté : lun. 18 juil. 2011 09:50
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'
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 ?!?

Re: [..] GuiList, aide fonction
Posté : lun. 18 juil. 2011 11:01
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
Re: [..] GuiList, aide fonction
Posté : lun. 18 juil. 2011 11:31
par yanius
Parfait !!
Merci vraiment pour votre aide, j'ai enfin fini mon script

!
@zeshrek
Je n'ai pris le thème des recettes qu'à titre d'exemple

lol !
Re: [..] GuiList, aide fonction
Posté : lun. 18 juil. 2011 13:02
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...