Si tu utilises CreateImageMenu() tu ne pourras pas nativement changer les images de chaque item.
La solution serait de passer par le menu normal et associer une API (Windows uniquement) pour ajouter une image à ton item de menu.
■ Pour chaque item de ton menu, on va affecter une image normal et une image de remplacement.
Exemple :
SetMenuItemBitmaps_(MenuID(Menu), Item, #MF_BYCOMMAND, ImageID(ImageNormal), ImageID(ImageDeRemplacement))
■ Dans ta boucle événementielle tu vas tester quel est l'item qui a été sélectionné et tester l'état actuel de l'élément pour connaitre l'image qui est active (
0 Premiere image, 1 : Deuxième image)
Code : Tout sélectionner
Enumeration Window
#MainForm
EndEnumeration
Enumeration Menu
#Menu
#MenuCreate
#MenuSave
EndEnumeration
UsePNGImageDecoder()
ImageNew = LoadImage(#PB_Any, #PB_Compiler_Home+"Examples\Sources\Data\ToolBar\New.png")
ImageSave = LoadImage(#PB_Any, #PB_Compiler_Home+"Examples\Sources\Data\ToolBar\Save.png")
ImageDeRemplacement = LoadImage(#PB_Any, #PB_Compiler_Home+"Examples\Sources\Data\ToolBar\Copy.png")
If OpenWindow(#MainForm, 200, 200, 200, 100, "Exemple MenuItem")
If CreateMenu(#Menu, WindowID(#MainForm))
MenuTitle("&Projet")
;Creation d'un menu normal
MenuItem(#MenuCreate, "Nouveau")
MenuItem(#MenuSave, "&Enregistrer")
;Ajout des images normal et image de remplacement (API)
SetMenuItemBitmaps_(MenuID(#Menu), #MenuCreate, #MF_BYCOMMAND, ImageID(ImageNew), ImageID(ImageDeRemplacement))
SetMenuItemBitmaps_(MenuID(#Menu), #MenuSave, #MF_BYCOMMAND, ImageID(ImageSave),ImageID(ImageDeRemplacement))
EndIf
Repeat
;Capture des évenements utiles à cette application
Event = WindowEvent()
WEvent = EventWindow() ;Fenetre qui a provoqué l'évement
MEvent = EventMenu() ;Menu qui a provoqué un évenement
GEvent = EventGadget() ;Gadget qui a provoqué un évenement
TEvent = EventType() ;Type qui génére un évenement
Select Event
Case #PB_Event_Menu ;Un evenement menu se produit
Select MEvent
Case #MenuCreate
If GetMenuItemState(#Menu, #MenuCreate) = 0
SetMenuItemState(#Menu, #MenuCreate, 1)
;le reste de ton code
Else
SetMenuItemState(#Menu, #MenuCreate, 0)
;le reste de ton code
EndIf
Case #MenuSave
;Idem avec ton image de remplacement
EndSelect
EndSelect
Until Event =#PB_Event_CloseWindow
EndIf
PS : Tu as encore un souci de compréhension dans la gestion des événements.
Regarde ce tutoriel sur la gestion des événements.
http://www.purebasic.fr/french/viewtopi ... 1296#p1296