Icône dans un menu

Partagez votre expérience de PureBasic avec les autres utilisateurs.
Le Soldat Inconnu
Messages : 4312
Inscription : mer. 28/janv./2004 20:58
Localisation : Clermont ferrand OU Olsztyn
Contact :

Icône dans un menu

Message par Le Soldat Inconnu »

Un code de MONSEIGNEUR Denis

attention, ça ne marche qu'avec des image au format bmp et le blanc des images sera considéré comme transparent.

Code : Tout sélectionner

; constantes
#index = 0
#Fenetre_principale = #index : #index = #index + 1
#MonImage = #index : #index = #index + 1
#MonImageCocher = #index : #index = #index + 1
#MENU_Copier = #index : #index = #index + 1
#MENU_Coller = #index : #index = #index + 1
#MENU_Cocher = #index : #index = #index + 1
#MENU_DeCocher = #index : #index = #index + 1
#Menu = #index : #index = #index + 1

#MF_BYCOMMAND = 0
#MF_BYPOSITION = $400
#SM_CXMENUCHECK = 71
#SM_CYMENUCHECK = 72



; Variable globale
Global MenuIdentificateurWIndows.l

; ;/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\
; ;\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/

Procedure AfficheIconeMenu(WIndowsMenuID, MenuId.l, ImageNormale.l, ImageCocher.l)
  
  ; WIndowsMenuID est le Handle du menu c'est à dire le numéro attribué par Windows au menu crée
  ; on récupère ce Handle lorsque l'on crée le menu;
  ; j'ai utilisé ceci : MenuIdentificateurWIndows = CreateMenu(#Menu, WindowID(#Fenetre_principale))
  
  ; MenuId est l'identificateur statique de l'élément du menu ou l'on veut afficher l'image
  ; pour cet exemple #MENU_Copier
  
  ; ImageNormale est l'image qui s'affichera en mode non coché (car on peut cocher un menu
  ; soit avec un espèce de v ou avec un petit rond plein ou dans le cas d'un menu avec une
  ; imagge, l'image en mode cochée sera différente de celle en mode non coché
  
  ; ImageCocher est l'image qui s'affichera en coché
  
  SetMenuItemBitmaps_(WIndowsMenuID, MenuId, #MF_BYCOMMAND, ImageNormale, ImageCocher)
  
EndProcedure

; ;/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\
; ;\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/


If OpenWindow(#Fenetre_principale, 200, 200, 500, 300, #PB_Window_SystemMenu, " Essai de Menus avec images")
  
  ; creation d'un menu
  
  ; ; -------------------- menu Fichier --------------------------
  
  ; récupère le Handle du Menu
  MenuIdentificateurWIndows = CreateMenu(#Menu, WindowID(#Fenetre_principale))
  
  ; teste que la création du menu a réussi, c'est-à-dire que createmenu retourne 0 si le menu
  ; n'a pas pu être crée
  If MenuIdentificateurWIndows
    MenuTitle("Fichier")
    MenuItem(#MENU_Copier, "Copier")
    MenuItem(#MENU_Coller, "Coller")
    MenuBar()
    MenuItem(#MENU_Cocher, "Cocher le menu Copier avec l'image correspondante")
    MenuBar()
    MenuItem(#MENU_DeCocher, "Décocher le menu Copier avec l'image correspondante")
    
    ; ; ------------------------------------------------------------
  EndIf
  
  ; on charge les images qui vont s'afficher à coté du menu copier en mode coché/décoché
  Resultat.l = LoadImage(#MonImage, "menu.bmp")
  Resultat2.l = LoadImage(#MonImageCocher, "options.bmp")
  
  ; teste d'abord si les images ont bien été chargées
  If resultat And Resultat2
    AfficheIconeMenu(MenuIdentificateurWIndows, #MENU_Copier, UseImage(#MonImage), UseImage(#MonImageCocher))
  EndIf
  
  
EndIf



; ;  Boucle d'évènement de PB

Repeat
  
  Select WaitWindowEvent()
      
    Case #PB_EventCloseWindow ; teste si la croix en haut à droite a été enfoncée
      QuitterLeProg = 1 ; si oui on quitte
      
    Case #PB_Event_Menu ; on récupère les événement générés par les menus
      Select EventGadgetID()
        Case #MENU_Cocher ; si l'utilisateur a sélectionné le menu cocher l'image ...
          ; alors on affiche l'image en mode coché
          SetMenuItemState(#MENU, #MENU_Copier, 1)
          
        Case #MENU_DeCocher ; si l'utilisateur a sélectionné le menu décocher l'image ...
          ; alors on affiche l'image en mode decoché
          SetMenuItemState(#MENU, #MENU_Copier, 0)
      EndSelect
      
  EndSelect
Until QuitterLeProg


End
Je ne suis pas à moitié Polonais mais ma moitié est polonaise ... Vous avez suivi ?

[Intel quad core Q9400 2.66mhz, ATI 4870, 4Go Ram, XP (x86) / 7 (x64)]