Page 1 sur 1

[..] Treeview retrouver l'index

Posté : ven. 02 oct. 2015 08:58
par cluster49
Bonjour,

A partir d'un "treeview" crée à la volée comme dans l'exemple ci-dessous je peux connaitre l'endroit où je me trouve dans l'arborescence grâce au bouton "Get Index".

Je souhaiterais obtenir le même résultat lorsque je clic directement dans l'arborescence (sans avoir besoin de cliquer sur le bouton). Est-ce envisageable ?
► Afficher le texte
Merci pour votre aide.

Re: [..] treeview retrouver l'index

Posté : ven. 02 oct. 2015 10:56
par Hugues
Salut,

Il va falloir passer par WM_NOTIFY()...

Re: [..] treeview retrouver l'index

Posté : ven. 02 oct. 2015 13:41
par Hugues
Un petit exemple de WM_Notify: (de Tlem)
► Afficher le texte

Re: [..] Treeview retrouver l'index

Posté : ven. 02 oct. 2015 21:54
par mdanielm
Bonsoir,
Je débarque avec un peu de retard!
J'ai regardé Create, il y a la solution:
► Afficher le texte

Re: [..] Treeview retrouver l'index

Posté : ven. 02 oct. 2015 23:43
par mikell
Ce genre de syntaxe

Code : Tout sélectionner

$yest = $hSelected_Item = _GUICtrlTreeView_GetItemHandle($TreeView, $aItems[$i])
n'est absolument pas recommandé

Re: [..] Treeview retrouver l'index

Posté : sam. 03 oct. 2015 08:13
par mdanielm
Même avec des parenthèses? $b = ($a=1)
Où je peux lire dans la doc ce que vous dites? je n'ai jamais eu aucun problème, quel que soit le langage.
....un booléen qui prend une valeur booléenne!
Donnez un contre exemple, vous avez le week-end.
J'ai modifié ces lignes car l'exitloop dans la boucle for ne permettait pas de traiter le cas où l'index cherché n'existait pas dans la liste.
Avec $yest je n'affiche que si j'ai trouvé l'index.
Cordialement

Re: [..] Treeview retrouver l'index

Posté : sam. 03 oct. 2015 10:41
par mikell
Dans cette instruction le '=' est utilisé avec 2 usages différents (assignation et égalité) et l'absence de parenthèses rend cette syntaxe peu lisible et potentiellement source d'erreurs
Idem d'ailleurs pour toute instruction qui comporte plusieurs opérateurs et qui se contente d'exploiter leur précédence sans marquer les opérations par des parenthèses
Ce n'est pas parce que quelque chose marche que c'est forcément recommandé. Je suis surpris que toi qui défends ardemment la lisibilité et les bonnes pratiques tu ne comprennes pas ça

Re: [..] Treeview retrouver l'index

Posté : sam. 03 oct. 2015 10:45
par walkson
Bonjour,
Donnez un contre exemple, vous avez le week-end.
Mikell a peut être d'autres chats à fouetter ce week-end ? :wink:
Un petit exemple plus simple:
► Afficher le texte

Re: [..] Treeview retrouver l'index

Posté : sam. 03 oct. 2015 11:16
par mdanielm
On a tous un chat à fouetter.
Le sujet du différent est: $b=($a=1).
Je ne vois pas le rapport avec votre exemple.
Annoncez ce qu'il doit faire et ce que vous attendez de moi.
Si vous voulez que je vous supprime votre exitloop et votre while 1, voilà la solution:
► Afficher le texte

Re: [..] Treeview retrouver l'index

Posté : sam. 03 oct. 2015 11:45
par walkson
Mille regrets si je vous ai blessé, j'étais sur le ton de la plaisanterie.
Si je me suis permis de donner cet exemple, c'est parce qu'il n'utilise pas WM_NOTIFY() et qu'il me semble plus simple.
Après, la discussion au sujet de $b=($a=1), je ne suis qu'un simple usager du forum sans aucune qualification et donc sans avis... Je voulais tout simplement rendre service à cluster49

