como poner color al GET que esta en foco?

Post Reply
User avatar
lafug
Posts: 185
Joined: Thu Nov 17, 2005 12:48 am
Location: Santiago, Chile

como poner color al GET que esta en foco?

Post by lafug »

Amigos :

Como puedo colorear el GET que esta en foco? con FWH2.7 /xHarbour


DE ANTEMANO
MUCHAS GRACIAS
SALUDOS Y xHabrazos :lol:
Luis Alfonso Fuentes Guerrero
FWH 11.06 xHarbour 1.2.1 BCC55 WorkShop
Vladimir Zorrilla
Posts: 225
Joined: Tue Feb 28, 2006 4:25 pm
Location: PERU

Post by Vladimir Zorrilla »

Local nAt := AScan( oForm:aControls, { | oCtrl | oCtrl:lFocused } )

oForm:aControls[N]:SetColor( 0,255 )


Saludos
ME INTERESA FW Y XHB POR SER OPEN SOURCE
Vladimir Zorrilla
Posts: 225
Joined: Tue Feb 28, 2006 4:25 pm
Location: PERU

Post by Vladimir Zorrilla »

Correccion

Local nAt := AScan( oForm:aControls, { | oCtrl | oCtrl:lFocused } )

oForm:aControls[nAt]:SetColor( 0,255 )


Saludos
ME INTERESA FW Y XHB POR SER OPEN SOURCE
R.F.
Posts: 840
Joined: Thu Oct 13, 2005 7:05 pm

Post by R.F. »

lo que hacemos la mayoria es toquetear un poco la data bGotFocus y bLostFocus de la clase TGET

Basicamente abres el TGET.PRG, localizas los metodos constructores NEW y REDEFINE y les agregas estas 2 lineas al final del metodo:

::bGotFocus := {|| ::SetColor(<colortexto>,<colorfondo>)}
::bLostFocus := {|| ::SetColor(0,RGB(255,255,255))}

Luego agregas el TGET.PRG modificado a tu lista de PRGs y todo listo.
Saludos
R.F.
User avatar
lafug
Posts: 185
Joined: Thu Nov 17, 2005 12:48 am
Location: Santiago, Chile

Post by lafug »

GRACIAS AMIGOS POR SUS RESPUESTAS

FUNCIONÓ PERFECTO

SALUDOS
XHABRAZOS :lol:
Luis Alfonso Fuentes Guerrero
FWH 11.06 xHarbour 1.2.1 BCC55 WorkShop
manuramos
Posts: 219
Joined: Mon Dec 26, 2005 7:25 pm
Location: Jerez de la Frontera (Spain)

Post by manuramos »

El problema Luis es que ocupas bGotFocus y bLostFocus y ya no los puedes utizar para otra cosa. Si quieres, yo lo he solucionado de la siguiente forma:

Primero hay que definir cuatro Datas

DATA nClrFore,nClrBack
DATA nClrGFore,nClrGBack // Tu los puedes llamar como quieras

Después modificas ligeramente algunos métodos:

METHOD Initiate( hDlg ) CLASS ...
*
Super:Initiate( hDlg )
*
::nClrFore := ::nClrText
::nClrBack := ::nClrPane
...
RETURN NIL

METHOD GotFocus( hCtlLost ) CLASS ...
...
IF ::nClrGFore # NIL
::SetColor(::nClrGFore,::nClrGBack)
ENDIF
...


METHOD LostFocus( hCtlFocus ) CLASS ...
...
IF ::nClrGFore # NIL
::SetColor(::nClrFore,::nClrBack)
ENDIF
...

Y nada más. La ventaja está en que conservas los colores originales y que puedes definir los del foco desde tu programa

REDEFINE oGet .......
oGet:nClrFore := <colortexto>
oGet:nClrBack := <colorfondo>

Y además, sigues teniendo bGotFocus y bLostFocus libres para lo que necesites.

Un saludo
Nos Gusta Programar
User avatar
carlos vargas
Posts: 1421
Joined: Tue Oct 11, 2005 5:01 pm
Location: Nicaragua

Post by carlos vargas »

En mi caso

Agrego esto al include de mi aplicacion. Ej( miapp.ch )

Code: Select all


