impossible ? lignes colorées dans menu

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
supercdfr
Messages : 105
Inscription : sam. 21/juil./2007 15:16

impossible ? lignes colorées dans menu

Message par supercdfr »

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.
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Re: impossible ? lignes colorées dans menu

Message par Backup »

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 ..

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

supercdfr
Messages : 105
Inscription : sam. 21/juil./2007 15:16

Re: impossible ? lignes colorées dans menu

Message par supercdfr »

trop fort :D :D :D

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
Avatar de l’utilisateur
venom
Messages : 3138
Inscription : jeu. 29/juil./2004 16:33
Localisation : Klyntar
Contact :

Re: impossible ? lignes colorées dans menu

Message par venom »

sympa ce petit code. Merci Dobro.






@++
Windows 10 x64, PureBasic 5.73 x86 & x64
GPU : radeon HD6370M, CPU : p6200 2.13Ghz
Avatar de l’utilisateur
Kwai chang caine
Messages : 6989
Inscription : sam. 23/sept./2006 18:32
Localisation : Isere

Re: impossible ? lignes colorées dans menu

Message par Kwai chang caine »

de je ne sais qui :
Peut etre du grand RASHAD ??
http://www.purebasic.fr/english/viewtop ... 01#p338301
ImageLe bonheur est une route...
Pas une destination

PureBasic Forum Officiel - Site PureBasic
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Re: impossible ? lignes colorées dans menu

Message par Backup »

exacte ! :)

il n'a qu'a signer ses méfaits apres tout :)
Avatar de l’utilisateur
Kwai chang caine
Messages : 6989
Inscription : sam. 23/sept./2006 18:32
Localisation : Isere

Re: impossible ? lignes colorées dans menu

Message par Kwai chang caine »

il n'a qu'a signer ses méfaits apres tout
:lol:
ImageLe bonheur est une route...
Pas une destination

PureBasic Forum Officiel - Site PureBasic
Répondre