Page 1 of 1

Cambiar color al Get Deshabilitado

Posted: Mon Dec 19, 2005 4:25 pm
by lubin
Buenos dias:
Una consulta rapida, como sabemos, cuando un get esta deshabilitado por ejemplo con la clausula WHEN... se muestra de color plomo, hay forma de cambiar el color por ejemplo a marron.. pero en todo en forma global ?? quizas sera cambiando la clase Gets,,?? lo estuve buscando pero no lo ubique...

Gracias por sus respuestas.

Lubin

Pdta.. aprovechando el momento para desear a todos una feliz navidad y un venturoso año 2006 en union de todos sus seres queridos... desde aqui Lima Peru ... a todo el Planeta ...

Posted: Thu Dec 22, 2005 7:29 am
by Antonio Linares
Lubin,

Hay que modificar la clase TGet así:

Code: Select all

METHOD Paint() CLASS TGet

   ...

   if IsWindowEnabled( ::hWnd )
      CallWindowProc( ::nOldProc, ::hWnd, WM_PAINT, ::hDC, 0 )
   else
      SetTextColor( ::hDC, ::nClrText )
      SetBkColor( ::hDC, ::nClrPane )
      hOldFont = SelectObject( ::hDC, ::oFont:hFont )
      ExtTextOut( ::hDC, 0, 0,;
                  { 0, 0, ::nHeight(), ::nWidth() }, GetWindowText( ::hWnd ) )
      SelectObject( ::hDC, hOldFont )            
   endif                

   ...
De todas formas estamos mejorando ese código para que respecte la alineación es delos estilos ES_CENTER y ES_RIGHT.

Consulta adicional del color del Get Inhabilitado

Posted: Thu Dec 22, 2005 2:11 pm
by lubin
Gracias por tu respuesta Antonio, solo para aclarar, el concepto

Este metodo que me envias lo debo de agregar a la clase get ??, y de esta manera podre cambiar el Color cuando el GET esta deshabilitado?? cual seria la manera de hacerlo para cambiarlo para un color determinado???


Gracias por tu atencion a mi consulta
Lubin



Antonio Linares wrote:Lubin,

Hay que modificar la clase TGet así:

Code: Select all

METHOD Paint() CLASS TGet

   ...

   if IsWindowEnabled( ::hWnd )
      CallWindowProc( ::nOldProc, ::hWnd, WM_PAINT, ::hDC, 0 )
   else
      SetTextColor( ::hDC, ::nClrText )
      SetBkColor( ::hDC, ::nClrPane )
      hOldFont = SelectObject( ::hDC, ::oFont:hFont )
      ExtTextOut( ::hDC, 0, 0,;
                  { 0, 0, ::nHeight(), ::nWidth() }, GetWindowText( ::hWnd ) )
      SelectObject( ::hDC, hOldFont )            
   endif                

   ...
De todas formas estamos mejorando ese código para que respecte la alineación es delos estilos ES_CENTER y ES_RIGHT.

Re: Consulta adicional del color del Get Inhabilitado

Posted: Tue Dec 27, 2005 4:53 am
by lubin
Mi estimado Antonio,
te agradeceria aclarar esta ultima consulta si no es molestia , respecto al color de Get Deshabilitado, desearia que tengas en cuenta que el cambio de color desearia hacerlo con un solo ajuste de parametros para todo el sistema.

Mil Gracias

Lubin

lubin wrote:Gracias por tu respuesta Antonio, solo para aclarar, el concepto

Este metodo que me envias lo debo de agregar a la clase get ??, y de esta manera podre cambiar el Color cuando el GET esta deshabilitado?? cual seria la manera de hacerlo para cambiarlo para un color determinado???


Gracias por tu atencion a mi consulta
Lubin



Antonio Linares wrote:Lubin,

Hay que modificar la clase TGet así:

Code: Select all

