Menus dynamiques: Récupérer le MenuID [Résolu]

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Avatar de l’utilisateur
Jacobus
Messages : 1559
Inscription : mar. 06/avr./2004 10:35
Contact :

Menus dynamiques: Récupérer le MenuID [Résolu]

Message par Jacobus »

J'ai besoin de récupérer les MenuID créés dynamiquement avec #PB_Any. Mais est-ce que c'est possible??

Exemple:

Code : Tout sélectionner

Enumeration 
#WINMAIN
#Menu
EndEnumeration
#PROGRAMNAME = "Menus dynamiques"

Procedure WinMain()
ExamineDesktops()
Largeur$ = Str(DesktopWidth(0))
Hauteur$ = Str(DesktopHeight(0))
FlagWin = #PB_Window_SystemMenu|#PB_Window_ScreenCentered|#PB_Window_SizeGadget|#PB_Window_TitleBar|#PB_Window_Invisible  
If OpenWindow(#WINMAIN,0,0,220,500,#PROGRAMNAME ,FlagWin)=0  
End 
EndIf

If CreateMenu(#Menu,WindowID(#WINMAIN))
  MenuTitle("Fichier")  
    MenuItem(1, "Ouvrir")
    MenuItem(2, "Enregistrer")
    MenuItem(3, "Enregistrer sous")
    MenuItem(4, "Fermer")
  
  MenuTitle("Edition")
    For a = 0 To 10
      MenuItem(#PB_Any, "Item_"+Str(a))
    Next 
  MenuTitle("Options")
    For a = 0 To 10
      MenuItem(#PB_Any, "Item_"+Str(a))
    Next
EndIf 

HideWindow(#WINMAIN, 0)
EndProcedure

;--------------------------------------------------   
;-PROGRAMME
;--------------------------------------------------
WinMain()

Repeat 
 Event = WaitWindowEvent() 
 
  MenuID = EventMenu()
    If Event =  #PB_Event_Menu
         
      If MenuID = 4 
       quit=#True         
      Else 
        Debug "Menu ID: "+Str(EventMenu())
      EndIf 
       
    EndIf 
    
  
  If Event = #PB_Event_CloseWindow 
      quit=#True
  EndIf 

Until quit=#True
End 
Là j'obtiens invariablement :
Menu ID: 65535
Une idée?
Dernière modification par Jacobus le lun. 12/janv./2009 7:56, modifié 1 fois.
Quand tous les glands seront tombés, les feuilles dispersées, la vigueur retombée... Dans la morne solitude, ancré au coeur de ses racines, c'est de sa force maturité qu'il renaîtra en pleine magnificence...Jacobus.
Ollivier
Messages : 4197
Inscription : ven. 29/juin/2007 17:50
Localisation : Encore ?
Contact :

Message par Ollivier »

Salut Jacobus,

Il n'y a pas d'ID menu: c'est toi qui choisit le code d'événement menu qui doit se produire.

Ollivier
Avatar de l’utilisateur
Jacobus
Messages : 1559
Inscription : mar. 06/avr./2004 10:35
Contact :

Message par Jacobus »

Merci! En fait je viens de trouver une solution sans utiliser #PB_Any :D
C'était tout con et je viens juste de le voir :oops:

Solution qui peut être utilisée pour une liste de fichiers récents par exemple:

Code : Tout sélectionner

Enumeration 
#WINMAIN
#Menu
EndEnumeration
#PROGRAMNAME = "Menus dynamiques"
#DynMenu = 100 ;initialisation

Procedure WinMain()

FlagWin = #PB_Window_SystemMenu|#PB_Window_ScreenCentered|#PB_Window_SizeGadget|#PB_Window_TitleBar|#PB_Window_Invisible  
If OpenWindow(#WINMAIN,0,0,220,500,#PROGRAMNAME ,FlagWin)=0  
End 
EndIf

If CreateMenu(#Menu,WindowID(#WINMAIN))
  MenuTitle("Fichier")  
    MenuItem(1, "Ouvrir")
    MenuItem(2, "Enregistrer")
    MenuItem(3, "Enregistrer sous")
    MenuItem(4, "Fermer")  
  MenuTitle("Edition")
    For a = 0 To 10
      MenuItem(#DynMenu+a, "Item_"+Str(a))
    Next 
;   MenuTitle("Options")
;     For a = 0 To 10
;       MenuItem(#DynMenu+a, "Item_"+Str(a))
;     Next
EndIf 

HideWindow(#WINMAIN, 0)
EndProcedure

;--------------------------------------------------   
;-PROGRAMME
;--------------------------------------------------
WinMain()

Repeat 
 Event = WaitWindowEvent() 
 
  MenuID = EventMenu()
    If Event =  #PB_Event_Menu
         
      If MenuID = 4 
       quit=#True         
      Else 
        Debug "Menu ID: "+Str(EventMenu())
        Debug "Texte : "+GetMenuItemText(#Menu, MenuID)
      EndIf 
       
    EndIf 
    
  
  If Event = #PB_Event_CloseWindow 
      quit=#True
  EndIf 

Until quit=#True
End 
Quand tous les glands seront tombés, les feuilles dispersées, la vigueur retombée... Dans la morne solitude, ancré au coeur de ses racines, c'est de sa force maturité qu'il renaîtra en pleine magnificence...Jacobus.
Répondre