Page 1 of 1

SetGetColorFocus

Posted: Wed Jul 16, 2014 10:02 am
by fergonm
Buenos días.
Intento cambiar el color de los GET,s al posicionar sobe ellos mediante la función SetGetColorFocus() colocada en el programa principal. Me da el siguiente error de compilación:
Error: Unresolved external '_HB_FUN_SETGETCOLORFOCUS' referenced from
Necesito ayuda.

Re: SetGetColorFocus

Posted: Wed Jul 16, 2014 12:42 pm
by karinha
c:\fwh1306\samples\gunther3.prg

saludos.

Re: SetGetColorFocus

Posted: Wed Jul 16, 2014 3:20 pm
by FranciscoA
Hola Fernando.
Que version usas?
Esta function esta disponible desde Octubre 2007 segun WhatNews.
En mi version 1204 esto trabaja bien, desde Function Main(): SetGetColorFocus( RGB(252,232,191) ) //color fondo de gets cuando tienen el foco

Tambien puedes intentar, en cada ventana, con:

Code: Select all

  AEval( oWndChild:aControls,{|o| if(o:ClassName()=="TGET",;
         ( o:bGotFocus  := {|o|o:SetColor( RGB(0,0,0), RGB(252,232,191) )} ,;
           o:bLostFocus := {|o|o:SetColor( CLR_BLACK, CLR_WHITE )} ),) } )
 
Saludos.

Re: SetGetColorFocus

Posted: Wed Jul 16, 2014 3:46 pm
by fergonm
Muchas gracias a los dos por contestar.
Tengo la versión 7.07 de julio de 2007. En la ayuda suministrada aparece la función, por lo que he supuesto que está disponible.
Francisco he intentado lo que me dices y me da el siguiente error

Code: Select all

Application
===========
   Path and name: D:\Personal\peritoprueba\perito.Exe (32 bits)
   Size:   672,256 bytes
   Time from start: 0 hours 0 mins 5 secs 
   Error occurred at: 16-07-2014, 17:38:09
   Error description: Error BASE/2017  Error de argumento: AEVAL
   Args:
     [   1] = U   
     [   2] = B   {|| ... }

Stack Calls
===========
   Called from:  => AEVAL(0)
   Called from: D:\Personal\peritoprueba\PRG\perito32.prg => MAIN(199)
 
lo sigo intentando

Re: SetGetColorFocus

Posted: Wed Jul 16, 2014 4:50 pm
by FranciscoA
Fernando:
Creo que no expliqué bien. Su uso es en cada dialog o ventana, segun el codigo de ejemplo siguiente:

Code: Select all

Function Recibo()
local  oDlg, nRcaja,dFecha

   DBSELECTAREA("RCAJAG")

DEFINE DIALOG oDlg RESOURCE "GRABAR"  TITLE "Prueba"

REDEFINE GET oRcaja   VAR nRcaja   ID 101 OF oDlg PICTURE "@!" 

REDEFINE GET oFecha     VAR dFecha     ID 102 OF oDlg 

   REDEFINE BUTTONBMP ID 309 OF oDlg BITMAP "ACEPTAR" TEXTRIGHT  ACTIO MsgInfo("Hola")
   REDEFINE BUTTONBMP ID 310 OF oDlg BITMAP "CANCELAR" TEXTRIGHT   ACTION ( oDlg:End() )
 
  AEval( oDlg:aControls,{|o| if(o:ClassName()=="TGET",;
         ( o:bGotFocus  := {|o|o:SetColor( RGB(0,0,0), RGB(252,232,191) )} ,;
           o:bLostFocus := {|o|o:SetColor( CLR_BLACK, CLR_WHITE )} ),) } )

   ACTIVATE DIALOG oDlg CENTERED 
 RETURN( NIL )
 
Saludos.

Re: SetGetColorFocus

Posted: Wed Jul 16, 2014 6:13 pm
by acuellar
Amigos

Se puede hacer lo mismo para BTNBMP que cambie de color el texto cuando el mouse está sobre el botón

