Cambiar color al Get Deshabilitado

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

Cambiar color al Get Deshabilitado

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

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

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

Consulta adicional del color del Get Inhabilitado

Post 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.
User avatar
lubin
Posts: 404
Joined: Fri Dec 09, 2005 12:41 am
Location: Lima, Peru
Contact:

Re: Consulta adicional del color del Get Inhabilitado

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

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

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

Post 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.
manuramos
Posts: 219
Joined: Mon Dec 26, 2005 7:25 pm
Location: Jerez de la Frontera (Spain)

Post 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
Nos Gusta Programar
User avatar
lubin
Posts: 404
Joined: Fri Dec 09, 2005 12:41 am
Location: Lima, Peru
Contact:

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

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

Antonio Linares
www.fivetechsoft.com
Post Reply