icone d'un exe dans un menu flottant
Publié : sam. 21/juil./2007 15:26
Bonjour a tous
je decouvre purebasic (je connais le c++) et j'ai un probleme. Je souhaiterais creer un menu popup depuis le systray (jusque la pas de probleme) et mettre une icone sur le cote de chaque entre du menu. Jusque la, j'ai pas de probleme. La ou j'en ai un, c'est que je souhaiterais que ces icones soient celle d'un fichier exe (ou dll).
le probleme semble etre par ici "SetMenuItemBitmaps_(PopUpMenu, #MENU_1, #MF_BYCOMMAND, idicon,idicon)" mais je vois pas quoi faire.
je decouvre purebasic (je connais le c++) et j'ai un probleme. Je souhaiterais creer un menu popup depuis le systray (jusque la pas de probleme) et mettre une icone sur le cote de chaque entre du menu. Jusque la, j'ai pas de probleme. La ou j'en ai un, c'est que je souhaiterais que ces icones soient celle d'un fichier exe (ou dll).
Code : Tout sélectionner
Global PopUpMenu
Global nomessai.s = "c:\windows\system32\shell32.dll"
Global idicon
Enumeration
#windows_1
#popupmenu_1
#MENU_1
EndEnumeration
Declare GetExeIcon()
Declare CatchExeSmallIcon()
Declare CatchExeBigIcon()
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
Procedure fenetretray()
If OpenWindow(#windows_1, 100, 150, 300, 100, "H.L.M.",#PB_Window_SystemMenu)
PopUpMenu= CreatePopupMenu(#popupmenu_1) ; La création du menu contextuel commence...
MenuItem(#MENU_1, "ouvrir") ; comme si c'était un menu normal...
CatchExeSmallIcon()
SetMenuItemBitmaps_(PopUpMenu, #MENU_1, #MF_BYCOMMAND, idicon,idicon)
EndIf
EndProcedure
Procedure.l CatchExeIcon( Flags.l)
ExeName.s = Space(255)
GetModuleFileName_(0, @ExeName, 255)
SHGetFileInfo_(nomessai, 0, @InfosFile.SHFILEINFO, SizeOf(SHFILEINFO), #SHGFI_ICON | Flags)
idicon=InfosFile\hIcon
ProcedureReturn idicon
EndProcedure
Procedure.l CatchExeBigIcon()
ProcedureReturn CatchExeIcon(#SHGFI_LARGEICON)
EndProcedure
Procedure.l CatchExeSmallIcon()
ProcedureReturn CatchExeIcon(#SHGFI_SMALLICON)
EndProcedure
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
fenetretray()
AddSysTrayIcon(1, WindowID(0), LoadImage(1000, "back.ico"))
SysTrayIconToolTip(1, "tray1")
Repeat
Event = WaitWindowEvent()
If Event = #PB_Event_SysTray ; si clique sur systray
If EventType() = #PB_EventType_LeftClick
DisplayPopupMenu(#popupmenu_1,WindowID(0))
EndIf
If EventType() = #PB_EventType_RightClick
Event = #PB_Event_CloseWindow
EndIf
EndIf
Until Event = #PB_Event_CloseWindow