He hecho esto:

Code: Select all

   REDEFINE BTNBMP oBtn 101 OF oDlg RESOURCE "Boton1",Nil,Nil,"Boton2" PROMPT "Aceptar" ACTION MiFuncion()
   REDEFINE BTNBMP oBtn 102 OF oDlg RESOURCE "Boton1",Nil,Nil,"Boton2" PROMPT "Cancelar" ACTION oDlg:End()
    oBtn:bMMoved:= {|| oBtn:SetColor( CLR_BLUE ) } 

 
Se pone en azúl, pero no se como volverlo a negro cuando pasa al otro.

Gracias por la ayuda

Saludos,

Adhemar

Re: SetGetColorFocus

Posted: Thu Jul 17, 2014 7:39 am
by Antonio Linares
Adhemar,

para conseguir esa funcionalidad tienes que usar:

#define WM_MOUSELEAVE 675
#define TME_LEAVE 2

Desde el Método MouseMove( nRow, nCol, nFlags ) tienes que llamar a:

TrackMouseEvent( ::hWnd, TME_LEAVE )

Desde el método HandleEvent( nMsg, nWParam, nLParam )

if nMsg == WM_MOUSELEAVE
return ::MouseLeave( nHiWord( nLParam ), nLoWord( nLParam ), nWParam )
endif

Y en MouseLeave() se restaura el color que desees.

Busca por WM_MOUSELEAVE en las Classes de FWH y verás como lo usamos :-)

Re: SetGetColorFocus

Posted: Thu Jul 17, 2014 5:01 pm
by acuellar
Gracias Antonio

He modificado el método:

Code: Select all

METHOD MouseLeave( nRow, nCol, nFlags ) CLASS TBtnBmp

   ::lMOver = .F.
   ::Refresh()
   ::SetColor( CLR_BLACK )  //Agregada
return nil
 
Al compilar me da este error

Code: Select all

Error description: Error BASE/1003  No existe la variable: SUPER

Stack Calls
===========
   Called from: D:\Sistemas\RRHH\DATA\PRG\btnbmp.prg => TBTNBMP:SETCOLOR( 0 )
   Called from: D:\Sistemas\RRHH\DATA\PRG\btnbmp.prg => TBTNBMP:NEWBAR( 0 )
   Called from: D:\Sistemas\RRHH\DATA\PRG\RRHH.PRG => MAIN( 0 )

 
Gracias por la ayuda

Saludos,

Adhemar

Re: SetGetColorFocus

Posted: Thu Jul 17, 2014 5:25 pm
by hmpaquito
En el fuente cambia todos los

Code: Select all

Super
por

Code: Select all

 ::Super

Re: SetGetColorFocus

Posted: Thu Jul 17, 2014 5:47 pm
by acuellar
Gracias amigos

Funcionó perfecto.

Saludos,

Adhemar

Re: SetGetColorFocus

Posted: Fri Jul 18, 2014 10:50 am
by fergonm
Buenos días.

Muchas gracias a todos. Pruebo y ya les contaré.
Un saludo

Re: SetGetColorFocus

Posted: Fri Jul 18, 2014 11:03 am
by fergonm
Fernando:
Creo que no expliqué bien. Su uso es en cada dialog o ventana, segun el codigo de ejemplo siguiente:
Francisco.

Te entendí mal, disculpas. Funciona correctamente.
Un saludo. Fernando

Re: SetGetColorFocus

Posted: Sat Jul 19, 2014 2:39 am
by joseluisysturiz
fergonm wrote:Buenos días.
Intento cambiar el color de los GET,s al posicionar sobe ellos mediante la función SetGetColorFocus() colocada en el programa principal. Me da el siguiente error de compilación:
Error: Unresolved external '_HB_FUN_SETGETCOLORFOCUS' referenced from
Necesito ayuda.
Probastes usando al princio de los prg esto.? saludos... :shock:

TGet():lDisColors := .f.