probleme CreatePopupMenu multiple

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Avatar de l’utilisateur
Guillot
Messages : 673
Inscription : jeu. 25/juin/2015 16:18

probleme CreatePopupMenu multiple

Message par Guillot »

salut tout le monde

j'ai un probleme avec CreatePopupMenu lorsque je veux en faire cohabiter plusieurs en même temps
dans l'exemple ci dessous, j'en crée 3, mais lorsque je les appelles, les evennements des 3 se déclanche simultanement
est ce que je fais une erreur dans la façon de les utiliser ?

Code : Tout sélectionner

Procedure test0()
    DisplayPopupMenu(0,WindowID(0))
EndProcedure

Procedure test1()
    DisplayPopupMenu(1,WindowID(0))
EndProcedure

Procedure test2()
    DisplayPopupMenu(1,WindowID(0))
EndProcedure

Procedure event_menu0()
Debug "menu 0 "+EventMenu()    
EndProcedure

Procedure event_menu1()
Debug "menu 1 "+EventMenu()    
EndProcedure

Procedure event_menu2()
Debug "menu 2 "+EventMenu()    
EndProcedure

OpenWindow(0,0,0,800,600,"",#PB_Window_ScreenCentered)
ButtonGadget(0,10,10,100,20,"popup 0"):BindGadgetEvent(0,@ test0())
ButtonGadget(1,10,50,100,20,"popup 1"):BindGadgetEvent(1,@ test1())
ButtonGadget(2,10,90,100,20,"popup 2"):BindGadgetEvent(2,@ test2())

CreatePopupMenu(0)
For i=0 To 5
    MenuItem(i,"menu 0 - item "+Str(i))
    BindMenuEvent(0,i,@ event_menu0())
Next

CreatePopupMenu(1)
For i=0 To 5
    MenuItem(i,"menu 1 - item "+Str(i))
    BindMenuEvent(1,i,@ event_menu1())
Next

CreatePopupMenu(2)
For i=0 To 5
    MenuItem(i,"menu 2 - item "+Str(i))
    BindMenuEvent(2,i,@ event_menu2())
Next

Repeat:Until WaitWindowEvent()=#PB_Event_CloseWindow
Avatar de l’utilisateur
falsam
Messages : 7324
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: probleme CreatePopupMenu multiple

Message par falsam »

Un numéro d'item unique et ton code fonctionne

Code : Tout sélectionner

CreatePopupMenu(0)
For i=0 To 5
  MenuItem(i,"menu 0 - item "+Str(i))
  BindMenuEvent(0, i, @event_menu0())
Next

CreatePopupMenu(1)
For i=6 To 10
  MenuItem(i,"menu 1 - item "+Str(i))
  BindMenuEvent(1, i, @event_menu1())
Next

CreatePopupMenu(2)
For i=11 To 15
  MenuItem(i,"menu 2 - item "+Str(i))
  BindMenuEvent(2, i, @event_menu2())
Next
Configuration : Windows 11 Famille 64-bit - PB 6.20 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Avatar de l’utilisateur
falsam
Messages : 7324
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: probleme CreatePopupMenu multiple

Message par falsam »

Ton code pourrait être simplifier de cette maniére

Code : Tout sélectionner

Procedure test()
  Protected g = EventGadget()
  DisplayPopupMenu(g, WindowID(0))
EndProcedure

Procedure event_menu()
  Protected i = EventMenu()
  
  Select i
     ;Tes différentes actions
  EndSelect
EndProcedure

OpenWindow(0,0,0,800,600,"",#PB_Window_ScreenCentered)
ButtonGadget(0,10,10,100,20,"popup 0"):BindGadgetEvent(0, @test())
ButtonGadget(1,10,50,100,20,"popup 1"):BindGadgetEvent(1, @test())
ButtonGadget(2,10,90,100,20,"popup 2"):BindGadgetEvent(2, @test())

CreatePopupMenu(0)
For i=0 To 5
  MenuItem(i,"menu 0 - item "+Str(i))
  BindMenuEvent(0, i, @event_menu())
Next

CreatePopupMenu(1)
For i=6 To 10
  MenuItem(i,"menu 1 - item "+Str(i))
  BindMenuEvent(1, i, @event_menu())
Next

CreatePopupMenu(2)
For i=11 To 15
  MenuItem(i,"menu 2 - item "+Str(i))
  BindMenuEvent(2, i, @event_menu())
Next

Repeat:Until WaitWindowEvent()=#PB_Event_CloseWindow
Configuration : Windows 11 Famille 64-bit - PB 6.20 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Avatar de l’utilisateur
Guillot
Messages : 673
Inscription : jeu. 25/juin/2015 16:18

Re: probleme CreatePopupMenu multiple

Message par Guillot »

ok
les n° d'item doivent etre unique même si ils appartiennent à des menus differents!
curieux...

merci pour l'info
Répondre