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 :

Image

  1. 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...

  2. 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 :idea:


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