Page 1 sur 1

Est-il possible de changer la couleur d'une OpenWindow

Publié : lun. 16/déc./2019 8:44
par PhM
Mais uniquement le jeu de couleur de cette fenêtre OpenWindow pas les autres fenêtres de Windows présentes sur le bureau.
Le but est d'obtenir une fenêtre d'un style noir et gris, par exemple, comme Photoshop ou d'autres ?

Exemple : http://pe-images.s3.amazonaws.com/basic ... panels.gif

Re: Est-il possible de changer la couleur d'une OpenWindow

Publié : lun. 16/déc./2019 9:02
par microdevweb
bonjour,
Oui avec SetWindowColor(), par contre le fond du menu ne sera pas changer

Re: Est-il possible de changer la couleur d'une OpenWindow

Publié : lun. 16/déc./2019 9:11
par PhM
Ok, merci, mais c'était toute la fenêtre que je souhaitai "teindre"...

Re: Est-il possible de changer la couleur d'une OpenWindow

Publié : lun. 16/déc./2019 14:10
par Naheulf
Si tu souhaites modifier toute la fenêtre (y compris les bordures) il faut, à ma connaissance, créer une fenêtre sans bordure et tout dessiner à l'intérieur : les bordure (dont le titre et les boutons système), les menus et bien évidement le contenu.

Il existe certainement des méthodes plus simples mais, si c'est le cas, je ne les connais pas.

Re: Est-il possible de changer la couleur d'une OpenWindow

Publié : lun. 16/déc./2019 14:17
par PhM
Ha oui... c'est un peu galère, surtout que j'ai des onglets, menus et sous-menus, etc...

Re: Est-il possible de changer la couleur d'une OpenWindow

Publié : jeu. 19/déc./2019 9:16
par Zorro
sinon tu as la possibilité de "Skinner" une fenetre

voir ici : https://www.purebasic.fr/french/viewtop ... hilit=skin


sinon ne cherchant, tu trouvera des codes pour colorer les menus, les boutons, les fenetres ....bref c'est possible moyenant recherche
sur les forums ;) (API OBLIGATOIRE)

ici pour colorer les boutons :
https://www.purebasic.fr/french/viewtop ... uton+color


ici un menu coloré

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
		ntx = *nmd\rcItem\left + Icons
			nty = *nmd\rcItem\top
			 if nty=20
			 DFColor=rgb(255,255,255)
			 endif
			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
			
			hMenu = GetMenu_(WindowID(0))
			debug EventMenu()
			ntx = *nmd\rcItem\left + Icons
			nty = *nmd\rcItem\top
			 if nty=20
			 DFColor=rgb(255,255,255)
			 endif
			SetTextColor_(*nmd\hDC,DFColor)
			SetBkColor_(*nmd\hDC,DBColor) 
			ntx = *nmd\rcItem\left + Icons
			nty = *nmd\rcItem\top
			
			;debug ntx
			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: Est-il possible de changer la couleur d'une OpenWindow

Publié : jeu. 19/déc./2019 16:18
par PhM
Merci,
Je testerai cela quand j'aurai la version complète de PureBasic (ce qui ne devrait pas tarder). En attendant, je te crois sur parole...