[R] Listview élaborée multiselect avec icônes

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Répondre
Julien
Niveau 5
Niveau 5
Messages : 141
Enregistré le : sam. 02 août 2008 17:01
Status : Hors ligne

[R] Listview élaborée multiselect avec icônes

#1

Message par Julien »

Bonjour,

Une personne ayant plus d’expérience que moi pourrait il réaliser ceci (ou me dire que ce n'est pas du tout possible).
► Afficher le texte
Le fonctionnement
-----------------

J'aimerais centrer les icônes des colones 1, 2, 4, 5 et 6.

Un clic sur l'icône de la colone 1 change l'icône et met à jour "Check" dans $Array1 ($Array1[$x][1])
Si l'état est à False les autres colonnes ne peuvent pas être modifiées.

Le colonne 3 ("Nom" dans $Array1 ($Array1[$x][3])) doit être éditable et mettre à jour la valeur dans $Array1

Un clic sur l'icône dans les colonnes 4, 5 et 6 doivent inverser l'icône et respectivement mettre à jour les colonne 4, 5 et 6 de $Array1

Le Gui est en Mode Event activé.

J'espère avoir été assez clair dans mon explication. Pour l'accompagner un petit montage visuel pour à quoi cela pourrait ressembler en pièce jointe.

Je sais exactement ce que je veux mais je n'y parviens pas, j'y ai passé beaucoup de temps mais cela ne ressemble à rien.

D'avance merci à celui ou celle qui prendra du temps pour regarder cette demande.
Fichiers joints
Gui.png
Gui.png (6.1 Kio) Vu 3180 fois
Modifié en dernier par Julien le ven. 27 juil. 2012 15:10, modifié 9 fois.
Avatar du membre
timmalos
Niveau 11
Niveau 11
Messages : 1970
Enregistré le : dim. 18 mai 2008 15:16
Status : Hors ligne

Re: [..] Listview élaboré multiselect avec icône

#2

Message par timmalos »

Utilisez les balises code , votre message est tellement un pavé indéchiffrable que peu de gens vont faire l'effort de le lire, et je n'en ferai pas parti.
Julien
Niveau 5
Niveau 5
Messages : 141
Enregistré le : sam. 02 août 2008 17:01
Status : Hors ligne

Re: [..] Listview élaboré multiselect avec icône

#3

Message par Julien »

J'ai édité mon premier message, cela suffit il ?
Avatar du membre
mikell
Spammer !
Spammer !
Messages : 6292
Enregistré le : dim. 29 mai 2011 17:32
Localisation : Deep Cévennes
Status : Hors ligne

Re: [..] Listview élaborée multiselect avec icônes

#4

Message par mikell »

Le problème c'est que $LVS_EX_CHECKBOXES n'autorise qu'une seule checkbox par ligne de listview
Tu peux toujours faire des pseudo-checkboxes, comme ici
http://www.autoitscript.com/forum/topic ... ntry739616
Après, un clic sur un subitem peut à la fois changer d'image, basculer une variable true/false, mettre à jour une array, etc, le clic étant détecté par un GUIRegisterMsg($WM_NOTIFY, "WM_NOTIFY") => voir le détail dans l'exemple de l'aide pour _GUICtrlListView_Create

Pour rendre un subitem éditable, voilà un modèle qui vient du forum US
► Afficher le texte
En principe ça devrait suffire pour que tu puisses avancer dans ton script Image
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
Julien
Niveau 5
Niveau 5
Messages : 141
Enregistré le : sam. 02 août 2008 17:01
Status : Hors ligne

Re: [..] Listview élaborée multiselect avec icônes

#5

Message par Julien »

Bonjour,

Merci pour ces sources.

Petite question, est il possible d'aligner (de centrer) une image dans une colonne ?

D'avance merci.
Julien
Niveau 5
Niveau 5
Messages : 141
Enregistré le : sam. 02 août 2008 17:01
Status : Hors ligne

Re: [..] Listview élaborée multiselect avec icônes

#6

Message par Julien »

J'ai cherché plusieurs heures et il semblerait que changer l'alignement des images dans une listview soit impossible.

Voici mon résultat :
► Afficher le texte
Je n'arrive pas à corriger :

- l'alignement des contrôle Edit lors de la modification (corriger dans le code, merci)
- la latence sur le "click" des icônes (presque obligé de faire du double click)

Dans l'ensemble c'est fonctionnel mais je trouve cela assez moche.

Qu'en pensez-vous et pouvez-vous m'aider à corriger les défauts ?

D'avance merci.
Modifié en dernier par Julien le jeu. 26 juil. 2012 14:34, modifié 2 fois.
Avatar du membre
mikell
Spammer !
Spammer !
Messages : 6292
Enregistré le : dim. 29 mai 2011 17:32
Localisation : Deep Cévennes
Status : Hors ligne

Re: [..] Listview élaborée multiselect avec icônes

#7

Message par mikell »

Julien a écrit :- l'alignement des contrôle Edit lors de la modification
Ce positionnement se fait à la création des edits, dans la fonction WM_NOTIFY :

Code : Tout sélectionner

$hEdit = _GUICtrlEdit_Create($hGUI, $iItemText, $aRect[0] [color=#BF4000]+ 12[/color], $aRect[1][color=#BF4000] + 8[/color], $iLen + 10, 17, $Style)
Pour l'esthétique, si les colonnes doivent rester de largeur constante, pourquoi simplement ne pas afficher les headers ou "tricher" en mettant des labels à la place
Sinon je trouve pas que le temps de latence sur le clic est si long que ça, à partir du moment où la listview a le focus
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
Julien
Niveau 5
Niveau 5
Messages : 141
Enregistré le : sam. 02 août 2008 17:01
Status : Hors ligne

Re: [..] Listview élaborée multiselect avec icônes

#8

Message par Julien »

mikell a écrit :Pour l'esthétique, si les colonnes doivent rester de largeur constante, pourquoi simplement ne pas afficher les headers ou "tricher" en mettant des labels à la place
Sinon je trouve pas que le temps de latence sur le clic est si long que ça, à partir du moment où la listview a le focus
Merci Mikell !
Pour la latence il s'agit bien d'une perte de focus.

Pour les labels formidable je n'y avait pas pensé du tout, du coup j'ai ajouté des colonnes pour palier à l'alignement.

Reste maintenant 2 petites choses :

- Cette histoire de focus, comment porter le focus sur la listview et l'enlever lors du passage de la souris dessus ?

J'ai rajouter ceci (dans la fonction WM_NOTIFY) :

Code : Tout sélectionner

Case -121
    ControlFocus("", "", $hWndFrom)
- Pour la première colonne je ne parviens pas à juste afficher l'image lors de la séléction à la souris j'ai un effet de surbrillance, comment l'annuler ?

Voila le code complet mis à jour :
► Afficher le texte
Fichiers joints
Le résultat en image
Le résultat en image
Résultat.png (6.32 Kio) Vu 3076 fois
Avatar du membre
blacksoul305
Membre émérite
Membre émérite
Messages : 957
Enregistré le : ven. 18 mars 2011 11:49
Localisation : Au pays des programmeurs.
Status : Hors ligne

Re: [..] Listview élaborée multiselect avec icônes

#9

Message par blacksoul305 »

Salut,
Julien a écrit :- Cette histoire de focus, comment porter le focus sur la listview et l'enlever lors du passage de la souris dessus ?
Moi j'aurai bien vu un MouseGetPos() non ?
Étudiant en 2ème année de Licence Informatique.
Avatar du membre
mikell
Spammer !
Spammer !
Messages : 6292
Enregistré le : dim. 29 mai 2011 17:32
Localisation : Deep Cévennes
Status : Hors ligne

Re: [..] Listview élaborée multiselect avec icônes

#10

Message par mikell »

Julien a écrit :- Cette histoire de focus, comment porter le focus sur la listview et l'enlever lors du passage de la souris dessus ?
2 solutions
- le GUIRegisterMsg WM_MOUSEHOVER où tu surveilles les coordonnées du pointeur de la souris
- ou nettement plus simple, le GuiGetCursorInfo
avec un GUICtrlSetState($listview, $GUI_FOCUS) ou un ControlFocus() par exemple

Plutôt que de rajouter des colonnes pourquoi ne pas ajuster les largeurs avec _GUICtrlListView_SetColumnWidth ou GUICtrlSendMsg($listview, $LVM_SETCOLUMNWIDTH, $index, $largeur)

En tout cas bien plus jolie ta gui :wink:
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
Julien
Niveau 5
Niveau 5
Messages : 141
Enregistré le : sam. 02 août 2008 17:01
Status : Hors ligne

Re: [..] Listview élaborée multiselect avec icônes

#11

Message par Julien »

Correction du code, je n'ai pas trouvé comment intégrer GuiGetCursorInfo, j'ai utilisé la fonction WM_NOTIFY. Cela fonctionne à priori comme je le souhaite.

J'ai rajouté une première colonne pour mon premier problème.

Effectivement je trouve cela plutôt sympa.

Du coup je cherche maintenant trois améliorations qui pourrait être pratique :

- Lors de l'édition du "Nom" la souris disparait, j'ai un peu cherché mais je ne comprend pas pourquoi
- Lors de l'édition du "Nom" l’appuie sur la touche entrée (ou autre mais je préfère pouvoir la choisir) ne valide pas le changement, je vais regarder du coté de WM_COMMAND avec appuis sur une touche (je crois que c'est $NM_KEYDOWN)
- Lors de l'édition du nom le champ input encadré en rouge ne s'adapte pas au texte tapé (dans la limite de la largeur de la colonne)

Mais la je crois pas être capable de réaliser ces modifications.

Voila ce qui fonctionne :
► Afficher le texte
Merci encore pour votre aide.
Avatar du membre
mikell
Spammer !
Spammer !
Messages : 6292
Enregistré le : dim. 29 mai 2011 17:32
Localisation : Deep Cévennes
Status : Hors ligne

Re: [..] Listview élaborée multiselect avec icônes

#12

Message par mikell »

Code : Tout sélectionner

$a = GUIGetCursorInfo()
If $a[4] = $listview then...   " $array[4] = ID of the control that the mouse cursor is hovering over "
Julien a écrit :- Lors de l'édition du nom le champ input encadré en rouge ne s'adapte pas au texte tapé (dans la limite de la largeur de la colonne)
Faire un changement de taille dynamique de l'edit risque d'être compliqué et surtout terrible pour l'exécution du script, pourquoi ne pas juste donner directement à l'edit la largeur de la colonne ? (voir code ci-dessous)

Pour la touche, en théorie tu peux placer un $LVN_KEYDOWN dans le NOTIFY, en pratique tu vas interférer avec la saisie dans l'edit ^^
Avec la touche Enter la moins mauvaise solution semble être celle-là :
(j'utilise un HotkeySet mais un GuiSetAccelerators serait sans doute plus approprié)
► Afficher le texte
Le pointeur de souris franchement on s'en fout puisque de toute façon à la validation de la saisie (par clic ou touche) il réapparaît 8)
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
Julien
Niveau 5
Niveau 5
Messages : 141
Enregistré le : sam. 02 août 2008 17:01
Status : Hors ligne

Re: [..] Listview élaborée multiselect avec icônes

#13

Message par Julien »

Merci beaucoup pour votre aide précieuse !

Le sujet est maintenant résolu.


Pour le GUIGetCursorInfo() en fait j'avais bien lu la doc mais je ne savais pas ou le placer (à priori en le déclarant en haut du code et en le surveillant dans le while ?)

Sinon je vais jeter un œil pour le HotkeySet.

Encore merci.
Avatar du membre
sylvanie
Niveau 11
Niveau 11
Messages : 1556
Enregistré le : jeu. 26 juil. 2007 21:31
Localisation : Paris
Status : Hors ligne

Re: [..] Listview élaborée multiselect avec icônes

#14

Message par sylvanie »

Bonjour,
dans ce cas, pensez à passer votre post en résolu [R] en éditant le sujet du premier post
merci
Toi qui cherche à mettre le doigt sur la solution, appuie sur F1.
Répondre