Buen dÃa, compañeros
Quisiera saber como cambiar el color de una ventana
solo donde esta el caption, ahora me aparece solo en
blanco, quisiera poder cambiar a colores que yo
pueda poner.
Saludos.
Buen dÃa, compañeros
Quisiera saber como cambiar el color de una ventana
solo donde esta el caption, ahora me aparece solo en
blanco, quisiera poder cambiar a colores que yo
pueda poner.
Saludos.
// COLOR DEGRADADO EN WINDOWS
#include "Fivewin.ch"
static oWnd
/* Degradado en una ambiente MDI. Ventana Padre.
Fijate como en un Ambiente MDI,la padre ,debemos pasarle a la
funcion del degradado , oWnd:oWndClient.
*/
Function Main()
Local nColor := 73647364737
DEFINE WINDOW oWnd MDI TITLE "Pasate por <!-- m --><a class="postlink" href="http://www.getex.net/gentefive">http://www.getex.net/gentefive</a><!-- m -->";
MENU BuildMenu( )
ACTIVATE WINDOW oWnd ;
ON PAINT FillWnd( oWnd:oWndClient, nColor )
Return Nil
Static Func BuildMenu( )
Local oMenu
MENU oMenu
MENUITEM "Muestras de Degradado"
MENU
MENUITEM "Sobre una MDI" ACTION ( WndMdi( ) )
MENUITEM "Sobre un Dialogo Dialog" ACTION ( Dial( ) )
MENUITEM "Sobre una MDI con Folder" ACTION ( Folders( ) )
ENDMENU
ENDMENU
return oMenu
/* Degradado en una Ventana hija MDI
Usamos el evento ON PAINT para este menester.
No me dirás que no tiene nada de complicado y que
más simple imposible
Si pulsas el boton izquiedo del mouse puedes cambiar
el color en tiempo de ejecucion
*/
Function WndMdi( )
Local oWndChild
Static nColor := 342342342
DEFINE WINDOW oWndChild MDICHILD TITLE " Queda majo,la cosa ? " OF oWnd ;
COLOR CLR_HRED, CLR_HBLUE
ACTIVATE WINDOW oWndChild ;
ON PAINT FillWnd( oWndChild , nColor ,,2 ) ;
ON LEFT CLICK ( nColor := ChooseColor() ,;
FillWnd( oWndChild , nColor,,2 ) )
return nil
/* Degradado en un Dialog normal y corriente */
Function Dial()
Local oDlg
Static nColor := 160002999
DEFINE DIALOG oDlg TITLE "The GenteFive" OF oWnd
ACTIVATE DIALOG oDlg CENTER ;
ON PAINT FillWnd( oDlg , nColor ,,1 ) ;
ON LEFT CLICK ( nColor := ChooseColor() ,;
FillWnd( oDlg , nColor,,1 ) )
return nil
/* Degradados en un Folder.
Atentos. Aqui debemos de hacer dos trampas ;)
Primero el Folder debe de coger el color que vayamos a degradar y
segundo , debemos de modificar el evento ON PAINT de todos los
dialogos que componen el Folder
*/
Function Folders()
Local oWndChild,oFld
Local nColor := 4545454543
DEFINE WINDOW oWndChild MDICHILD TITLE "Folders en MDI " OF oWnd
/*1 Truco. Ya que el pintado del Folder es una funcion en C
y ha mi no me gusta tocar nada, le pasamos el color escogido para
que la cabecera pase disimulada y veamos que 'casi' forma parte
del degradado ;) Mira , una ilusion optica
*/
@ 1, 1 FOLDER oFld ITEMS "&TheFull", "&Joaquim", "The Best of Fivewin" ;
OF oWndChild COLOR 0,nColor
/*2 Truco.
Como sabras , los folders no son mas que dialogos creados en tiempo de
ejecucion. Hay que modificar el evento ON PAINT por cada dialogo.
*/
oFld:aDialogs[1]:bPainted := { || FillWnd (oFld:aDialogs[1],nColor ) }
oFld:aDialogs[2]:bPainted := { || FillWnd (oFld:aDialogs[2],nColor ) }
/* a Este le pasamos otro color XD */
oFld:aDialogs[3]:bPainted := { || FillWnd (oFld:aDialogs[3],(nColor+3312312), , 1.5 ) }
ACTIVATE WINDOW oWndChild ;
ON RESIZE FoldResize( oWndChild, oFld ) ;
ON PAINT FillWnd( oWndChild , nColor )
return nil
function FoldResize( oWnd, oFld )
local oRect := oWnd:GetCliRect()
oFld:Move( 0, 0, oRect:nRight - oRect:nLeft ,;
oRect:nBottom - oRect:nTop , .t. )
return nil
/* Funcion de degradado de control cualquiera.
Basada en el Install.prg de Fivewin, pero con
descomposicion de los colores primarios y
centrado de un Bitmap.
Mejoras:
Ahora, en equipos menos potentes el pintado de un
degradado la velocidad de apertura y el evento PAINT
se nos muere y vemos hasta como pinta Windows,
Por lo tanto el color puro significa que no
hara caso al evento ON PAINT.
oWnd := Ventana, Dialog o Control.
nColor := Color para hacer el Degradado
oBmp := Objeto Bitmap o Image para centrar en Wnd o Dlg
nSaltos := Oscuridad. Cuanto más pequño , mas oscuro.
Si quieres ver cuando se produce un eveto ON PAINT
pasale un 0.1 y SORPRESA!!!!
*/
Function FillWnd( oWnd ,nColor, oBmp , nSaltos )
local hWnd := oWnd:hWnd
local aRect := GetClientRect( hWnd )
local oBrush, n
local nTop := aRect[ 1 ]
local nBottom := aRect[ 3 ]
local nSteps
Local nBlue,nRed,nGreen
Local lPuro := .F. // LoadIniPure() // Si es puro no hay degradado
// Color de degradado
DEFAULT nColor := 123123122 // LoadIni("MADRE","DegraDialog")
IF !Empty( oBmp )
IF UPPER(oWnd:ClassName()) == 'TDIALOG' // Si es un Dialogo
oWnd:GetDC()
PalBmpDraw( oWnd:hDC, 0, 0, oBmp:hBmpPal )
oWnd:ReleaseDC()
ENDIF
WndCenter( oBmp:hWnd, oWnd:hWnd )
ENDIF
if lPuro == .T.
oWnd:SetColor( 0, nColor )
oWnd:Refresh()
else
lPuro := .F.
endif
if !lPuro // El color no es puro, entonces degradado
nBlue := nRGBBlue( nColor )
nRed := nRGBRed( nColor )
nGreen := nRGBGreen( nColor)
DEFAULT nSaltos := 3
nSteps := ( aRect[ 3 ] - aRect[ 1 ] ) / nSaltos
oWnd:GetDC()
aRect[ 3 ] = 0
for n = 1 to nSteps
aRect[ 3 ] += nSaltos
DEFINE BRUSH oBrush COLOR RGB(nRed,nGreen,nBlue)
FillRect( oWnd:hDC, aRect, oBrush:hBrush )
RELEASE BRUSH oBrush
aRect[ 1 ] += nSaltos
nBlue -= 1
nRed -= 1
nGreen -= 1
if nBlue < 0 ; nBlue += 1 ; endif
if nRed < 0 ; nRed += 1 ; endif
if nGreen < 0 ; nGreen += 1 ; endif
next
oWnd:ReleaseDC()
//oWnd:Refresh()
endif
return nil