Image sur SubMenu

Programmation d'applications complexes
Le Soldat Inconnu
Messages : 4312
Inscription : mer. 28/janv./2004 20:58
Localisation : Clermont ferrand OU Olsztyn
Contact :

Image sur SubMenu

Message par Le Soldat Inconnu »

Salut,

un petit soucis, j'arrive à mettre une image sur un SubMenu pour un PopupMenu

Mais sur un PopupImageMenu, ça ne fonctionne pas.


si vous remplacer CreatePopupImageMenu( par CreatePopupMenu(, ça fonctionne.

Code : Tout sélectionner

Procedure menuImage(subMenu, iID, ico)
	; --> Extract an icon
	ExtractIconEx_("shell32.dll", ico, 0, @smIcons, 1)
	; --> Draw the icon onto a 16 x 16 blank image
	im=CreateImage(#PB_Any, 16, 16)
	himg = StartDrawing(ImageOutput(im))
		; --> White background to match menu background
		Box(0, 0, 16, 16, RGB(255, 255, 255))
		; --> Draw the icon
		DrawImage(smIcons, 0, 0, 16, 16)
	StopDrawing()
	; --> Add the image to myMENUITEMINFO structure
	SetMenuItemBitmaps_(subMenu,iID,#MF_BYPOSITION,ImageID(im),0)
	; --> Clean up
	DestroyIcon_(smIcons)
EndProcedure
If OpenWindow(0, 200, 200, 400, 110, "Set Menu Item Images", #PB_Window_SystemMenu)
	hMenu = CreatePopupImageMenu(0)
	MenuItem(0, "Testing 1")
	MenuItem(1, "Testing 2")
	OpenSubMenu("Submenu")
		MenuItem(2, "Testing 3")
	CloseSubMenu()
	MenuItem(3, "Testing 4")
	MenuItem(4, "Testing 5")
	MenuItem(5, "Testing 6")
	
	menuImage(hMenu, 0, 4)
	menuImage(hMenu, 1, 130)
	menuImage(hMenu, 2, 194)
	hsMenu1=GetSubMenu_(hMenu,2)
	menuImage(hsMenu1,0,4)
	menuImage(hMenu, 3, 43)
	menuImage(hMenu, 4, 10)
	menuImage(hMenu, 5, 90)
	
	DisplayPopupMenu(0, WindowID(0))
	Repeat
		Event = WaitWindowEvent()
	Until Event = #PB_Event_CloseWindow
EndIf
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)]
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Re: Image sur SubMenu

Message par Backup »

....
Dernière modification par Backup le mar. 19/août/2014 11:55, modifié 1 fois.
Le Soldat Inconnu
Messages : 4312
Inscription : mer. 28/janv./2004 20:58
Localisation : Clermont ferrand OU Olsztyn
Contact :

Re: Image sur SubMenu

Message par Le Soldat Inconnu »

Hum, comme tu dis ! Ton code ne marche pas mieux que le mien. On n'a pas du se comprendre

Je cherche à mettre une icône sur le submenu, par sur les item.

En gros dans le genre OpenSubMenu("Test", ImageId)
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)]
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Re: Image sur SubMenu

Message par Backup »

ha bah oui ! :?
Avatar de l’utilisateur
GeBonet
Messages : 453
Inscription : ven. 29/févr./2008 16:17
Localisation : Belgique

Re: Image sur SubMenu

Message par GeBonet »

Bonjour,

Ce code ci-dessous semble répondre à ta demande... Mais il FAUT disposer de la Lib
à charger selon le link... http://purik.nextmail.ru/PureBasic/XP_Menu_Lib.rar
C'est fait par des Russes... :!:
Et si c'est possible alors je ne doute pas que via les API(s) une solution :wink:
Il me semble que Nico avais aussi trouvé une solution... :?:

Code : Tout sélectionner

; --------------------------------------------------------------------------------------------------------------------------------------
; For compiling library needs Library XP_Menu_Lib - http://purik.nextmail.ru/PureBasic/XP_Menu_Lib.rar 
; --------------------------------------------------------------------------------------------------------------------------------------
StyleMenu.xp_menudata

Procedure GlavWindowCallback(WindowID, Message, wParam, lParam)
Protected Result=#PB_ProcessPureBasicEvents

XP_Menu_CB(WindowID, Message, wParam, lParam)

ProcedureReturn Result 
EndProcedure

Procedure SetSideText_CB(*DIS.DRAWITEMSTRUCT, *SideText.Xp_SideText)
    Shared FontID_Text, FontID_Text_1, FontID_Text_2
    Protected Result.c=0
    *SideText\y=2
    *SideText\x=2
    *SideText\FontID=FontID_Text
    *SideText\Color=RGB(147, 2, 108)
    
    If  *SideText\MenuType=0 ; General menu
    
        Select *SideText\TitlePopupMenu
            Case "File" 
                *SideText\Text="File"
                Result=1
            Case "Edit" 
                *SideText\Text="Edit"
                Result=1
            Case "Help"
                *SideText\Text="Help"
                Result=1
            Case "Files"
                *SideText\Text="Recent Files"
                Result=1
        EndSelect 
    
    ElseIf  *SideText\MenuType=1 ; Popup menu
    
        If *DIS\hwndItem=MenuID(8)
            *SideText\Text="Popup"
            *SideText\Color=0
            *SideText\FontID=FontID_Text_1
             Result=1
        ElseIf *DIS\hwndItem=MenuID(10)
            *SideText\Text="Tray"
            *SideText\Color=RGB(255, 11, 0)
            *SideText\FontID=FontID_Text_2
            *SideText\y=0
             Result=1
        EndIf
        
    ElseIf  *SideText\MenuType=2 ; System menu
            *SideText\FontID=FontID_Text_1
            *SideText\Color=RGB(254, 25, 21)
            *SideText\Text="System menu"
            *SideText\x=4
            *SideText\y=10
            Result=1
    EndIf
    
    ProcedureReturn Result
EndProcedure
; *************************************************************************
; 
; *************************************************************************
OpenWindow(4,0,0,300,200,"Example XP_Menu_Lib",#PB_Window_MinimizeGadget|#PB_Window_ScreenCentered|#PB_Window_Invisible) 
    ;pCreateGadgetList(WindowID(4)) 

    CheckBoxGadget(0,10,20,200,15,"Style menu general")    : SetGadgetState(0,1) 
    CheckBoxGadget(1,10,50,200,15,"Style menu popup") : SetGadgetState(1,1) 
    CheckBoxGadget(2,10,80,200,15,"Style menu system")   : SetGadgetState(2,1) 
    CheckBoxGadget(3,10,110,200,15,"Style menu tray")      : SetGadgetState(3,1) 
    
    TextGadget(4,10,140,80,15, "Style menu") 
    ComboBoxGadget(5,80,136,100,22) 
     AddGadgetItem(5,-1,"2000") 
     AddGadgetItem(5,-1,"XP") 
     AddGadgetItem(5,-1,"2003") 
     AddGadgetItem(5,-1,"Violet") 
     AddGadgetItem(5,-1,"Black") 
     AddGadgetItem(5,-1,"Gray")
     AddGadgetItem(5,-1,"Green")
    SetGadgetState(5,2) 

    ;ImageGadget(7,250,0,10,10,0)

    If CreateMenu(2,WindowID(4)) 
        MenuTitle("File") 
        MenuItem(1,"New"+Chr(9)+"Ctrl+N") 
        MenuItem(2,"Open..."+Chr(9)+"Ctrl+N") : DisableMenuItem(2,2,1) 
        MenuItem(3,"Save"+Chr(9)+"Ctrl+N") 
        MenuItem(4,"Save As..."+Chr(9)+"Ctrl+N") : DisableMenuItem(2,4,1) : SetMenuItemState(2,4,1) 
        MenuItem(46,"Save All"+Chr(9)+"Ctrl+N") 
        MenuItem(15,"Close"+Chr(9)+"Ctrl+N") : SetMenuItemState(2,15,1) 
        MenuBar() 
        OpenSubMenu("Files") 
         MenuItem(20,"1)    1") 
         MenuItem(21,"2)    2") 
         MenuItem(22,"3)    3") 
         MenuItem(23,"4)    4") 
         MenuItem(24,"5)    5") 
         MenuItem(25,"6)    6") 
         MenuItem(26,"7)    7") 
         MenuItem(27,"8)    8") 
         MenuItem(28,"9)    9") 
         MenuItem(29,"10)  10") 
        CloseSubMenu() 
        ; Ðàçäåëèòåëü ìåæäó ïóíêòàìè. 
        MenuBar() 
        MenuItem(6,"Exit") 
           MenuTitle("Edit") 
        MenuItem(7, "Undo") 
        MenuItem(8,"Redo") 
        
          MenuTitle("Help") 
          MenuItem(2,"About") 
          MenuBar() 
          OpenSubMenu(" ¹1") 
        For i=2 To 8 
            MenuItem(1,"Item") 
            OpenSubMenu(" ¹"+Str(i)) 
        Next 
        CloseSubMenu() 
        CloseSubMenu() 
        CloseSubMenu() 
        CloseSubMenu() 
        CloseSubMenu() 
        CloseSubMenu() 
        CloseSubMenu() 
        CloseSubMenu() 
        MenuItem(73,"Item") 
     
    EndIf 
; -----------------------------------------------

    If  CreatePopupMenu(8) 
        MenuItem(1,"Item 1") 
        MenuItem(2,"Item 2") 
    EndIf 
    
    If  CreatePopupMenu(10) 
        MenuItem(1,"Item 3") 
        MenuItem(2,"Item 4") 
    EndIf 
;     
;   ExtractIcon_(0,GetSystemDirectory()+"\sendmail.dll",0)  
;   AddSysTrayIcon(0,WindowID(4),ExtractIcon_(0,GetSystemDirectory()+"\sendmail.dll",0) )
;   SysTrayIconToolTip(0,"Example XP_Menu_Lib")
    
    SetWindowCallback(@GlavWindowCallback(),4) 
    
    XP_MenuRegister(MenuID(2), #XP_RegMenu, #XP_RegGeneralMenu,WindowID(4)) ; Ðåãèñòðàöèÿ ãëàâíîãî ìåíþ
    XP_MenuRegister(MenuID(8), #XP_RegMenu, #XP_RegPopupMenu)  ; Ðåãèñòðàöèÿ êîíòåêñòíîãî ìåíþ
    XP_MenuRegister(GetSystemMenu_(WindowID(4),0), #XP_RegMenu, #XP_RegSysMenu) ; Ðåãèñòðàöèÿ ñèñòåìíîãî ìåíþ
    XP_MenuRegister(GetSystemMenu_(WindowID(4),0), #XP_DelMenu, #XP_RegSysMenu) ; Ðåãèñòðàöèÿ ñèñòåìíîãî ìåíþ
    XP_MenuRegister(GetSystemMenu_(WindowID(4),0), #XP_RegMenu, #XP_RegSysMenu) ; Ðåãèñòðàöèÿ ñèñòåìíîãî ìåíþ
    XP_MenuRegister(MenuID(10), #XP_RegMenu, #XP_RegPopupMenu) ; Ðåãèñòðàöèÿ êîíòåêñòíîãî ìåíþ â òðåå
    ; 
    ; XP_SetMenuIcon(MenuID(2),1,ExtractIcon_(0,GetSystemDirectory()+"\sendmail.dll",0) )
    ; XP_SetMenuIcon(MenuID(2),2,ExtractIcon_(0,GetSystemDirectory()+"\shell32.dll",19) )
    ; XP_SetMenuIcon(MenuID(2),3,ExtractIcon_(0,GetSystemDirectory()+"\shell32.dll",38) )
    
    ;XP_SetMenuStyle()
    FontID_Text=LoadFont(4, "MS Sans Serif", 10,#PB_Font_Bold)
    FontID_Text_1=LoadFont(5, "MS Sans Serif", 8)
    FontID_Text_2=LoadFont(6, "Verdana", 12,#PB_Font_Bold)
      
    XP_SetSideText_CB(@SetSideText_CB()) ; Îáðàáîò÷èê ñîáûòèé îò ìåíþ. Èñïîëüçóåòñÿ äëÿ îòîáðàæåíèÿ òåêñòà â îáëàñòè çíà÷êîâ
    HideWindow(4,0)

Repeat
    Event=WaitWindowEvent()
    Gadget=EventGadget()
    Type=EventType()
    Menu=EventMenu()
    
    
    If Event=#WM_RBUTTONUP
     DisplayPopupMenu(8, WindowID(4))
    EndIf
    
    If Event=#PB_Event_SysTray
        If Type=#PB_EventType_RightClick
            DisplayPopupMenu(10, WindowID(4))
        EndIf
    EndIf
    
    If Event = #PB_Event_Gadget
        Select Gadget
            Case 0
                If XP_GetMenuStyle()=#XP_StyleNormal
                    XP_MenuRegister(MenuID(2), GetGadgetState(0), #XP_RegGeneralMenu)
                Else
                    XP_MenuRegister(MenuID(2), GetGadgetState(0), #XP_RegGeneralMenu, WindowID(4))
                EndIf 
            Case 1
                XP_MenuRegister(MenuID(8), GetGadgetState(1), #XP_RegPopupMenu) 
            Case 2
                XP_MenuRegister(GetSystemMenu_(WindowID(4),0),GetGadgetState(2), #XP_RegSysMenu)
            Case 3
                XP_MenuRegister(MenuID(10), GetGadgetState(3), #XP_RegPopupMenu)
                
            Case 5 ; Ñòèëü ìåíþ
    
                If Type=1
                    ;XP_GetMenuStructure(StyleMenu)
                    Select GetGadgetState(5)
                        Case 0
                         XP_SetMenuStyle(#XP_StyleNormal)
                         XP_EnableDrawTitleBar(WindowID(4), 0)
                        Case 1
                         XP_SetMenuStyle(#XP_StyleXP)
                         XP_EnableDrawTitleBar(WindowID(4), 1)
                        Case 2
                         XP_SetMenuStyle(#XP_Style2003)
                         XP_EnableDrawTitleBar(WindowID(4), 1)
                        Case 3
                         XP_SetMenuStyle(#XP_StyleViolet)
                         XP_EnableDrawTitleBar(WindowID(4), 1)
                        Case 4
                         XP_SetMenuStyle(#XP_StyleBlack)
                         XP_EnableDrawTitleBar(WindowID(4), 1)
                        Case 5
                         XP_SetMenuStyle(#XP_StyleGray)
                         XP_EnableDrawTitleBar(WindowID(4), 1)
                        Case 6
                         XP_SetMenuStyle(#XP_StyleGreen )
                         XP_EnableDrawTitleBar(WindowID(4), 1)
                    EndSelect  
                EndIf
                
        EndSelect
    EndIf

Until Event=#PB_Event_CloseWindow
Windows 7 et Windows 8.1 Pb 5.0 jusque 5.24 Lts 64 et 5.3 (64)/b]
“Ceux qui rêvent éveillés ont conscience de mille choses qui échappent à ceux qui ne rêvent qu’endormis.”
-Edgar Allan Poe-
Le Soldat Inconnu
Messages : 4312
Inscription : mer. 28/janv./2004 20:58
Localisation : Clermont ferrand OU Olsztyn
Contact :

Re: Image sur SubMenu

Message par Le Soldat Inconnu »

merci, je vais regarder ça
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)]
Répondre