Page 1 of 2

Color de get

Posted: Wed Dec 03, 2008 10:32 am
by fergonm
Buenos días a los componentes del foro.

Tengo un cuadro de dialogo con varios gets de la siguiente forma


REDEFINE GET cRefe ID 10 COLOR "W/B" WHEN .F.


El problema es que el color no soy capaz de modificarlo, ya que siempre se queda en un gris claro. Me interesa que no se pueda modicar pero que sea legible.

¿Se puede modificar el color?.

Muchas gracias.

Posted: Wed Dec 03, 2008 11:04 am
by karinha
//-> Modifica estas Lyneas en TGET.PRG

#define ES_CENTER 1
#define ES_RIGHT 2
#define ES_LEFT 0
#Define TA_LEFT 0
#Define TA_RIGHT 2
#Define TA_CENTER 6

Code: Select all

METHOD Paint() CLASS TGet

   local aInfo := ::DispBegin()
   Local hOldFont

   //-> Mudan‡as Feitas em 22/12/2005 Por Antonio Linares
   //-> Para que o When(.F.) do GET, fique colorido normal. Muito bom. Joao.

   if ::oBrush != nil
      FillRect( ::hDC, GetClientRect( ::hWnd ), ::oBrush:hBrush )
   else
      CallWindowProc( ::nOldProc, ::hWnd, WM_ERASEBKGND, ::hDC, 0 )
   endif

   if IsWindowEnabled( ::hWnd )

      CallWindowProc( ::nOldProc, ::hWnd, WM_PAINT, ::hDC, 0 )

      //-> Para BTNGET.PRG Quando o RIGHT Esta ligado no WorkShop.exe
      //-> Modificado em 20/02/2008 - Por Joao Santos

      SetTextColor( ::hDC, ::nClrText ) 
      SetBkColor( ::hDC, ::nClrPane ) 
      hOldFont = SelectObject( ::hDC, ::oFont:hFont )

      do case 

         case lAnd( GetWindowLong( ::hWnd, GWL_STYLE ), ES_RIGHT )

              SetTextAlign( ::hDC, TA_RIGHT )

              ExtTextOut( ::hDC, 0, ::nWidth()  - 44,                        ;
              { 0, 0, ::nHeight(), ::nWidth() }, GetWindowText( ::hWnd ) )

      endcase

   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 )

              //-> Posicao do Get
              ExtTextOut( ::hDC, 0, 4,                                        ;
              { 0, 0, ::nHeight(), ::nWidth() }, GetWindowText( ::hWnd ) )
      endcase 

      SelectObject( ::hDC, hOldFont )

   endif

   if ValType( ::bPainted ) == "B"
      Eval( ::bPainted, ::hDC, ::cPS, Self )
   endif

   ::DispEnd( aInfo )

return 1
Saludos.

Posted: Wed Dec 03, 2008 11:27 am
by jrestojeda
Hola amigo.

Puedes usar los colores que quieras con la función RGB(,,)
Los parámetros de RGB() van de 0 a 255 de esa forma con los tres parámetros tienes los colores que quieras.

Code: Select all

Local Color1,Color2,Color3...

Color1:=RGB(0,0,0)
Color2:=RGB(255,255,255)
Color3:=RGB(128,128,128)

REDEFINE GET cRefe ID 10 COLOR Color1,Color2 WHEN .F. 

Color1 es el color de la letra del GET y Color2 el color del fondo, Color3 solo está definido para que veas que se pueden definir tantos colores como quieras y obviamente usarlos.

Espero te sirva.
Saludos desde Argentina, Esteban.

Posted: Wed Dec 03, 2008 4:50 pm
by fergonm
jrestojeda wrote:Hola amigo.

Puedes usar los colores que quieras con la función RGB(,,)
Los parámetros de RGB() van de 0 a 255 de esa forma con los tres parámetros tienes los colores que quieras.

Code: Select all

Local Color1,Color2,Color3...

Color1:=RGB(0,0,0)
Color2:=RGB(255,255,255)
Color3:=RGB(128,128,128)

