Page 1 of 1
Cambio de color de fondo cuando un GET tiene el Foco
Posted: Sun May 31, 2026 6:17 am
by lubin
Buenas
En mis aplicaciones con mi "Fivewin Marzo-2008" ...
uso la clase TGet "MODIFICADA" por mi , que tenia estos efectos :

Para que cuando un GET tenia el Focus, se cambiaba el Fondo del Campo de color "Amarillo" con letras negras y cuando perdia el foco, el fondo pasaba a se blanco como siempre,, esto ayuda mucho al usuario para saber donde estaba el cursor cuando tenia muchos GETS...
Lo mismo hacia cuando un GET estaba como "Solo Lectura" que se veia de color Gris... Yo cambie el color del Campo del get lo ponia de letras color Rojo oscuro y fondo plomo .
Este efecto lo hacia en forma global para toda la aplicacion,
Ahora estoy actualizando del FiveWin a la versión.. Set-2024 y mi TGET no me funciona (Logico por viejito !!! ) ,,
AQUI MI CONSULTA : existe en la clase TGET o en el Fivewin algún parámetro global que permita ese tipo de efecto . sin tener que estar cambiando el efecto en cada Get que se realice
Gracias
Lubin
Re: Cambio de color de fondo cuando un GET tiene el Foco
Posted: Sun May 31, 2026 8:13 am
by Antonio Linares
Estimado Lubin,
Al comienzo de tu app:
SetGetColorFocus( nRGB( 255, 255, 0 ) ) // ó el color que desees
Re: Cambio de color de fondo cuando un GET tiene el Foco
Posted: Thu Jun 04, 2026 4:10 am
by lubin
Estimado Antonio
Perfecto para el caso de los GETS ha funcionado correctamente,
Solo me faltaría el mismo efecto del color pero el foco del GET es un campo memo con la clase TMultiGet
Y también cambiar el color cuando ponemos en GET con un WHEN .F. , es decir solo lectura no es editable
Muchas gracias por tu pronta respuesta
Saludos
Lubin
Re: Cambio de color de fondo cuando un GET tiene el Foco
Posted: Thu Jun 04, 2026 6:38 am
by Antonio Linares
Para MultiGets:
SetMGetColorFocus( nRGB( 255, 255, 0 ) ) // ó el color que desees
Re: Cambio de color de fondo cuando un GET tiene el Foco
Posted: Thu Jun 04, 2026 6:57 am
by Antonio Linares
El cambio de color para los WHEN .F. se podria implementar desde el método AEvalWhen()
Hay que investigarlo 
Re: Cambio de color de fondo cuando un GET tiene el Foco
Posted: Thu Jun 04, 2026 7:15 am
by Antonio Linares
Puedes modificar el Método AEvalWhen() en la Clase TWindow de esta forma:
Code: Select all | Expand
METHOD AEvalWhen() CLASS TWindow
local oControl, aControls := ::aControls
if aControls != nil .and. ! Empty( aControls )
for each oControl in aControls
if oControl != nil .and. __objHasMsg( oControl, "bWhen" ) .and. oControl:bWhen != nil
if Eval( oControl:bWhen )
oControl:Enable()
else
oControl:Disable()
// Modificación para cambiar el color de los GETs deshabilitados por WHEN .F.
if oControl:ClassName() == "TGET"
if oControl:lDisColors
oControl:lDisColors := .F.
oControl:nClrTextDis := nRGB( 128, 128, 128 ) // Color de texto (ej. gris oscuro)
oControl:nClrPaneDis := nRGB( 245, 245, 245 ) // Color de fondo (ej. gris muy claro)
endif
endif
endif
endif
if oControl != nil
if oControl:ClassName $ "TFOLDER,TFOLDEREX,TPAGES"
if ! Empty( oControl:aDialogs ) .and. oControl:nOption > 0 .and. ;
oControl:nOption <= Len( oControl:aDialogs ) .and. ;
oControl:aDialogs[ oControl:nOption ] != nil
oControl:aDialogs[ oControl:nOption ]:AEvalWhen()
endif
elseif !Empty( oControl:aControls )
oControl:AEvalWhen()
endif
endif
next oControl
endif
return nil
El color que desees lo estableces en estas dos lineas en ese código:
Code: Select all | Expand
oControl:nClrTextDis := nRGB( 128, 128, 128 ) // Color de texto (ej. gris oscuro)
oControl:nClrPaneDis := nRGB( 245, 245, 245 ) // Color de fondo (ej. gris muy claro)
Si prefieres no modificar la Clase TWindow, puedes hacerlo asi desde tu app:
Code: Select all | Expand
#include "FiveWin.ch"
#ifndef __XHARBOUR__
#include "hbclass.ch"
#endif
function Main()
// Anular dinámicamente el método original de TWindow
#ifndef __XHARBOUR__
OVERRIDE METHOD AEvalWhen CLASS TWindow WITH MyAEvalWhen
#else
EXTEND CLASS TWindow WITH METHOD AEvalWhen AS MyAEvalWhen
#endif
// ... el resto de tu código Main ...
return nil
// Nueva función que reemplaza el comportamiento del método original
function MyAEvalWhen()
local Self := hb_QSelf()
local oControl, aControls := ::aControls
if aControls != nil .and. ! Empty( aControls )
for each oControl in aControls
if oControl != nil .and. __objHasMsg( oControl, "bWhen" ) .and. oControl:bWhen != nil
if Eval( oControl:bWhen )
oControl:Enable()
else
oControl:Disable()
if oControl:ClassName() == "TGET"
if oControl:lDisColors
oControl:lDisColors := .F.
oControl:nClrTextDis := CLR_HRED // Ejemplo: Texto en Rojo Intenso
oControl:nClrPaneDis := CLR_YELLOW // Ejemplo: Fondo Amarillo
endif
endif
endif
endif
if oControl != nil
if oControl:ClassName $ "TFOLDER,TFOLDEREX,TPAGES"
if ! Empty( oControl:aDialogs ) .and. oControl:nOption > 0 .and. ;
oControl:nOption <= Len( oControl:aDialogs ) .and. ;
oControl:aDialogs[ oControl:nOption ] != nil
oControl:aDialogs[ oControl:nOption ]:AEvalWhen()
endif
elseif !Empty( oControl:aControls )
oControl:AEvalWhen()
endif
endif
next oControl
endif
return nil
Re: Cambio de color de fondo cuando un GET tiene el Foco
Posted: Sat Jun 06, 2026 4:09 am
by lubin
Hola Antonio
Le hechare mano a esto,, perfecto
Recuerdo que para cambiar el color a los Gets con When .f. , lo hice modicando el MGET,, pero de mi FWIN antiguo
Voy a probar tu propuesta
Muchas gracias ,, por la guia
Lubin