Au sujet des menus

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
pat
Messages : 411
Inscription : mar. 24/nov./2009 15:13

Au sujet des menus

Message par pat »

Bonjour à tous,

Comme vous le savez peut-être, PB donne des commandes sur les menus bien sympas et très utiles.
On commence par créer le titre du menu puis les menus avec un numéro pour chacun.
Mais il n'y a pas de numéro pour les titres de menu.
J'ai remarqué un programme qui n'avait pas de sous-menu mais seulement un titre de menu et on pouvait cliquer dessus et l'action demandé s'exécutait.
Comme faire pareil avec PB étant donné qu'il n'y a pas de numéro pour les menus.
Merci à ceux qui savent.
Mesa
Messages : 1126
Inscription : mer. 14/sept./2011 16:59

Re: Au sujet des menus

Message par Mesa »

Avec Windows, on peut utiliser les messages avec un wincallback.
C'est compliqué mais je ne pense pas qu'il y ait plus simple.

Code : Tout sélectionner

Procedure WinCallback(hwnd, message, wparam, lparam)
  
  Select message
    Case #WM_MENUSELECT
      Numero_du_Menu = wparam & $ffff
      Debug "Menu n° " + Str(Numero_du_Menu)
      
  EndSelect
  
ProcedureReturn #PB_ProcessPureBasicEvents

EndProcedure


