Icône dans un menu
Publié : jeu. 29/janv./2004 10:26
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.
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