Page 1 sur 1
[R] Problemme d'id avec un MenuItem
Posté : lun. 30 nov. 2015 22:07
par adri0726
Bonjour a tous.
Voila je vous explique mon problème :
J'ai voulu créer un menu(pas associer a une gui) a partir d'un fichier ini, que je lance a partir d'une hotkey, la section représente le menu et les key les items.
Je voudrait pouvoir retrouver le texte de l'item sélectionner ou bien son id.
Un bout de mon script :
► Afficher le texte
Code : Tout sélectionner
#include <GuiMenu.au3>
#include <Misc.au3>
#include <GUIConstantsEx.au3>
#include <GuiMenu.au3>
#include <WinAPI.au3>
#include <WindowsConstants.au3>
Global $nenuparent[1]
Global $nenuenfant[1]
Global $ini_formulaires = @ScriptDir & "\formulaire.ini"
Global $hDLL = DllOpen("user32.dll")
While 1
If _IsPressed(01, $hDLL) And _IsPressed(11, $hDLL) And _IsPressed(12, $hDLL) Then
Do
Sleep(10)
Until Not _IsPressed(01, $hDLL)
Local $section, $sectionName = IniReadSectionNames($ini_formulaires)
Local $hMenu = _GUICtrlMenu_CreatePopup()
For $j = 1 To UBound($sectionName) - 1
ReDim $nenuparent[UBound($nenuparent) + 1]
$nenuparent[$j] = _GUICtrlMenu_CreateMenu()
_GUICtrlMenu_AddMenuItem($hMenu, $sectionName[$j], 0, $nenuparent[$j])
$section = IniReadSection($ini_formulaires, $sectionName[$j])
For $i = 1 To UBound($section) - 1
ReDim $nenuenfant[UBound($nenuenfant) + 1]
_GUICtrlMenu_AddMenuItem($nenuparent[$j], $section[$i][1], $nenuenfant[$i])
Next
Next
_GUICtrlMenu_TrackPopupMenu($hMenu, WinGetHandle(AutoItWinGetTitle()))
_GUICtrlMenu_DestroyMenu($hMenu)
EndIf
WEnd
le fichier ini :
► Afficher le texte
Code : Tout sélectionner
[m1]
0=m1-0
1=m1-1
2=m1-2
3=m1-3
[m2]
0=m2-0
1=m2-1
2=m2-2
3=m2-3
Merci d'avance pour votre aide.
Re: [..] Problemme d'id avec un MenuItem
Posté : mar. 01 déc. 2015 22:42
par jguinch
J'ai fais un peu autrement, en utilisant GUICtrlCreateContextMenu avec une GUI invisible. Ca me parait plus simple, mais à toi de juger :
► Afficher le texte
Code : Tout sélectionner
#include <WindowsConstants.au3>
#include <Misc.au3>
Opt("GUIOnEventMode", 1)
Local $iniFile = @ScriptDir & "\formulaire.ini"
Local $aKeys, $aItems[1][2]
; ############## Creation d'un fenetre invisible qui permet de creer le menu contextuel ##################
$hGUI = GUICreate("MyContextMenu", 0, 0, 0, 0, 0, BitOr($WS_EX_TOOLWINDOW, $WS_EX_LAYERED) )
; #########################################################################################################
Local $contextmenu = GUICtrlCreateContextMenu()
Local $HContext = GUICtrlGetHandle($contextmenu)
Local $aSection = IniReadSectionNames($iniFile)
For $i = 1 To $aSection[0]
$menu = GUICtrlCreateMenu($aSection[$i], $contextmenu)
$aKeys = IniReadSection($iniFile, $aSection[$i])
For $j = 1 To $aKeys[0][0]
Redim $aItems[UBound($aItems) + 1][2]
$aItems[UBound($aItems) - 1][0] = GUICtrlCreateMenuItem($aKeys[$j][0], $menu)
$aItems[UBound($aItems) - 1][1] = $aKeys[$j][0]
GUICtrlSetOnEvent(-1, "_RetrieveMenuItem")
Next
$aItems[0][0] = UBound($aItems) - 1
Next
; Ajout d'un item pour quitter (a supprimer en fonction du besoin)
GUICtrlCreateMenuItem("", $contextmenu)
GUICtrlCreateMenuItem("Exit", $contextmenu)
GUICtrlSetOnEvent(-1, "_Exit")
GUISetState()
While 1
If _IsPressed("01") And _IsPressed("11") And _IsPressed("12") Then _MenuShow()
Sleep(10)
WEnd
Func _RetrieveMenuItem()
For $i = 1 To $aItems[0][0]
If @GUI_CtrlId = $aItems[$i][0] Then
MsgBox(0, "", "clic sur " & $aItems[$i][1] & " (ID = " & @GUI_CtrlId & ")" & @CRLF)
EndIf
Next
EndFunc
Func _MenuShow()
Local $x = MouseGetPos(0), $y = MouseGetPos(1)
DllCall("user32.dll", "int", "TrackPopupMenuEx", "hwnd", $HContext, "int", 0, "int", $x, "int", $y, "hwnd", $hGUI, "ptr", 0)
EndFunc
Func _Exit()
Exit
EndFunc
Re: [R] Problemme d'id avec un MenuItem
Posté : ven. 01 janv. 2016 20:12
par adri0726
Merci bien pour ton aide, j'ai parfaitement adapter ta solution a mon script.