REDEFINE GET cRefe ID 10 COLOR Color1,Color2 WHEN .F. 

Color1 es el color de la letra del GET y Color2 el color del fondo, Color3 solo está definido para que veas que se pueden definir tantos colores como quieras y obviamente usarlos.

Espero te sirva.
Saludos desde Argentina, Esteban.
Esteban, he probado pero no funciona. Muchas gracias.

Posted: Wed Dec 03, 2008 4:52 pm
by fergonm
Karinha.

Voy a modificar la clasa Tget.

Gracias y un saludo. Fernando

Posted: Wed Dec 03, 2008 5:35 pm
by Daniel Garcia-Gil
la clase tiene una data que se llama
lDisColors por default esta activada, cuando la desactivas, los colores del disable se pintan igual que el enable...
yo hice _ a la clase...
le agrege 2 datas nuevas
DATA nClrTextDis, nClrPaneDis
que van a determinar los colores del text y pane cuando esta disable el get, pero tiene que estar desactivada la data lDisColors para que funcione...
en el metodo New y redefine agrege:

::nClrTextDis = nClrFore
::nClrPaneDis = nClrBack

en el metodo paint modifique estas lineas

Code: Select all

if ::lDisColors
         SetTextColor( ::hDC, GetSysColor( COLOR_GRAYTEXT ) )
         SetBkColor( ::hDC, GetSysColor( COLOR_WINDOW ) )
else
         SetTextColor( ::hDC, ::nClrText )
         SetBkColor( ::hDC, ::nClrPane )
endif
por estas...

Code: Select all

      if ::lDisColors
         SetTextColor( ::hDC, GetSysColor( COLOR_GRAYTEXT ) )
         SetBkColor( ::hDC, GetSysColor( COLOR_WINDOW ) )
      else
      
      	if ValType( ::nClrTextDis ) == "B"
      		SetTextColor( ::hDC, Eval( ::nClrTextDis ) )
      	elseif ValType( ::nClrTextDis ) == "N"
      		if ::nClrTextDis <> 0 
      			SetTextColor( ::hDC, ::nClrTextDis  )
	        else
  	       SetTextColor( ::hDC, ::nClrText )
  	      endif
        endif
      	if ValType( ::nClrPaneDis ) == "B"
      		SetBkColor( ::hDC, Eval( ::nClrPaneDis ) )
      	elseif ValType( ::nClrPaneDis ) == "N"
      		if ::nClrPaneDis <> 0 
      			SetBkColor( ::hDC, ::nClrPaneDis  )
	        else
  	       SetBkColor( ::hDC, ::nClrPane )
        	endif
      	endif
      endif
ahora puedes hacer uso de esa variables cuando el get esta disable, puedes usar la data tanto como valores numericos ( codigo de colores ) como codeblock
ejemplo
oGet:lDisColors := .f.
oGet:nClrTextDis := CLR_WHITE
oGet:nClrPaneDis := {|| if( empty( aVar[ 2 ] ), CLR_BLUE, CLR_BLACK ) }

recuerda tener desactivado lDisColors

Re: Color de get

Posted: Thu Dec 04, 2008 1:03 am
by lubin
Hola Fernando
yo tengo la clase tget modificada
si deseas te la mando al correo que me indiques

He definido un color para cuando tiene el focus (util cuando hay varios gets,, y el usuario se la pasa buscando la rayita del Get activo porque tod tiene fondo blanco.. ) , otro color para cuando tenemos los gets deshabilidatos (que normalmente se ven plomizos ... claros )


Lubin

Posted: Thu Dec 04, 2008 1:07 am
by Antonio Linares
Fernando,

De una forma simple:

REDEFINE GET oGet VAR cRefe ID 10 COLOR "W/B" WHEN .F.

oGet:lDisColors = .F.

Posted: Thu Dec 04, 2008 3:12 am
by Willi Quintana
Holas...
Y cual seria el "lDisColor" para CHECKBOX con la clausula WHEN .f.

Salu2

