FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index FiveWin para Harbour/xHarbour Color de get
Posts: 133
Joined: Fri Nov 30, 2007 11:34 AM
Color de get
Posted: Wed Dec 03, 2008 10:32 AM
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.
Saludos. Fernando
Posts: 8515
Joined: Tue Dec 20, 2005 07:36 PM
Color de get
Posted: Wed Dec 03, 2008 11:04 AM
//-> 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

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.
João Santos - São Paulo - Brasil - Phone: +55(11)95150-7341
Posts: 601
Joined: Wed Jul 04, 2007 03:51 PM
Color de get
Posted: Wed Dec 03, 2008 11:27 AM
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.

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.
Ojeda Esteban Eduardo.

Buenos Aires - Argentina.

FWH - PellesC - DBF/CDX - ADS - Gloriosos .Bat - MySql - C# .net - FastReport

Skype: jreduojeda
Posts: 133
Joined: Fri Nov 30, 2007 11:34 AM
Color de get
Posted: Wed Dec 03, 2008 04:50 PM
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.

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.
Saludos. Fernando
Posts: 133
Joined: Fri Nov 30, 2007 11:34 AM
Color de get
Posted: Wed Dec 03, 2008 04:52 PM

Karinha.

Voy a modificar la clasa Tget.

Gracias y un saludo. Fernando

Saludos. Fernando
Posts: 2365
Joined: Wed Nov 02, 2005 11:46 PM
Color de get
Posted: Wed Dec 03, 2008 05:35 PM
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 unos cambios 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
if ::lDisColors
         SetTextColor( ::hDC, GetSysColor( COLOR_GRAYTEXT ) )
         SetBkColor( ::hDC, GetSysColor( COLOR_WINDOW ) )
else
         SetTextColor( ::hDC, ::nClrText )
         SetBkColor( ::hDC, ::nClrPane )
endif


por estas...

      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
Posts: 467
Joined: Fri Dec 09, 2005 12:41 AM
Re: Color de get
Posted: Thu Dec 04, 2008 01:03 AM

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

Posts: 44158
Joined: Thu Oct 06, 2005 05:47 PM
Color de get
Posted: Thu Dec 04, 2008 01:07 AM

Fernando,

De una forma simple:

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

oGet:lDisColors = .F.

regards, saludos

Antonio Linares
www.fivetechsoft.com
Posts: 1054
Joined: Sun Oct 09, 2005 10:41 PM
Color de get
Posted: Thu Dec 04, 2008 03:12 AM

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

Salu2

Posts: 133
Joined: Fri Nov 30, 2007 11:34 AM
Color de get
Posted: Thu Dec 04, 2008 08:31 AM
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.
Saludos. Fernando
Posts: 44158
Joined: Thu Oct 06, 2005 05:47 PM
Color de get
Posted: Thu Dec 04, 2008 10:20 AM

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

regards, saludos

Antonio Linares
www.fivetechsoft.com
Posts: 2365
Joined: Wed Nov 02, 2005 11:46 PM
Color de get
Posted: Thu Dec 04, 2008 02:59 PM
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 los cambios 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??
Posts: 133
Joined: Fri Nov 30, 2007 11:34 AM
Color de get
Posted: Thu Dec 04, 2008 06:10 PM
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 los cambios 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
Saludos. Fernando
Posts: 2365
Joined: Wed Nov 02, 2005 11:46 PM
Color de get
Posted: Thu Dec 04, 2008 06:43 PM

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

Posts: 133
Joined: Fri Nov 30, 2007 11:34 AM
Color de get
Posted: Thu Dec 04, 2008 07:59 PM
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.
Saludos. Fernando