Cambio de color de fondo cuando un GET tiene el Foco

Post Reply
User avatar
lubin
Posts: 471
Joined: Fri Dec 09, 2005 12:41 am
Location: Lima, Peru
Contact:

Cambio de color de fondo cuando un GET tiene el Foco

Post 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

User avatar
Antonio Linares
Site Admin
Posts: 44515
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain
Contact:

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

Post by Antonio Linares »

Estimado Lubin,

Al comienzo de tu app:

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

regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
lubin
Posts: 471
Joined: Fri Dec 09, 2005 12:41 am
Location: Lima, Peru
Contact:

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

Post 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

User avatar
Antonio Linares
Site Admin
Posts: 44515
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain
Contact:

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

Post by Antonio Linares »

Para MultiGets:

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

regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
Antonio Linares
Site Admin
Posts: 44515
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain
Contact:

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

Post by Antonio Linares »

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
User avatar
Antonio Linares
Site Admin
Posts: 44515
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain
Contact:

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

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

Antonio Linares
www.fivetechsoft.com
User avatar
lubin
Posts: 471
Joined: Fri Dec 09, 2005 12:41 am
Location: Lima, Peru
Contact:

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

Post 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

Post Reply