Re: [..] Treeview retrouver l'index

Posté : sam. 03 oct. 2015 12:54
par mikell
mdanielm a écrit :On a tous un chat à fouetter.
Le sujet du différent est: $b=($a=1).
On se calme svp
Il n'y a pas de différent sur cette expression-là puisqu'elle comporte les parenthèses qui vont bien (ce qui n'est pas le cas dans le code posté)
Merci de prendre le temps de mieux relire mon message précédent

Re: [..] Treeview retrouver l'index

Posté : sam. 03 oct. 2015 14:02
par mdanielm
Je suis d'accord qu'avec des parenthèses c'est plus lisible, et qu'elles deviennent indispensables dans:
$a=$b=$c=1 ---> $a = ($b=($c=1))
tout comme dans:
$a = $b=1? 2: $c? 3:4 -----> $a = ($b=1? 2: ($c=1? 3:4))

En même temps j'ai modifié rapidement un programme existant.

Quand à la fonction GUICtrlSendMsg, désolé, je ne comprends pas ce qu'elle fait.
(J'ai néanmoins corrigé la traduction de la page).

Je vous remercie de me lire attentivement et de critiquer mon style, je ne me vexerai jamais.
Cordialement

Re: [..] Treeview retrouver l'index

Posté : sam. 03 oct. 2015 16:21
par mikell
Ben on est d'accord alors Image

@walkson
Ton script me fait penser à une corde tendue au-dessus d'un précipice : c'est vrai qu'elle peut permettre de traverser, mais tu as beaucoup plus de chances de te péter la gueule que d'arriver entier de l'autre côté :mrgreen:
Pour aller réellement au plus simple :
► Afficher le texte

Re: [..] Treeview retrouver l'index

Posté : sam. 03 oct. 2015 20:37
par mdanielm
Je n'ai fait que regarder l'exemple de la doc Create pour le TreeView.
Dans ta solution, je ne comprends pas pourquoi l'ID du message est égal à l'ID de l'item, mais ça marche.
A quel endroit on demande d'intercepter un click gauche?
Et si on voulait faire autre chose avec un clic droit?
La boucle for va systématiquement à la fin, elle pourrait s'interrompre avec EXITLOOP!

Re: [..] Treeview retrouver l'index

Posté : sam. 03 oct. 2015 22:01
par mikell
mdanielm a écrit :Dans ta solution, je ne comprends pas pourquoi l'ID du message est égal à l'ID de l'item, mais ça marche.
GUIGetMsg : The "event" returned is the control ID of the control sending the message
mdanielm a écrit :Et si on voulait faire autre chose avec un clic droit?
Ben faudrait un code différent... avec du WM_NOTIFY probablement
mdanielm a écrit :La boucle for va systématiquement à la fin, elle pourrait s'interrompre avec EXITLOOP!
C'est tout à fait exact (mais c'est un détail)

Re: [..] Treeview retrouver l'index

Posté : sam. 03 oct. 2015 22:10
par walkson
@Mikell
c'est vrai le Case $msg > ""
$aa = ControlTreeView($gui, "", $treeview, "GetSelected" )
ça ressemble à renifler un peu partout pour retrouver son chemin.
Mais la deuxième partie

Code : Tout sélectionner

            Case Else
                For $i = 1 To $nbfolder
                    If $msg = $FileList1[$i] Then
                $item = $FileList[$i]
                MsgBox(4160, "", "Selection:   " & $item)

                EndIf
                Next

y a pas de quoi fouetter un y a qu'un petit chouilla de différence avec ton code ou bien quelque chose m' échappe. Bon, c'est vrai, mon exemple est un peu brouillon...

Re: [..] Treeview retrouver l'index

Posté : sam. 03 oct. 2015 23:22
par mikell
Par exemple rajoute juste ça dans la gui et clique dessus

Code : Tout sélectionner

GUICtrlCreateLabel("test1", 280, 16, 30, 20)
GUICtrlCreateList("test2", 280, 56, 40, 20)
;etc