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

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Avatar de l’utilisateur
PhM
Messages : 118
Inscription : dim. 08/déc./2019 10:50

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

Message 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
Avatar de l’utilisateur
microdevweb
Messages : 1802
Inscription : mer. 29/juin/2011 14:11
Localisation : Belgique

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

Message par microdevweb »

bonjour,
Oui avec SetWindowColor(), par contre le fond du menu ne sera pas changer
Windows 10 64 bits PB: 5.70 ; 5.72 LST
Work at Centre Spatial de Liège
Avatar de l’utilisateur
PhM
Messages : 118
Inscription : dim. 08/déc./2019 10:50

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

Message par PhM »

Ok, merci, mais c'était toute la fenêtre que je souhaitai "teindre"...
Avatar de l’utilisateur
Naheulf
Messages : 193
Inscription : dim. 10/mars/2013 22:22
Localisation : France

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

Message 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.
Dernière modification par Naheulf le lun. 16/déc./2019 19:35, modifié 1 fois.
Avatar de l’utilisateur
PhM
Messages : 118
Inscription : dim. 08/déc./2019 10:50

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

Message par PhM »

Ha oui... c'est un peu galère, surtout que j'ai des onglets, menus et sous-menus, etc...
Avatar de l’utilisateur
Zorro
Messages : 2186
Inscription : mar. 31/mai/2016 9:06

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

Message 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 

Avatar de l’utilisateur
PhM
Messages : 118
Inscription : dim. 08/déc./2019 10:50

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

Message 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...
Répondre