Posted: Thu Dec 04, 2008 8:31 am
by fergonm
Antonio Linares wrote:Fernando,

De una forma simple:

REDEFINE GET oGet VAR cRefe ID 10 COLOR "W/B" WHEN .F.

oGet:lDisColors = .F.
Gracias maestro, funcionó perfectamente.

Un saludo. Fernando.

Posted: Thu Dec 04, 2008 10:20 am
by Antonio Linares
Willy,

> Y cual seria el "lDisColor" para CHECKBOX con la clausula WHEN .f.

Pues si no me equivoco, no está implementado para los checkboxes.

Tendria que implementarse de forma similar a como se hace en los GETs

Posted: Thu Dec 04, 2008 2:59 pm
by Daniel Garcia-Gil
mcfox wrote:la clase tiene una data que se llama
lDisColors por default esta activada, cuando la desactivas, los colores del disable se pintan igual que el enable...
pense que eso seria un problema...
con _ que hice, pense en pintar diferente los colores del get cuando estan disable y no que tengan el mismo aspecto que los get que estan enable...
usando solo lDisColors:=.f. todos los get tendran el mismo color, como saber a simple vista cual esta enable y disable??

Posted: Thu Dec 04, 2008 6:10 pm
by fergonm
mcfox wrote:
mcfox wrote:la clase tiene una data que se llama
lDisColors por default esta activada, cuando la desactivas, los colores del disable se pintan igual que el enable...
pense que eso seria un problema...
con _ que hice, pense en pintar diferente los colores del get cuando estan disable y no que tengan el mismo aspecto que los get que estan enable...
usando solo lDisColors:=.f. todos los get tendran el mismo color, como saber a simple vista cual esta enable y disable??
Puedes poner un COLOR diferente para los que se pueden o no se pueden editar. Así lo tengo ahora

Un saludo. Fernando

Posted: Thu Dec 04, 2008 6:43 pm
by Daniel Garcia-Gil
como haces para tener un color diferente en los get que estan disable sin modificar la clase?
me iteresaria mucho saber para volver a poner mi antigua tget y usar el codigo original en mis sistemas

Posted: Thu Dec 04, 2008 7:59 pm
by fergonm
mcfox wrote:como haces para tener un color diferente en los get que estan disable sin modificar la clase?
me iteresaria mucho saber para volver a poner mi antigua tget y usar el codigo original en mis sistemas
Tras la sugerencia de Antonio, he cambiado el código de la siguiente forma:

REDEFINE GET oGet VAR cRamo ID 17 COLOR Color1,Color2 OF oDlg WHEN .F.
oGet:lDisColors = .F.
REDEFINE GET oGet VAR nnHonorarios ID 14 OF oDlg PICTURE "@E 99,999.99" UPDATE
REDEFINE GET oGet VAR nHonorarios ID 21 COLOR Color1,Color2 OF oDlg PICTURE "@E 99,999.99" UPDATE WHEN .F.
oGet:lDisColors = .F.
REDEFINE GET oGet VAR nKms ID 15 OF oDlg PICTURE "@E 999" UPDATE
REDEFINE GET oGet VAR pKms ID 22 COLOR Color1,Color2 OF oDlg PICTURE "@E 99,999.99" UPDATE WHEN .F.
oGet:lDisColors = .F.
REDEFINE GET oGet VAR nFotos ID 18 OF oDlg PICTURE "@E 999" UPDATE
REDEFINE GET oGet VAR pFotos ID 23 COLOR Color1,Color2 OF oDlg PICTURE "@E 99,999.99" UPDATE WHEN .F.
oGet:lDisColors = .F.
REDEFINE GET oGet VAR nApertura ID 19 OF oDlg PICTURE "@E 999" UPDATE
REDEFINE GET oGet VAR nApertura ID 24 COLOR Color1,Color2 OF oDlg PICTURE "@E 99,999.99" UPDATE WHEN .F.
oGet:lDisColors = .F.


Funciona estupendamente y se diferencia por el fondo del GET.

Un saludo. Fernando.