Récupérer les contrôles d'un ContextMenuItem

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Répondre
Avatar du membre
Numeric
Niveau 5
Niveau 5
Messages : 132
Enregistré le : mer. 23 mars 2016 08:17
Status : Hors ligne

Récupérer les contrôles d'un ContextMenuItem

#1

Message par Numeric »

Bonjour,
j'ai un souci avec les contrôles de mon ContextMenuItem.
1) les items sont affichés par une boucle: For.
2) j'aimerai créer des effets grâce à une boucle également : par exemple écrire dans une MsgBox le nom de l'item clické
en effet j'aimer créer un effet que l'utilisateur

voici le code:

Code : Tout sélectionner

#include <GUIConstantsEx.au3>
#include <GuiListView.au3>
#include <ListViewConstants.au3>
#include <GUIConstantsEx.au3>
#include <GUIListBox.au3>
#include <WindowsConstants.au3>
#Region ### START Koda GUI section ### Form=
Global $Form1 = GUICreate("Form1", 630, 399, 192, 124)
Global $List1 = GUICtrlCreateListView("Jours de la semaine", 0, 0, 625, 396)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###


$aFile = StringSplit("Lundi,Mardi,Mercredi,Jeudi,Vendredi,Samedi,Dimanche",",")
$allItem = StringSplit("Ajouter une Note,Supprimer la note,Voir les Informations",",")


For $i = 1 To UBound($aFile)-1
		If $aFile[$i] <>'' Then

			$aFileDisplay = GUICtrlCreateListViewItem($aFile[$i],$List1)
			;Creation du menu contextuel en conditionnement de Display File
			$ContextMenu = GUICtrlCreateContextMenu($aFileDisplay)


				;Displaying Items
				For $j = 1 To UBound($allItem)-1
					If $allItem[$j] <>'' Then
					   $ItemDisplaying = GUICtrlCreateMenuItem($allItem[$j],$ContextMenu)
					EndIf
				Next

		EndIf

	Next
De 0 et 1 vers les étoiles , tout part du Binaire, Numeric
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: Récupérer les contrôles d'un ContextMenuItem

#2

Message par blacksoul305 »

Salut,

alors je vais avoir du mal à répondre précisément au problème puisque je n'ai pas tout a fait saisi le 2). Cela dit, je détecte une anomalie conceptuelle. En effet, toutes les fonctions GUICtrlCreate... renvoient un unique ID, utilisés pour gérer les événements. Sauf qu'à aucun moment ils sont stockés dans votre code. Il faudrait donc des tableaux pour les mémoriser, et gérer les événements en conséquence.

Bon courage !
Étudiant en 2ème année de Licence Informatique.
Avatar du membre
Numeric
Niveau 5
Niveau 5
Messages : 132
Enregistré le : mer. 23 mars 2016 08:17
Status : Hors ligne

Re: Récupérer les contrôles d'un ContextMenuItem

#3

Message par Numeric »

Effectivement ma publication n'a pas été totale...(Partie maquant :Problème de connexion peut-être)

en faite je veux que dans la boucle, l'unique contrôle qui gère toutes CTRL itèmes puisse prendre la valeur du string cliqué et faisant partie des ContextMenuItème.
exemple:

Code : Tout sélectionner

#include <GUIConstantsEx.au3>
#include <GuiListView.au3>
#include <ListViewConstants.au3>
#include <GUIConstantsEx.au3>
#include <GUIListBox.au3>
#include <WindowsConstants.au3>
#Region ### START Koda GUI section ### Form=
Global $Form1 = GUICreate("Form1", 630, 399, 192, 124)
Global $List1 = GUICtrlCreateListView("Jours de la semaine", 0, 0, 625, 396)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###


$aFile = StringSplit("Lundi,Mardi,Mercredi,Jeudi,Vendredi,Samedi,Dimanche",",")
$allItem = StringSplit("Ajouter une Note,Supprimer la note,Voir les Information",",")


