FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index FiveWin para Harbour/xHarbour Cambio de color de fondo cuando un GET tiene el Foco
Posts: 469
Joined: Fri Dec 09, 2005 12:41 AM

Cambio de color de fondo cuando un GET tiene el Foco

Posted: Sun May 31, 2026 06:17 AM

Buenas

En mis aplicaciones con mi "Fivewin Marzo-2008" ... :( uso la clase TGet "MODIFICADA" por mi , que tenia estos efectos :

  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

Posts: 44229
Joined: Thu Oct 06, 2005 05:47 PM

Re: Cambio de color de fondo cuando un GET tiene el Foco

Posted: Sun May 31, 2026 08:13 AM

Estimado Lubin,

Al comienzo de tu app:

SetGetColorFocus( nRGB( 255, 255, 0 ) ) // 贸 el color que desees

regards, saludos

Antonio Linares
www.fivetechsoft.com
Posts: 469
Joined: Fri Dec 09, 2005 12:41 AM

Re: Cambio de color de fondo cuando un GET tiene el Foco

Posted: Thu Jun 04, 2026 04:10 AM

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

Posts: 44229
Joined: Thu Oct 06, 2005 05:47 PM

Re: Cambio de color de fondo cuando un GET tiene el Foco

Posted: Thu Jun 04, 2026 06:38 AM

Para MultiGets:

SetMGetColorFocus( nRGB( 255, 255, 0 ) ) // 贸 el color que desees

regards, saludos

Antonio Linares
www.fivetechsoft.com
Posts: 44229
Joined: Thu Oct 06, 2005 05:47 PM

Re: Cambio de color de fondo cuando un GET tiene el Foco

Posted: Thu Jun 04, 2026 06:57 AM

El cambio de color para los WHEN .F. se podria implementar desde el m茅todo AEvalWhen()

Hay que investigarlo :idea:

regards, saludos

Antonio Linares
www.fivetechsoft.com
Posts: 44229
Joined: Thu Oct 06, 2005 05:47 PM

Re: Cambio de color de fondo cuando un GET tiene el Foco

Posted: Thu Jun 04, 2026 07:15 AM

Puedes modificar el M茅todo AEvalWhen() en la Clase TWindow de esta forma:

    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:

                         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:

    #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
regards, saludos

Antonio Linares
www.fivetechsoft.com

Continue the discussion