Cambiar el Color (CAPTION) de una Ventana

Cambiar el Color (CAPTION) de una Ventana

Postby VitalJavier » Tue Sep 27, 2016 5:11 pm

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.
User avatar
VitalJavier
 
Posts: 239
Joined: Mon Jun 10, 2013 6:40 pm

Re: Cambiar el Color (CAPTION) de una Ventana

Postby karinha » Tue Sep 27, 2016 6:25 pm

Mira, se és esto:

Code: Select all  Expand view

// 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 http://www.getex.net/gentefive";
             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
 


João Santos - São Paulo - Brasil - Phone: +55(11)95150-7341
User avatar
karinha
 
Posts: 7613
Joined: Tue Dec 20, 2005 7:36 pm
Location: São Paulo - Brasil


Return to FiveWin para Harbour/xHarbour

Who is online

Users browsing this forum: No registered users and 13 guests