For $i = 1 To UBound($aFile)-1
		If $aFile[$i] <>'' Then

			$aFileDisplay = GUICtrlCreateListViewItem($aFile[$i],$List1)
			;Creation du menu contextuel en conditionnement de Display File
			$ContextMenu = GUICtrlCreateContextMenu($aFileDisplay)


				;Displaying Items
				For $j = 1 To UBound($allItem)-1
					If $allItem[$j] <>'' Then
					   $ItemDisplaying = GUICtrlCreateMenuItem($allItem[$j],$ContextMenu)
					   ;Debut de mon nouveau exemple :
					   switch $ItemDisplaying
					   Case "Ajouter une Note"
					   MsgBox(64,"","Vous avez selectionné : Ajouter une Note",3)
					   
					   Case "Supprimer la note"
					   MsgBox(64,"","Voulez vous supprimer la note?",2)
					   
					   Case "Voir les Information"
					   MsgBox(64,"","Voir les informations",2)
					   
					   EndSwitch
					   ;Fin de l'exemple : suggestion , si possible d'exploiter cette piste .
					EndIf
				Next

		EndIf

	Next

While 1
 $nMsg = GUIGetMsg()
 Switch $nMsg
  Case $GUI_EVENT_CLOSE
   Exit

  Case $Form1
  Case $Form1
  Case $Form1
  Case $Form1
  Case $List1
 EndSwitch
WEnd





De 0 et 1 vers les étoiles , tout part du Binaire, Numeric
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: Récupérer les contrôles d'un ContextMenuItem  

#4

Message par blacksoul305 »

Bonjour,

que pensez-vous de ce code-ci comme base ?
#include <GUIConstantsEx.au3>
#include <GuiListView.au3>
#include <ListViewConstants.au3>
#include <GUIConstantsEx.au3>
#include <GUIListBox.au3>
#include <WindowsConstants.au3>
#Region ### START Koda GUI section ### Form=
Global $Form1 = GUICreate("Form1", 630, 399, 192, 124)
Global $List1 = GUICtrlCreateListView("Jours de la semaine", 0, 0, 625, 396)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###


Local $aFile = StringSplit("Lundi,Mardi,Mercredi,Jeudi,Vendredi,Samedi,Dimanche",",")
Local $allItem = StringSplit("Ajouter une Note,Supprimer la note,Voir les Information",",")
Local $hdlArray[7][5] ; on stocke chaque ID de contrôle en fonction du jour. Première dimension : jours. Seconde dimension : LViewItemHandl, MenuContext, MenuItem1, MenuItem2, MenuItem3

For $i = 1 To $aFile[0]
   $hdlArray[$i-1][0] = GUICtrlCreateListViewItem($aFile[$i], $List1)
   $hdlArray[$i-1][1] = GUICtrlCreateContextMenu($hdlArray[$i-1][0])
   For $j = 1 To $allItem[0]
      $hdlArray[$i-1][$j+1] = GUICtrlCreateMenuItem($allItem[$j], $hdlArray[$i-1][1])
   Next
Next

;~ A partir d'ici, tous les contrôles sont stockés dans le tableau, on peut maintenant tous les utiliser.

While 1
   $nMsg = GUIGetMsg()
   Switch $nMsg
      Case $GUI_EVENT_CLOSE
         Exit
      Case Else
         For $i = 0 To 6
            For $j = 0 To 4
               If ($hdlArray[$i][$j] == $nMsg) Then
                  If $j == 0 Then MsgBox(0,"","Listview cliqué : " & $aFile[$i+1])
                  If $j == 2 Then MsgBox(0,"","Ajouter une note pour : " & $aFile[$i+1])
                  If $j == 3 Then MsgBox(0,"","Supprimer la note de : " & $aFile[$i+1])
                  If $j == 4 Then MsgBox(0,"","Voir les informations pour : " & $aFile[$i+1])
               EndIf
            Next
         Next
   EndSwitch
WEnd
Étudiant en 2ème année de Licence Informatique.
Avatar du membre
Numeric
Niveau 5
Niveau 5
Messages : 132
Enregistré le : mer. 23 mars 2016 08:17
Status : Hors ligne

Re: Récupérer les contrôles d'un ContextMenuItem

#5

Message par Numeric »

Oui ce code me vas bien. Je pourrai très bien m'inspirer de ce code comme base. L'idée est parfaite .Merci beaucoup blacksoul305 . je vais voir s'il comporte des limites dans la réalisation de mon projet.
De 0 et 1 vers les étoiles , tout part du Binaire, Numeric
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: Récupérer les contrôles d'un ContextMenuItem

#6

Message par blacksoul305 »

