Page 1 sur 1

La guerre des menus

Publié : lun. 28/déc./2015 11:46
par JohnJohnsonSHERMAN
Salut a tous !
Vioci mon probléme : quand je crée une barre de menu, puis ensuite un menu popup, seul le popup s´affiche. Si je place le code du popup avant celui du menu, alors c´est le menu qui saffiche, et un poup vide quand on clicque droitement (j´invente des mots...)

Code : Tout sélectionner

CreateMenu(#menu,"fichier")
MenuItem(#ouvrir,"ouvrir)
MenuItem(#options,"options)
...
CreatePopupMenu(#popup)
MenuItem(#suiv,"suivant")
Autres items... on s´en fout

Et la seul le popup s´affiche!
HELP!

Re: La guerre des menus

Publié : lun. 28/déc./2015 12:48
par Marc56
JohnJohnsonSHERMAN a écrit : Et la seul le popup s´affiche!
À mon avis tu as le même numéro pour #menu et #popup.
Vérifie avec un Debug (voir exemple ci-dessous)

Code : Tout sélectionner

CreateMenu(#menu,"fichier")
MenuItem(#ouvrir,"ouvrir)
MenuItem(#options,"options)
...
CreatePopupMenu(#popup)
MenuItem(#suiv,"suivant")

; --- Vérification
Debug #menu
Debug #popup
Solution: Utilise Enumeration et met bien toutes les constantes menu dans la même section.

Code : Tout sélectionner

Enumeration FormMenu
  #menu
  #popup
EndEnumeration
Encore mieux pour la suite, préfixe tes constantes, variables, procédures
Perso, je fais comme ça:

Code : Tout sélectionner

Enumeration FormMenu
  #Mnu_Window_Main
  #Mnu_PopUp_EditBox
  #Mnu_PopUp_TrayIcon
EndEnumeration
Beaucoup plus facile dès que le projet prend de l'ampleur.
:wink:

Re: La guerre des menus

Publié : lun. 28/déc./2015 13:51
par venom
Bonjour,
Exemple de la doc ( touche F1 ) :wink:

Code : Tout sélectionner

 If OpenWindow(0, 200, 200, 220, 120, "Exemple de menu contextuel")
    
   If CreateMenu(0, WindowID(0))
    MenuTitle("Projet")
      MenuItem( 1, "Ouvrir")
      MenuItem( 2, "Enregistrer")
      MenuBar()
      MenuItem( 4, "Quitter")

    MenuTitle("Edition")
      MenuItem( 8, "Cut")
      MenuItem( 9, "Copy")
      MenuItem(10, "Paste")
  EndIf
  
  
    If CreatePopupMenu(1)        ; La création du menu contextuel commence...
      MenuTitle("Projet")        ; Vous pouvez utiliser toutes les commandes relatives au menu,
        MenuItem(1, "Ouvrir")    ; comme si c'était un menu normal...
        MenuItem(2, "Enregistrer")
        MenuItem(4, "Quitter")
      EndIf
      
    Repeat
      Event = WaitWindowEvent()
      Select Event                        ; Examine quel type d'évènement est survenu sur la fenêtre
        Case #PB_Event_RightClick         ; Le bouton droit de la souris a été clické =>
          DisplayPopupMenu(1,WindowID(0)) ; On affiche le menu contextuel
        
        Case #PB_Event_Menu      ; Un élément du menu a été sélectionné
          Select EventMenu()     ; On recupère le numéro de cet élement...
            Case 1 : Debug "Menu : Ouvrir"
            Case 2 : Debug "Menu : Enregistrer"
            Case 4 : End
          EndSelect

      EndSelect
    Until Event = #PB_Event_CloseWindow
  EndIf





@++

Re: La guerre des menus

Publié : lun. 28/déc./2015 16:31
par JohnJohnsonSHERMAN
Merzi , c'était tout con et ca marche maintenant!!! En effet, c'était bien les deux menus qui avaient le même numéro... Bon ben merci en tout cas!!

Re: La guerre des menus

Publié : lun. 28/déc./2015 16:37
par celtic88
La guerre des menus ! :lol:

Re: La guerre des menus

Publié : mar. 29/déc./2015 10:36
par JohnJohnsonSHERMAN
En effet! Quand je pense que j´y ait passé une ou deux heures a me cramer les neurones pour un truc tout con (j´avait deux énum´ qui donnaient les memes numéros). En tout cas merci!

Re: La guerre des menus

Publié : mar. 29/déc./2015 10:54
par microdevweb
Personnellement pour éviter tout conflit j'utilise la même énumération pour toutes mes fenêtres et gadgets, tu peux également appelé l'énumération à différent endroit du code il suffit pour cela de la nommé

Exemple:

Code : Tout sélectionner

Enumeration Form
   #MainForm
EndEnumeration

; Code de main form

Enumeration Form
   #ClientForm
EndEnumeration

; Code Client form etc...

Dans le cas de gadget dynamique je préfère utilisé #Pb_Any en lieux et place d'une énumération