METHOD Paint() CLASS TGet

   ...

   if IsWindowEnabled( ::hWnd )
      CallWindowProc( ::nOldProc, ::hWnd, WM_PAINT, ::hDC, 0 )
   else
      SetTextColor( ::hDC, ::nClrText )
      SetBkColor( ::hDC, ::nClrPane )
      hOldFont = SelectObject( ::hDC, ::oFont:hFont )
      ExtTextOut( ::hDC, 0, 0,;
                  { 0, 0, ::nHeight(), ::nWidth() }, GetWindowText( ::hWnd ) )
      SelectObject( ::hDC, hOldFont )            
   endif                

   ...
De todas formas estamos mejorando ese código para que respecte la alineación es delos estilos ES_CENTER y ES_RIGHT.

Posted: Tue Dec 27, 2005 8:39 am
by Antonio Linares
El código final ha quedado así:

Code: Select all

   if IsWindowEnabled( ::hWnd )
      CallWindowProc( ::nOldProc, ::hWnd, WM_PAINT, ::hDC, 0 )
   else
      SetTextColor( ::hDC, ::nClrText )
      SetBkColor( ::hDC, ::nClrPane )
      hOldFont = SelectObject( ::hDC, ::oFont:hFont )
      
      do case 
         case lAnd( GetWindowLong( ::hWnd, GWL_STYLE ), ES_CENTER ) 
              SetTextAlign( ::hDC, TA_CENTER ) 
              ExtTextOut( ::hDC, 0, ::nWidth() / 2,;
                { 0, 0, ::nHeight(), ::nWidth() }, GetWindowText( ::hWnd ) )
              
         case lAnd( GetWindowLong( ::hWnd, GWL_STYLE ), ES_RIGHT ) 
              SetTextAlign( ::hDC, TA_RIGHT ) 
              ExtTextOut( ::hDC, 0, ::nWidth() - 4,;
                { 0, 0, ::nHeight(), ::nWidth() }, GetWindowText( ::hWnd ) )
             
         otherwise 
              SetTextAlign( ::hDC, TA_LEFT ) 
              ExtTextOut( ::hDC, 0, 0,;
                { 0, 0, ::nHeight(), ::nWidth() }, GetWindowText( ::hWnd ) )
      endcase 

      SelectObject( ::hDC, hOldFont )            
   endif                
El color lo estableces con la cláusula COLOR ..., ... para cada GET, ó en ese código cambias ::nClrText y ::nClrPane por los colores que quieras y todos los GETs deshabilitados se verán del mismo color.

Posted: Fri Jan 06, 2006 5:03 pm
by lubin
Buenos Dias Antonio, antes que nada un feliz Año 2006, que todos los planes se cumplan

Desearia retomar el tema, pues te comentare que intenten cambiar o agregar esto en mi clase tget y resulta que no tengo ningun metodo Paint() en mi version.