If OpenWindow(0, 100, 100, 800, 600, "Menu", #PB_Window_SystemMenu)
  Menu=CreateMenu(0, WindowID(0))
  MenuTitle("Menu 0")
  MenuItem(1, "Sous Menu 1")
  MenuItem(2, "Sous Menu 2")
  MenuItem(3, "Sous Menu 3")
  MenuItem(100, "Sous Menu 100")
  MenuTitle("Menu 1")
  MenuTitle("Menu 2")
  
  
  SetWindowCallback(@WinCallback())
  
  Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow
EndIf
Mesa.
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Re: Au sujet des menus

Message par Backup »

+1
Mesa
Messages : 1126
Inscription : mer. 14/sept./2011 16:59

Re: Au sujet des menus

Message par Mesa »

Amélioration du code.

Avec le code ci-dessus, avec des sous-menus, il faut appuyer une fois pour ouvrir le menu et une deuxième fois pour le refermer. Par contre sans sous-menus, c'est comme s'il ne se refermait jamais, ce qui rend le code inutilisable.

Maintenant les menus se ferment:

Code : Tout sélectionner

Procedure WinCallback(hwnd, message, wparam, lparam)
  
  Select message
    Case #WM_MENUSELECT
      Numero_du_Menu = wparam & $ffff
      ;Debug "Menu n° " + Str(Numero_du_Menu)
      Select Numero_du_Menu
        Case 0
          Debug "Menu n° " + Str(Numero_du_Menu)
          
        Case 1
          Debug "Menu n° " + Str(Numero_du_Menu)
          EndMenu_()
        Case 2
          Debug "Menu n° " + Str(Numero_du_Menu)
          EndMenu_()
      EndSelect
  EndSelect
  
  ProcedureReturn #PB_ProcessPureBasicEvents
  
EndProcedure


hwin=OpenWindow(0, 100, 100, 800, 600, "Menu", #PB_Window_SystemMenu)
Menu=CreateMenu(0, WindowID(0))
MenuTitle("Menu 0")
MenuItem(10, "Sous Menu 10")
MenuItem(20, "Sous Menu 20")
MenuItem(30, "Sous Menu 30")
MenuItem(100, "Sous Menu 100")
MenuTitle("Menu 1")
MenuTitle("Menu 2")


SetWindowCallback(@WinCallback())

Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow
;EndIf
Il y a tout de même un bug quand on passe de menu0 directement à menu1, le menu1 se déclenche sans cliquer dessus.

Mesa.
pat
Messages : 411
Inscription : mar. 24/nov./2009 15:13

Re: Au sujet des menus

Message par pat »

Merci à tous.
Comme je ne suis pas chez moi je vais voir ça de plus près et d'avance je vous fais confiance.
pat
Messages : 411
Inscription : mar. 24/nov./2009 15:13

Re: Au sujet des menus

Message par pat »

J'ai regardé la SDK Documentation pour les APIs.
Effectivement, on récupère le mot bas de wParam et on a le handle du menu mais effectivement le titre du menu (menubar) se comporte exactement comme un sous-menu (submenu) et je ne vois pas quoi changer pour qu'il se comporte comme un menu.
Pourtant j'ai bien vu un programme avec un titre de menu, qui se comportait comme un menu, et qui renvoyait à une action particulière.
Ce qui veut dire que c'est possible mais comment faire pour que cela soit fait de manière correcte ?
Avatar de l’utilisateur
Kwai chang caine
Messages : 6989
Inscription : sam. 23/sept./2006 18:32
Localisation : Isere

Re: Au sujet des menus

Message par Kwai chang caine »

J'ai remarqué un programme qui n'avait pas de sous-menu mais seulement un titre de menu et on pouvait cliquer dessus et l'action demandé s'exécutait.
Peut etre ce code qui nous viens du grand SROD peut t'aider :wink:

Code : Tout sélectionner

If OpenWindow(0, 200, 200, 400, 100, "MenuTitle Example") 
  If CreateMenu(0, WindowID(0)) 
    MenuTitle("Project") 
      MenuItem(1, "Open")  
      MenuItem(2, "Close") 
    MenuTitle("&Edit") 
      MenuItem(3, "Undo") 
      MenuItem(4, "Redo") 
      CloseSubMenu()
    MenuItem(5, "About") 
  EndIf 
  Repeat
    ev = WaitWindowEvent()
    Select ev
      Case #PB_Event_Menu
        If EventMenu() = 5
          Debug "About clicked!"    
        EndIf
    EndSelect
  Until ev=#PB_Event_CloseWindow 
EndIf
ImageLe bonheur est une route...
Pas une destination

PureBasic Forum Officiel - Site PureBasic
Mesa
Messages : 1126
Inscription : mer. 14/sept./2011 16:59

Re: Au sujet des menus

Message par Mesa »

Ça alors, ça marche ! 8O :idea:

Comme le Code ci-dessus.
En plus c'est multiplateforme!

Code : Tout sélectionner

If OpenWindow(0, 200, 200, 400, 100, "MenuTitle Exemple")
  If CreateMenu(0, WindowID(0))
    MenuTitle("Menu 0")
    MenuItem(10, "Sous Menu 10")
    MenuItem(20, "Sous Menu 20")
    MenuItem(30, "Sous Menu 30")
    MenuItem(100, "Sous Menu 100")
    CloseSubMenu()
    MenuItem(1,"Menu 1")
    MenuItem(2,"Menu 2")
  EndIf
  Repeat
    ev = WaitWindowEvent()
    Select ev
      Case #PB_Event_Menu
        
        Select EventMenu()
          Case 0
            Debug "Menu 0" ; ne marche pas mais ce n'est pas nécessaire
          Case 1
            Debug "Menu 1"
          Case 2
            Debug "Menu 2"
          Case 10
            Debug "Menu 10"
          Case 20
            Debug "Menu 20"
          Case 30
            Debug "Menu 30"
          Case 100
            Debug "Menu 100"
        EndSelect
    EndSelect
  Until ev=#PB_Event_CloseWindow
EndIf


Mesa.
Avatar de l’utilisateur
Kwai chang caine
Messages : 6989
Inscription : sam. 23/sept./2006 18:32
Localisation : Isere

Re: Au sujet des menus

Message par Kwai chang caine »

It's that, the magic SROD word :lol: :lol:
ImageLe bonheur est une route...
Pas une destination

PureBasic Forum Officiel - Site PureBasic
pat
Messages : 411
Inscription : mar. 24/nov./2009 15:13

Re: Au sujet des menus

Message par pat »

A Kwai chang caine.
Un grand merci à toi. Ton aide me sera très précieuse. Il fallait y penser.
Et pas besoin d'API, donc comme le dit mesa, c'est multiplateforme.
Avatar de l’utilisateur
Kwai chang caine
Messages : 6989
Inscription : sam. 23/sept./2006 18:32
Localisation : Isere

Re: Au sujet des menus

Message par Kwai chang caine »

De rien content de t'avoir rendu service. :D
Mais tout le mérite reviens à SROD 8)

C'est vrai que c'est tellement simple que ça en etait quasi impossible à trouver quand on connait pas la combine. 8O
J'avais eu besoin de ça moi aussi au début de ma rencontre avec PB, et SROD m'avait drolement dépanné 8) 8)
ImageLe bonheur est une route...
Pas une destination

PureBasic Forum Officiel - Site PureBasic
pat
Messages : 411
Inscription : mar. 24/nov./2009 15:13

Re: Au sujet des menus

Message par pat »

A Kwai chang caine.
Sans toi je n'aurais jamais su comment faire, donc merci à toi et aussi à SROD.
dayvid
Messages : 1242
Inscription : mer. 11/nov./2009 18:17
Localisation : Poitiers (Vienne)

Re: Au sujet des menus

Message par dayvid »

C'est qui SROD :?
La vie, C'est comme, Une boitte, De startis, On en voie, De toutes, Les couleurs !

Mon forum http://purebasic.forumphp3.com/index.php
Avatar de l’utilisateur
Ar-S
Messages : 9540
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: Au sujet des menus

Message par Ar-S »

Un membre du forum anglais.
~~~~Règles du forum ~~~~
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
dayvid
Messages : 1242
Inscription : mer. 11/nov./2009 18:17
Localisation : Poitiers (Vienne)

Re: Au sujet des menus

Message par dayvid »

Ah ok, merci Ar'S :)
La vie, C'est comme, Une boitte, De startis, On en voie, De toutes, Les couleurs !

Mon forum http://purebasic.forumphp3.com/index.php
Répondre