Page 1 sur 1

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

Publié : dim. 11/janv./2009 18:29
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?

Publié : dim. 11/janv./2009 18:45
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

Publié : dim. 11/janv./2009 18:51
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