Changer le look d'un menu en cours d'exécution

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Marc56
Messages : 2198
Inscription : sam. 08/févr./2014 15:19

Changer le look d'un menu en cours d'exécution

Message par Marc56 »

Hello,

CreateImageMenu, CreatePopupImageMenu ont une option #PB_Menu_ModernLook qui permet de leur donner le 'look' office (barre verticale dégradée et couleur différente de la barre de sélection).

J'aimerais donner à mes utilisateurs la possibilité d'activer ou non ce look 'office'
(de plus, le gestionnaire de Form n'a pas cette option, il faut l'ajouter à la main avant de compiler puis le remettre à chaque fois)

Question: Peut-on changer ce paramètre (c'est à dire le look d'un menu) en cours d’exécution du programme ?

Il y a bien sûr la possibilité de supprimer le menu puis de le re-créer, mais je n'ai pas testé
(= pas vérifié que ça ne met pas la zone dans les ID)

:?:
Avatar de l’utilisateur
falsam
Messages : 7324
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: Changer le look d'un menu en cours d'exécution

Message par falsam »

Bonjour Marc.

Rien en natif pour changer l'attribut du style de menu.
Marc56 a écrit :l y a bien sûr la possibilité de supprimer le menu puis de le re-créer
La solution est effectivement là.

Code : Tout sélectionner

Enumeration Window
  #MainForm
  #MainMenu
EndEnumeration

Enumeration Gadget
  #Click
EndEnumeration

Declare MainFormShow()
Declare MainMenuShow()

MainFormShow()

Procedure MainFormShow()
  If OpenWindow(#MainForm, 0, 0, 500, 300, "New Project", #PB_Window_SystemMenu|#PB_Window_ScreenCentered)          
    ButtonGadget(#Click, 400, 20, 80, 22, "Click me")
    
    MainMenuShow()  
    BindGadgetEvent(#Click, @MainMenuShow())    
    
    Repeat : Until WaitWindowEvent(10) = #PB_Event_CloseWindow
  EndIf
EndProcedure


Procedure MainMenuShow()
  Protected ModernLook = GetGadgetData(#Click)
  
  If ModernLook = #False
    SetGadgetData(#Click, #PB_Menu_ModernLook)
  Else
    SetGadgetData(#Click, #False)
  EndIf
  
  If CreateImageMenu(#MainMenu, WindowID(#MainForm), ModernLook)  
    MenuTitle("Project")
    MenuItem(1, "Open"   +Chr(9)+"Ctrl+O")
    MenuItem(2, "Save"   +Chr(9)+"Ctrl+S")
    MenuItem(3, "Save as"+Chr(9)+"Ctrl+A")
    MenuItem(4, "Close"  +Chr(9)+"Ctrl+C")
  EndIf
EndProcedure
Click Me and Show Menu :wink:
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%
Marc56
Messages : 2198
Inscription : sam. 08/févr./2014 15:19

Re: Changer le look d'un menu en cours d'exécution

Message par Marc56 »

Merci falsam,

J'avais pensé qu'il fallait aussi utiliser FreeMenu() avant de re-créer, mais ça marche.

:wink:
Répondre