Bonjour,
je me demandais s'il était possible (mais je ne crois pas) de faire un menu avec des lignes colorées ?
Du genre, la 1ere ligne (ouvrir) en vert, la 2eme ligne (fermer) en rouge.
J'ai pu mettre une icône + le texte du menu, mais changer la couleur de la ligne, la, cela me parait compliquer.
impossible ? lignes colorées dans menu
Re: impossible ? lignes colorées dans menu
de je ne sais qui :
ça va deja t'avancer ...
ce code colore le fond du menu, et le text
il colore aussi la selection, et le text sélectionné
il suffirai peut etre de légèrement modifier la procedure pour qu'elle colore indépendamment chaque ligne du menu ..
ça va deja t'avancer ...
ce code colore le fond du menu, et le text
il colore aussi la selection, et le text sélectionné

il suffirai peut etre de légèrement modifier la procedure pour qu'elle colore indépendamment chaque ligne du menu ..
Code : Tout sélectionner
Global SFColor.l, SBColor.l,DFColor.l,DBColor.l ,Icons.l
Structure new_mm
hFont.l
Text.s
hIco.l
EndStructure
Global Dim menu.new_mm(13)
Declare Menu_Owner(wnd, msg, wParam, lParam)
Icons = 15 ;Can be 0
If OpenWindow(0, 0, 0,400,300, "PopupMenu Test", #PB_Window_SystemMenu|#PB_Window_ScreenCentered)
SetWindowColor(0,$000000)
mhnd = CreateMenu(0, WindowID(0))
MenuTitle("File")
MenuItem( 1, "")
MenuItem( 2, "")
MenuItem( 3, "")
MenuBar()
MenuItem( 4, "")
MenuTitle("Edition")
MenuItem(5, "")
MenuItem(6, "")
MenuItem(7, "")
menu(0)\Text = " Load"
menu(1)\Text = " Save"
menu(2)\Text = " Save As...."
menu(3)\Text = " Quit"
menu(4)\Text = " Cut"
menu(5)\Text = " Copy"
menu(6)\Text = " Paste"
;hMenu = GetMenu_(WindowID(0))
ModifyMenu_(MenuID(0),1,#MF_BYCOMMAND|#MF_OWNERDRAW,1,menu(0))
ModifyMenu_(MenuID(0),2,#MF_BYCOMMAND|#MF_OWNERDRAW,2,menu(1))
ModifyMenu_(MenuID(0),3,#MF_BYCOMMAND|#MF_OWNERDRAW,3,menu(2))
ModifyMenu_(MenuID(0),4,#MF_BYCOMMAND|#MF_OWNERDRAW,4,menu(3))
ModifyMenu_(MenuID(0),5,#MF_BYCOMMAND|#MF_OWNERDRAW,5,menu(4))
ModifyMenu_(MenuID(0),6,#MF_BYCOMMAND|#MF_OWNERDRAW,6,menu(5))
ModifyMenu_(MenuID(0),7,#MF_BYCOMMAND|#MF_OWNERDRAW,7,menu(6))
; GetWindowRect_(WindowID(0), wr.RECT)
; OpenWindow(1,wr\left+90 ,wr\top+25,314,20,"",#WS_POPUP,WindowID(0))
; SetWindowColor(1,$000000)
; SetActiveWindow(0)
;**********************************************************************************
hPMenu = CreatePopupMenu(1)
MenuItem(10, "")
MenuItem(11, "")
MenuItem(12, "")
MenuBar()
OpenSubMenu("")
MenuItem(13, "")
MenuItem(14, "")
CloseSubMenu()
MenuBar()
MenuItem( 15, "")
menu(7)\Text = " Cut"
menu(8)\Text = " Copy"
menu(9)\Text = " Paste"
menu(10)\Text = " Options"
menu(11)\Text = " Window..."
menu(12)\Text = " Gadget..."
menu(13)\Text = " Quit"
ModifyMenu_(hPMenu,10,#MF_BYCOMMAND|#MF_OWNERDRAW,10,menu(7))
ModifyMenu_(hPMenu,11,#MF_BYCOMMAND|#MF_OWNERDRAW,11,menu(8))
ModifyMenu_(hPMenu,12,#MF_BYCOMMAND|#MF_OWNERDRAW,12,menu(9))
ModifyMenu_(hPMenu,13,#MF_BYCOMMAND|#MF_OWNERDRAW,13,menu(11))
ModifyMenu_(hPMenu,14,#MF_BYCOMMAND|#MF_OWNERDRAW,14,menu(12))
ModifyMenu_(hPMenu,15,#MF_BYCOMMAND|#MF_OWNERDRAW,15,menu(13))
;SubMenu
ModifyMenu_(hPMenu,4,#MF_BYPOSITION|#MF_OWNERDRAW,0,menu(10))
DFColor = rgb(176,13,169) ; couleur d'ecriture
DBColor = rgb(60,143,143) ; couleur fond du menu
SFColor = rgb(255,0,0) ; couleur du text selectionné
SBColor = rgb(0,0,255) ; couleur de la selection
SetWindowCallback( @Menu_Owner() )
; Result = GetMenuItemCount_(MenuID(0))
; For i = 0 To Result - 1
; Debug GetMenuItemCount_(GetSubMenu_(MenuID(0),i))
; Next
; Debug GetMenuItemCount_(MenuID(1))
Repeat
Select WaitWindowEvent()
Case #PB_Event_Gadget
If EventGadget() = 0 And EventType() = #PB_EventType_RightClick
DisplayPopupMenu(1, WindowID(0))
EndIf
Case #WM_RBUTTONDOWN
DisplayPopupMenu(1, WindowID(0))
Case #PB_Event_Menu
Select EventMenu() ; To see which menu has been selected
Case 1 ; Load
MessageRequester("PureBasic", "Load", 0)
Case 10 ; Cut
MessageRequester("PureBasic", "Cut", 0)
Case 11 ; Copy
MessageRequester("PureBasic", "Copy", 0)
Case 12 ; Paste
MessageRequester("PureBasic", "Paste", 0)
Case 4,15 ; Quit
Quit = 1
EndSelect
Case #PB_Event_CloseWindow
Quit = 1
EndSelect
Until Quit = 1
EndIf
End
;- les procedures
Procedure Menu_Owner(wnd, msg, wParam, lParam)
Select msg
Case #WM_MEASUREITEM
hdc = GetDC_(wnd)
*nmm.MEASUREITEMSTRUCT = lParam
*lnew_mm.new_mm = *nmm\itemData
GetTextExtentPoint32_(hdc,*lnew_mm\Text,Len(*lnew_mm\Text),@size.SIZE);
*nmm\itemWidth = size\cx + Icons
*nmm\itemHeight = size\cy
ReleaseDC_(wnd,hdc)
Case #WM_DRAWITEM
*nmd.DRAWITEMSTRUCT = lParam
*llnew_mm.new_mm = *nmd\itemData
If *nmd\itemState & #ODS_SELECTED
SetTextColor_(*nmd\hDC,SFColor)
SetBkColor_(*nmd\hDC,SBColor)
ExtTextOut_(*nmd\hDC,*nmd\rcItem\left + Icons,*nmd\rcItem\top,#ETO_OPAQUE,*nmd\rcItem,*llnew_mm\Text,Len(*llnew_mm\Text),0)
;DrawIconEx_(*nmd\hDC,*nmd\rcItem\left,*nmd\rcItem\top,*llnew_mm\hIco,14,14,0,0,3)
Else
SetTextColor_(*nmd\hDC,DFColor)
SetBkColor_(*nmd\hDC,DBColor)
ntx = *nmd\rcItem\left + Icons
nty = *nmd\rcItem\top
ExtTextOut_(*nmd\hDC,*nmd\rcItem\left + Icons,*nmd\rcItem\top,#ETO_OPAQUE,*nmd\rcItem,*llnew_mm\Text,Len(*llnew_mm\Text),0)
;DrawIconEx_(*nmd\hDC,*nmd\rcItem\left,*nmd\rcItem\top,*llnew_mm\hIco,14,14,0,0,3)
EndIf
EndSelect
ProcedureReturn #PB_ProcessPureBasicEvents
EndProcedure
;
; EPB
Re: impossible ? lignes colorées dans menu
trop fort
en modifiant le menu_owner, on peut effectivement faire ce que l'on veut



en modifiant le menu_owner, on peut effectivement faire ce que l'on veut
Code : Tout sélectionner
Procedure Menu_Owner(wnd, msg, wParam, lParam)
Select msg
Case #WM_MEASUREITEM
hdc = GetDC_(wnd)
*nmm.MEASUREITEMSTRUCT = lParam
*lnew_mm.new_mm = *nmm\itemData
GetTextExtentPoint32_(hdc,*lnew_mm\Text,Len(*lnew_mm\Text),@size.SIZE);
*nmm\itemWidth = size\cx + Icons
*nmm\itemHeight = size\cy
ReleaseDC_(wnd,hdc)
Case #WM_DRAWITEM
*nmd.DRAWITEMSTRUCT = lParam
*llnew_mm.new_mm = *nmd\itemData
If *nmd\itemState & #ODS_SELECTED
SetTextColor_(*nmd\hDC,SFColor)
SetBkColor_(*nmd\hDC,SBColor)
ExtTextOut_(*nmd\hDC,*nmd\rcItem\left + Icons,*nmd\rcItem\top,#ETO_OPAQUE,*nmd\rcItem,*llnew_mm\Text,Len(*llnew_mm\Text),0)
;DrawIconEx_(*nmd\hDC,*nmd\rcItem\left,*nmd\rcItem\top,*llnew_mm\hIco,14,14,0,0,3)
Else
ntx = *nmd\rcItem\left + Icons
nty = *nmd\rcItem\top
If nty = 16
SetTextColor_(*nmd\hDC,DFColor)
SetBkColor_(*nmd\hDC,DBColor)
ExtTextOut_(*nmd\hDC,*nmd\rcItem\left + Icons,*nmd\rcItem\top,#ETO_OPAQUE,*nmd\rcItem,*llnew_mm\Text,Len(*llnew_mm\Text),0)
Else
SetTextColor_(*nmd\hDC,DFColor)
SetBkColor_(*nmd\hDC,SBColor)
ExtTextOut_(*nmd\hDC,*nmd\rcItem\left + Icons,*nmd\rcItem\top,#ETO_OPAQUE,*nmd\rcItem,*llnew_mm\Text,Len(*llnew_mm\Text),0)
EndIf
;DrawIconEx_(*nmd\hDC,*nmd\rcItem\left,*nmd\rcItem\top,*llnew_mm\hIco,14,14,0,0,3)
EndIf
EndSelect
ProcedureReturn #PB_ProcessPureBasicEvents
EndProcedure
Re: impossible ? lignes colorées dans menu
sympa ce petit code. Merci Dobro.
@++
@++
Windows 10 x64, PureBasic 5.73 x86 & x64
GPU : radeon HD6370M, CPU : p6200 2.13Ghz
GPU : radeon HD6370M, CPU : p6200 2.13Ghz
- Kwai chang caine
- Messages : 6989
- Inscription : sam. 23/sept./2006 18:32
- Localisation : Isere
Re: impossible ? lignes colorées dans menu
Peut etre du grand RASHAD ??de je ne sais qui :
http://www.purebasic.fr/english/viewtop ... 01#p338301
Re: impossible ? lignes colorées dans menu
exacte ! 
il n'a qu'a signer ses méfaits apres tout

il n'a qu'a signer ses méfaits apres tout

- Kwai chang caine
- Messages : 6989
- Inscription : sam. 23/sept./2006 18:32
- Localisation : Isere
Re: impossible ? lignes colorées dans menu
il n'a qu'a signer ses méfaits apres tout