Très bien. Je pense que tout devrait être possible étant donné que l'ensemble des contrôles créés sont conservés.
Si le code vous paraît un peu sombre, n'hésitez pas à demander !

Bonne chance !

Envoyé de mon ASUS_Z00ED en utilisant Tapatalk
Étudiant en 2ème année de Licence Informatique.
Avatar du membre
Numeric
Niveau 5
Niveau 5
Messages : 132
Enregistré le : mer. 23 mars 2016 08:17
Status : Hors ligne

Re: Récupérer les contrôles d'un ContextMenuItem

#7

Message par Numeric »

Ah! il est parfait, Mais cependant ::
1)pourrait-on prédéfinir un Tableau 2D pour le stockage d'un certain nombre de contrôle prévu ? 5 CTRLs par exemple et gérer le cas ou le nombre de CTRL Item n'atteindrait pas ce nombre prevu?

2) une idée aussi pour pouvoir :
a) En faire une fonction
b) Prévoir comme paramètres de cette fonction les événements à produire avec les CTRLitems ?
De 0 et 1 vers les étoiles , tout part du Binaire, Numeric
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: Récupérer les contrôles d'un ContextMenuItem

#8

Message par blacksoul305 »

Je ne saisis pas trop ce que vous entendez-par là. Si vous savez à l'avance le nombre de contrôles à créer, dans ces cas là il est envisageable de déclarer une paire de variables comme : Global $iExpectedCtrls = 5, $iCtrls = 0 et dans la boucle de création des contrôles ajouter l'instruction : $iCtrls += 1.
Il vous suffit de comparer $iExpectedCtrls et $iCtrls pour savoir si tous les items ont été créés.
Étudiant en 2ème année de Licence Informatique.
Avatar du membre
Numeric
Niveau 5
Niveau 5
Messages : 132
Enregistré le : mer. 23 mars 2016 08:17
Status : Hors ligne

Re: Récupérer les contrôles d'un ContextMenuItem

#9

Message par Numeric »

Oui mais le nombre de contrôle va dépendre de la liste du tableau : (Le traitement des éléments affichés :traiter une liste de nom ou autres choses par exemple)

Mais je pense à récupérer le nombre d' options en menuItem puis à redimensionner le tableau de stockage des ID si nécessaire et cela dans le jeux des variables. : Donc le nombre de contrôles à créer est inconnu ou du moins n'est pas une constante..
De 0 et 1 vers les étoiles , tout part du Binaire, Numeric
Avatar du membre
Numeric
Niveau 5
Niveau 5
Messages : 132
Enregistré le : mer. 23 mars 2016 08:17
Status : Hors ligne

Re: Récupérer les contrôles d'un ContextMenuItem

#10

Message par Numeric »

Je rencontre un souci aussi : en essayant avec $aFile = ProcessList( )
on a une erreur :
avez vous une solution pour régler cela?
De 0 et 1 vers les étoiles , tout part du Binaire, Numeric
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: Récupérer les contrôles d'un ContextMenuItem

#11

Message par blacksoul305 »

Peut-être pourriez vous expliciter ce que vous souhaitez faire, parce que je ne vois pas le lien entre le code initial et ce que vous tentez de faire avec cette fonction.

Envoyé depuis mon mobile avec Tapatalk.

EDIT : De toute évidence, les jours n'étaient qu'un exemple. Donc l'idée est de remplacer les jours de la semaine par des processus c'est ça ? Je ne sais pas si vous y avez fait attention, mais dans nos codes précédents, $aFile est un tableau 1D. ProcessList est une fonction qui vous renvoie un tableau 2D, en effet vous y trouvez le nom du processus mais aussi son PID.
Étudiant en 2ème année de Licence Informatique.
Avatar du membre
Numeric
Niveau 5
Niveau 5
Messages : 132
Enregistré le : mer. 23 mars 2016 08:17
Status : Hors ligne

Re: Récupérer les contrôles d'un ContextMenuItem

#12

Message par Numeric »

Merci blacksoul305 ; en fait j'ai pu résoudre le problème :
erreur 1 : j'avais pas pensé à redimensionner le tableau d'affichage (2D)....
erreur 2 : j'affiche 2D en 1D et je change la dimension du tableau de stockage...
De 0 et 1 vers les étoiles , tout part du Binaire, Numeric
Répondre