#define CLR_PIEL1         RGB(216,185,165)
#define CLR_PIEL2         RGB(192,192,192)
#define CLR_MENTA1      RGB(175,255,215)
#define CLR_MENTA2      RGB(221,255,238)
#define CLR_DISABLE     RGB(255,255,217)
#define CLR_AMARILLO1 RGB(255,251,225)
#define CLR_BLUE1         RGB(231,220,228)
#define CLR_CAFE          RGB(128,064,000)

#xcommand REDEFINE GET [ <oGet> VAR ] <uVar> ;
             [ ID <nId> ] ;
             [ <dlg: OF, WINDOW, DIALOG> <oDlg> ] ;
             [ <help:HELPID, HELP ID> <nHelpId> ] ;
             [ VALID   <ValidFunc> ]       ;
             [ PICTURE <cPict> ] ;
             [ <color:COLOR,COLORS> <nClrFore> [,<nClrBack>] ] ;
             [ FONT <oFont> ] ;
             [ CURSOR <oCursor> ] ;
             [ MESSAGE <cMsg> ] ;
             [ <update: UPDATE> ] ;
             [ WHEN <uWhen> ] ;
             [ ON CHANGE <uChange> ] ;
             [ <readonly: READONLY, NO MODIFY> ] ;
             [ <spin: SPINNER> [ON UP <SpnUp>] [ON DOWN <SpnDn>] [MIN <Min>] [MAX <Max>] ] ;
       => ;
          [ <oGet> := ] KTGet():ReDefine( <nId>, bSETGET(<uVar>), <oDlg>,;
             <nHelpId>, <cPict>, <{ValidFunc}>, <nClrFore>, <nClrBack>,;
             <oFont>, <oCursor>, <cMsg>, <.update.>, <{uWhen}>,;
             [ \{|nKey,nFlags,Self| <uChange> \}], <.readonly.>,;
             <.spin.>, <{SpnUp}>, <{SpnDn}>, <{Min}>, <{Max}>)


Agrego este codigo a un prg. ej:( myget.prg)

Code: Select all

#include "fivewin.ch"
#include "miapp.ch"

CREATE CLASS KTGet FROM TGet

   DATA nClrForeFocus INIT CLR_BLACK
   DATA nClrBackFocus INIT CLR_PIEL1
   DATA nOldClrFore
   DATA nOldClrBack

   METHOD GotFocus()
   METHOD LostFocus( hCtlFocus)
   METHOD Paint()

ENDCLASS

METHOD GotFocus() CLASS KTGet
   IF ::nClrForeFocus != NIL .and. ::nClrBackFocus != NIL
      ::nOldClrFore := ::nClrText
      ::nOldClrBack := ::nClrPane
      ::SetColor( ::nClrForeFocus, ::nClrBackFocus )
   ENDIF
RETURN Super:GotFocus()

METHOD LostFocus( hCtlFocus ) CLASS KTGet
   ::bWhen := iif( ::bWhen == NIL, {|| TRUE }, ::bWhen )
   IF ::nClrForeFocus != NIL .and. ::nClrBackFocus != NIL
      ::SetColor( ::nOldClrFore, ::nOldClrBack )
   ENDIF
   IF ::lReadOnly == TRUE .or. !eval( ::bWhen )
      ::SetColor( CLR_BLACK, CLR_AMARILLO1 )
   ENDIF
RETURN Super:LostFocus( hCtlFocus )

METHOD Paint() CLASS KTGet
   ::bWhen := iif( ::bWhen == NIL, {|| TRUE }, ::bWhen )
   IF ( ::lReadOnly == TRUE .or. !eval( ::bWhen ) ) .and. ::lFocused == FALSE
      ::SetColor( CLR_BLACK, CLR_AMARILLO1 )
   ELSEIF ::lReadOnly == FALSE .and. ::lFocused == TRUE
      ::SetColor( CLR_BLACK, CLR_MENTA2 )
   ELSE
      ::SetColor( CLR_BLACK, CLR_WHITE )
   ENDIF

RETURN Super:Paint()

de esta forma no modificamos los prg de la clase tget

salu2
carlos vargas
Salu2
Carlos Vargas
Desde Managua, Nicaragua (CA)
User avatar
lafug
Posts: 185
Joined: Thu Nov 17, 2005 12:48 am
Location: Santiago, Chile

Post by lafug »

gracias por sus respuestas amigos, voy a probar vuestras rutinas

SALUDOS
xHabrazos
Luis Alfonso Fuentes Guerrero
FWH 11.06 xHarbour 1.2.1 BCC55 WorkShop
Post Reply