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