PopUpMenus multiples au choix de l'utilisateur

Partagez votre expérience de PureBasic avec les autres utilisateurs.
Avatar de l’utilisateur
Jacobus
Messages : 1559
Inscription : mar. 06/avr./2004 10:35
Contact :

PopUpMenus multiples au choix de l'utilisateur

Message par Jacobus »

J'avais besoin de cette possibilité dans un explorateur afin d'activer ou de désactiver certaines fonctions de mes PopUpMenus (j'utilise DisableMenuItem() certes, mais bon). Au final j'ai trouvé cette solution qui permet une plus grande amplitude et plus de possibilités.

L'exemple qui suit propose le choix du PopUpMenu à l'aide d'options, mais c'est très facile d'agir suivant une action, un mode spécial ou autre. On peut ainsi activer ou désactiver des protections, ajouter ou retirer des fonctions (par exemple en fonction d'un niveau d'acréditation) ou pour plein d'autres raisons. Je n'y avais pas encore songé mais maintenant je trouve ça cool, je vous en fais donc profiter.

Code : Tout sélectionner

Enumeration
#Windo

#PopUpSysExplorer1
#Menu1_Open
#Menu1_Properties

#PopUpSysExplorer2
#Menu2_Open
#Menu2_Properties

#Option1
#Option2
#Option3
#Explorer

EndEnumeration

Procedure SelectPopUpMenu()
 Option1 = GetGadgetState(#Option1)
 Option2 = GetGadgetState(#Option2)
 Option3 = GetGadgetState(#Option3)
 If Option1 = 1
  DisplayPopupMenu(#PopUpSysExplorer1,WindowID(#Windo))
 ElseIf Option2 = 1
  DisplayPopupMenu(#PopUpSysExplorer2,WindowID(#Windo))
 ElseIf Option3 = 1
  MessageRequester("PopUpMenu","Les Menus PopUp ont été désactivés",#MB_ICONINFORMATION)
 EndIf 
EndProcedure

Global MainTitle$,Rep$
MainTitle$ = "Fenêtre de test"
Rep$ = "c:\"

Hwnd = OpenWindow(#Windo,0,0, 790, 550, MainTitle$, #PB_Window_SystemMenu | #PB_Window_ScreenCentered | #PB_Window_TitleBar)
 If Hwnd = 0 Or CreateGadgetList(WindowID(#Windo))=0  
   End 
 EndIf
 
;-Menus PopUp
;{-PopUp Explorer 1
  HPopUpSysExplorer1 = CreatePopupMenu(#PopUpSysExplorer1)
  If HPopUpSysExplorer1
    MenuTitle("PopUp Menu 1 activé")
    MenuItem(#Menu1_Open, "Ouvrir ce fichier")
    MenuBar()
    MenuItem(#Menu1_Properties, "Propriétés")
  EndIf 
;}  
;{-PopUp Explorer 2
  HPopUpSysExplorer2 = CreatePopupImageMenu(#PopUpSysExplorer2, #PB_Menu_ModernLook)
  If HPopUpSysExplorer2
    MenuTitle("PopUp Menu 2 activé")
    MenuItem(#Menu2_Open, "Ouvrir ce fichier")
    MenuBar()
    MenuItem(#Menu2_Properties, "Propriétés")
  EndIf   
;}

 OptionGadget(#Option1,10,10,150,20,"Activer PopUp Menu 1")
 OptionGadget(#Option2,10,35,150,20,"Activer PopUp Menu 2")
 OptionGadget(#Option3,10,60,150,20,"Pas de PopUp Menu")
 SetGadgetState(#Option1, 1)
 
 ExplorerListGadget(#Explorer,200,5,585,540, Rep$,#PB_Explorer_AlwaysShowSelection)
  ChangeListIconGadgetDisplay(#Explorer, #PB_ListIcon_LargeIcon)
 SetGadgetColor(#Explorer, #PB_Gadget_FrontColor, RGB(255, 255, 255))
 SetGadgetColor(#Explorer, #PB_Gadget_BackColor, RGB(153, 179, 234))


Repeat  
  Select WaitWindowEvent() 
    Case #PB_Event_Gadget  
      Select EventGadget()
      
        
        Case #Explorer
          Select EventType()
           Case #PB_EventType_RightClick
             PosPopup = GetGadgetState(#Explorer)
              If PosPopup >= 0
                Resultat = GetGadgetItemState(#Explorer, PosPopup)
                SelectPopUpMenu()
              EndIf
          EndSelect
        
        
      EndSelect  
      
;-MENUS    
    Case #PB_Event_Menu 
      Select EventMenu()
      
        Case #Menu1_Open : MessageRequester("PopUpMenu","Ouvrir depuis menu 1",#MB_ICONINFORMATION)
        
        Case #Menu1_Properties : MessageRequester("PopUpMenu","Propriétés depuis menu 1",#MB_ICONINFORMATION)
        
        Case #Menu2_Open : MessageRequester("PopUpMenu","Ouvrir depuis menu 2",#MB_ICONINFORMATION)
        
        Case #Menu2_Properties : MessageRequester("PopUpMenu","Propriétés depuis menu 2",#MB_ICONINFORMATION)
      
      
      EndSelect 
      
        
;-Fermeture     
      
    Case #PB_Event_CloseWindow :Quitter = 1
      
      
  EndSelect  
  
Until Quitter
End 
:wink:
Quand tous les glands seront tombés, les feuilles dispersées, la vigueur retombée... Dans la morne solitude, ancré au coeur de ses racines, c'est de sa force maturité qu'il renaîtra en pleine magnificence...Jacobus.
Ollivier
Messages : 4197
Inscription : ven. 29/juin/2007 17:50
Localisation : Encore ?
Contact :

Message par Ollivier »

L'idée est toute bête. Mais ce code est important. Merci Jacobus !
Répondre