Utilisation de _GUICtrlMenu_SetItemData et _GUICtrlMenu_GetItemData

Aide sur les Interfaces Graphique Utilisateurs (GUI).
Règles du forum
.
Répondre
Koudou
Niveau 1
Niveau 1
Messages : 8
Enregistré le : sam. 16 avr. 2016 22:43
Status : Hors ligne

Utilisation de _GUICtrlMenu_SetItemData et _GUICtrlMenu_GetItemData

#1

Message par Koudou »

Bonjour,

Je continue ma découverte d'AutoIt...

J'ai besoin d'un menu permettant de choisir des lettres de disques réseau (K:, L:, M:, ...) et d'en déduire le chemin correspondant (\\serveur\partage).
J'ai donc créé un tableau lettres/chemins réseau ($paths) et je veux associer un chemin par item de menu. Il me semble que les itemData sont fait pour ça. J'essaie donc :

Code : Tout sélectionner

For $i = 1 To Ubound($paths, 1) -1
   $id = GUICtrlCreateMenuItem($paths[$i] & ":", $menuDisks)
   GUICtrlSetOnEvent($id, "DisksMenuItemClicked")
   _GUICtrlMenu_SetItemData($hMenu, $id, $i)
   ConsoleWrite("Je stocke : " & $i & " pour " & $id)
Next
Puis dans la gestion des clics sur un item du menu :

Code : Tout sélectionner

$i = _GUICtrlMenu_GetItemData(GUICtrlGetHandle($menuDisks), @GUI_CtrlId, FALSE)
ConsoleWrite("Je récupère " & $i & "pour " & @GUI_CtrlId)
Dans la deuxième partie je récupère systématiquement 0 alors qu'il me semble avoir stocké un nombre différent par item.
La sortie donne :
Je stocke : 1 pour 6
Je stocke : 2 pour 7
Je stocke : 3 pour 8
Je stocke : 4 pour 9

Et puis :
Je récupère 0 pour 9"

Quelqu'un peut m'expliquer ce qui ne va pas ?
Merci.
Avatar du membre
mikell
Spammer !
Spammer !
Messages : 6292
Enregistré le : dim. 29 mai 2011 17:32
Localisation : Deep Cévennes
Status : Hors ligne

Re: Utilisation de _GUICtrlMenu_SetItemData et _GUICtrlMenu_GetItemData

#2

Message par mikell »

Pourquoi faire simple quand on peut faire compliqué ? :mrgreen:

Code : Tout sélectionner

#include <GUIConstantsEx.au3>

Opt("GUIOnEventMode", 1)

Local $array[3][2] = [["A", "chemin de A"], _ 
                     ["B", "chemin de B"], _ 
                     ["C", "chemin de C"]]

GUICreate("My GUI menu", 300, 200)
GUISetOnEvent($GUI_EVENT_CLOSE, "_exit")
$menu = GUICtrlCreateMenu("&Lettres")
$item1 = GUICtrlCreateMenuItem($array[0][0], $menu)
GUICtrlSetOnEvent(-1, "_func")
$item2 = GUICtrlCreateMenuItem($array[1][0], $menu)
GUICtrlSetOnEvent(-1, "_func")
$item3 = GUICtrlCreateMenuItem($array[2][0], $menu)
GUICtrlSetOnEvent(-1, "_func")
GUISetState()

While 1
   Sleep(10)
WEnd
 
Func _func()
   For $i = 0 to UBound($array)-1
      If GuiCtrlRead(@GUI_CtrlId, 1) = $array[$i][0] Then Msgbox(0,"", $array[$i][1])
   Next
EndFunc

Func _exit()
  Exit
EndFunc

" 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
orax
Modérateur
Modérateur
Messages : 1479
Enregistré le : lun. 23 mars 2009 04:50
Localisation : ::1
Status : Hors ligne

Re: Utilisation de _GUICtrlMenu_SetItemData et _GUICtrlMenu_GetItemData

#3

Message par orax »

Je ne sais pas si ça te seras utile pour la suite, mais pour déduire le chemin correspondant (\\serveur\partage), tu pourrais faire :

Code : Tout sélectionner

#include <WinNet.au3>
_WinNet_GetConnection("z:") ; retourne p. ex. \\serveur\partage
De petits détails peuvent faire toute la différence. — Quand la boule de neige commence à rouler… poussez-la. (Columbo)
Koudou
Niveau 1
Niveau 1
Messages : 8
Enregistré le : sam. 16 avr. 2016 22:43
Status : Hors ligne

Re: Utilisation de _GUICtrlMenu_SetItemData et _GUICtrlMenu_GetItemData

#4

Message par Koudou »

Réponses intéressantes. :)

@mikell ; C'est la solution que j'avais choisie au début mais j'ai découvert SetItemData et GetItemData et je me suis dit que c'était le plus simple à utiliser pour stocker un index en lien avec un item... A la réflexion c'est vrai que c'est idiot.

@orax : Oui c'est pas bête. Ca me garantit en plus que la connexion vers le serveur existe.

Merci pour vos solutions, je vais y réfléchir.
Avatar du membre
mikell
Spammer !
Spammer !
Messages : 6292
Enregistré le : dim. 29 mai 2011 17:32
Localisation : Deep Cévennes
Status : Hors ligne

Re: Utilisation de _GUICtrlMenu_SetItemData et _GUICtrlMenu_GetItemData

#5

Message par mikell »

A la réflexion c'est vrai que c'est idiot
C'est pas idiot du tout, c'est juste over-compliqué :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
orax
Modérateur
Modérateur
Messages : 1479
Enregistré le : lun. 23 mars 2009 04:50
Localisation : ::1
Status : Hors ligne

Re: Utilisation de _GUICtrlMenu_SetItemData et _GUICtrlMenu_GetItemData

#6

Message par orax »

Koudou a écrit :Ca me garantit en plus que la connexion vers le serveur existe.
Eh, ça retourne le nom sans vérifier que la connexion est établie. Si j'ai un lecteur Z: sur lequel est monté \\serveur\partage, la fonction retournera \\serveur\partage même si la connexion n'est pas possible.
De petits détails peuvent faire toute la différence. — Quand la boule de neige commence à rouler… poussez-la. (Columbo)
Koudou
Niveau 1
Niveau 1
Messages : 8
Enregistré le : sam. 16 avr. 2016 22:43
Status : Hors ligne

Re: Utilisation de _GUICtrlMenu_SetItemData et _GUICtrlMenu_GetItemData

#7

Message par Koudou »

Oui est si je veux autoriser l'utilisation du script uniquement sur certains partages ça n'empêche pas un utilisateur de connecter un autre partage sur une lettre connue... Finalement je vais choisir la solution de mikell. :D
Répondre