Page 1 of 1

como poner color al GET que esta en foco?

Posted: Thu Mar 02, 2006 2:00 pm
by lafug
Amigos :

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


DE ANTEMANO
MUCHAS GRACIAS
SALUDOS Y xHabrazos :lol:

Posted: Thu Mar 02, 2006 3:28 pm
by Vladimir Zorrilla
Local nAt := AScan( oForm:aControls, { | oCtrl | oCtrl:lFocused } )

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


Saludos

Posted: Thu Mar 02, 2006 3:30 pm
by Vladimir Zorrilla
Correccion

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

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


Saludos

Posted: Thu Mar 02, 2006 4:29 pm
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.

Posted: Thu Mar 02, 2006 7:50 pm
by lafug
GRACIAS AMIGOS POR SUS RESPUESTAS

FUNCIONÓ PERFECTO

SALUDOS
XHABRAZOS :lol:

Posted: Thu Mar 02, 2006 9:12 pm
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

Posted: Thu Mar 02, 2006 9:42 pm
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

Posted: Fri Mar 03, 2006 3:36 pm
by lafug
gracias por sus respuestas amigos, voy a probar vuestras rutinas

SALUDOS
xHabrazos