Mis consultas :
1. Que debo hacer ?? (intente agregarla y me salio error al compilarla
2. Como debo agregarla y en que -Prg ??
l3. uego ,,, como cambiaria el color de ::nClrText y ::nClrPane para que los gets deshabilitados queden con letras rojas y fondo blanco, me muestras un ejemplo por favor ??

uso : Clipper 5.2
Fivewin 2.3
blinker 4.0


Muchas gracias

lubin


Antonio Linares wrote:El código final ha quedado así:

Code: Select all

   if IsWindowEnabled( ::hWnd )
      CallWindowProc( ::nOldProc, ::hWnd, WM_PAINT, ::hDC, 0 )
   else
      SetTextColor( ::hDC, ::nClrText )
      SetBkColor( ::hDC, ::nClrPane )
      hOldFont = SelectObject( ::hDC, ::oFont:hFont )
      
      do case 
         case lAnd( GetWindowLong( ::hWnd, GWL_STYLE ), ES_CENTER ) 
              SetTextAlign( ::hDC, TA_CENTER ) 
              ExtTextOut( ::hDC, 0, ::nWidth() / 2,;
                { 0, 0, ::nHeight(), ::nWidth() }, GetWindowText( ::hWnd ) )
              
         case lAnd( GetWindowLong( ::hWnd, GWL_STYLE ), ES_RIGHT ) 
              SetTextAlign( ::hDC, TA_RIGHT ) 
              ExtTextOut( ::hDC, 0, ::nWidth() - 4,;
                { 0, 0, ::nHeight(), ::nWidth() }, GetWindowText( ::hWnd ) )
             
         otherwise 
              SetTextAlign( ::hDC, TA_LEFT ) 
              ExtTextOut( ::hDC, 0, 0,;
                { 0, 0, ::nHeight(), ::nWidth() }, GetWindowText( ::hWnd ) )
      endcase 

      SelectObject( ::hDC, hOldFont )            
   endif                
El color lo estableces con la cláusula COLOR ..., ... para cada GET, ó en ese código cambias ::nClrText y ::nClrPane por los colores que quieras y todos los GETs deshabilitados se verán del mismo color.

Posted: Fri Jan 06, 2006 7:10 pm
by manuramos
Por si te sirve de algo, yo he empleado otra solución. (con fw2.3)

Lo que hago es que no utilizo :Enable() ó :Disable(), tan sólo el :lReadOnly. Es decir, la condición de validación no la pongo en el WHEN directamente. UN EJEMPLO

REDEFINE GET oGet VAR oSay ...... WHEN MiFuncVal(oGet,...)

FUNCTION MiFuncVal(oGet,...)
...
IF <CondicionValidez>
oGet[1]:SetColor(ColorTxt_Valido,ColorBack_Valido)
oGet[1]:lReadOnly := .T. <---- Similar a Enable()
oGet[1]:DispText()
ELSE
oGet[1]:SetColor(ColorTxt_NOValido,ColorBack_NOValido)
oGet[1]:lReadOnly := .F. <----- Similar a Disable()
oGet[1]:DispText()
ENDIF
...
IF ...
...
ENDIF
...
RETURN .T. <--- Si debes evaluar condiciones adicionales devuelve .T. o .F. según te convenga

A mi me ha ido muy bien

Posted: Mon Jan 09, 2006 2:52 am
by lubin
Gracias por el Comentario,

Es otro metodo efectivamente e interesante por cierto, Pero mi objetivo es cambiar de color a todos los Gets DESHABILITADOS de mi Sistema en forma Global, sin tener que hacerlo por cada Get , espero entiendan mi consulta.


Lubin

manuramos wrote:Por si te sirve de algo, yo he empleado otra solución. (con fw2.3)

Lo que hago es que no utilizo :Enable() ó :Disable(), tan sólo el :lReadOnly. Es decir, la condición de validación no la pongo en el WHEN directamente. UN EJEMPLO

REDEFINE GET oGet VAR oSay ...... WHEN MiFuncVal(oGet,...)

FUNCTION MiFuncVal(oGet,...)
...
IF <CondicionValidez>
oGet[1]:SetColor(ColorTxt_Valido,ColorBack_Valido)
oGet[1]:lReadOnly := .T. <---- Similar a Enable()
oGet[1]:DispText()
ELSE
oGet[1]:SetColor(ColorTxt_NOValido,ColorBack_NOValido)
oGet[1]:lReadOnly := .F. <----- Similar a Disable()
oGet[1]:DispText()
ENDIF
...
IF ...
...
ENDIF
...
RETURN .T. <--- Si debes evaluar condiciones adicionales devuelve .T. o .F. según te convenga

A mi me ha ido muy bien

Posted: Mon Jan 09, 2006 9:15 am
by Antonio Linares
Lubin,

Finalmente hemos implementado una nueva DATA lDisColors que por defecto es .t. para que se vea estandard por defecto.

Cambiando esa DATA a .f. entonces se usa el color que le hayas dado al GET con la claúsula COLOR.

De todas formas, puedes modificar la clase TGet para que use de forma automática el color que quieras, sin tener que programar nada.