Page 1 of 1

FRANCISCO CARRASCO

PostPosted: Sun Oct 16, 2005 11:35 am
by pacofcc
Hola: soy un veterano programador de Clipper 5.2 y tengo una aplicacion bastante compleja que funciona perfectamente pero que necesito pasarla a Windows. El trabajo lo tengo bastante encauzado pero he tropezado con unos probles en unso gets que no consigo solucionar. Los enumero:

- Por necesidades de uso tengo que habiliar teclas de funcion (F2-F10) para diversas opciones junto con los pushbotton habituales. Bien, cuando utilizo el raton la busqueda se realiza bien, pero si utilizo la tecla de funcion que apunta a la misma funcion de busqueda, la variable con la clave de busqueda se pasa vacia.

- Como hago para que el get que tenga el foco, sea de otro color ?

- Como hago para pasar de campo a campo de los get con la tecla ENTER. Se trata de una rutina de captura de datos numericos donde la velocidad y uso de ambas manos es muy necesaria.

Gracias por vuestra ayuda y saludos

Re: FRANCISCO CARRASCO

PostPosted: Mon Oct 17, 2005 9:13 am
by Chantiel
Buenas,

pacofcc wrote: - Por necesidades de uso tengo que habiliar teclas de funcion (F2-F10)


Te comento, tienes que capturar las teclas, y por lo que yo he leido y comprobado hasta ahora, las teclas F1 y F10 estan reservadas para el sistema.

Code: Select all  Expand view
oWin:bKeyDown := {|nKey| iif((nkey==VK_F2),Funcion(),nil)}


De esta forma capturas la tecla F2 dentro de la ventana oWin y la asocias a la funcion que necesites. Podrias cambiar oWin y poner cualquier objeto desde el que quieras captuar F2.

Mirate para mas referencias el archivo que encontraras en \include\vkey.ch, dentro del directorio donde has instalado el fivewin.

pacofcc wrote: - Como hago para que el get que tenga el foco, sea de otro color ?


Aqui no te puedo ayudar, pero he visto por los foros que tienes que meterte directamente a cambiar la clase TGet. Pero puede que existan otras alternativas ... espera que busco algo ...

Tienes estas variables:

nClrFocusText - Color for the get text when receiving focus
nClrFocusPane - Color for the get back when receiving focus

y estos metodos:

GotFocus - Action to be performed when receiving the focus
LostFocus - Action to be performed when losing the focus

asociados a la clase TGet. Podrias empezar a investigar por ahi.


pacofcc wrote: - Como hago para pasar de campo a campo de los get con la tecla ENTER.


Fijate en el ejemplo que te puse antes, y modificandolo un poco ...

Code: Select all  Expand view
@ 10,10 get oGet1 var vVariable of oWindow size 70,18 pixel
oGet1:bKeyDown := {|nKey| iif((nkey==VK_RETURN),oGet5:SetFocus(),nil)}


se quedaria asi.

Lo que hace es saltar desde oGet1 a oGet5 al apretar enter.




Nos leemos!!

Manuel

PostPosted: Mon Oct 17, 2005 6:03 pm
by Guest
Para que el GET cambie de color cuando tome el foco, tienes que modificar el método GotFocus() de la clase TGET añadiendo al final el texto en rojo.
Un saludo.
Manuel
//----------------------------------------------------------------------------//

METHOD GotFocus() CLASS TGet

if ! Empty( ::cPicture ) .and. ::oGet:type == "N"
::oGet:Picture := StrTran( ::cPicture, ",", "" )
endif

if ! ::lDrag
::oGet:KillFocus() // to properly initialize internal status
::oGet:SetFocus()
::DispText()
if ::oGet:type$"DN"
::nPos := 1
endif
::oGet:Pos = ::nPos
::SetPos( ::nPos )
CallWindowProc( ::nOldProc, ::hWnd, WM_SETFOCUS )
if Set( _SET_INSERT )
DestroyCaret()
CreateCaret( ::hWnd, 0, 6, ::nGetChrHeight() )
ShowCaret( ::hWnd )
endif
else
HideCaret( ::hWnd )
endif

Super:GotFocus()
::SetColor(CLR_BLACK,CLR_YELLOW)

return 0

//----------------------------------------------------------------------------//

Configuracion de gets

PostPosted: Tue Oct 18, 2005 7:49 pm
by Manuel
Gracias Manuel, pero mi gran probles es que aunque el Clipper lo domino bastan bien, las OOP no ya que hasta ahora no he tenido necesidad de ello. el caso es que no tengo ni idea de que tendria que hacer para modificar un metodo de una deteminada clase ni que herramientas necesito. Hay alguna documentacion donde aprender lo relativo a OOP asi como se utilizan los metodos, clases etc.

Gracias y saludos. Paco Carrasco

PostPosted: Wed Oct 19, 2005 8:36 pm
by Manuel Aranda
Sencillo. Solo tienes que coger el fichero TGET.PRG (está en la carpeta /SOURCE/CLASSES) modificarlo como ya te apunté en el mensaje anterior y compilarlo/enlazarlo con el restos de tus .prg,s.

Un saludo,
Manuel

Para manuel

PostPosted: Thu Oct 20, 2005 11:12 am
by FRANCISCO CARRASCO
Gracias Manuel. Me imagino que esto no interferira en que este mismo .prg este incluido como .obj en la libreria OBJETS o por lo menos es como yo pienso. me equivoco ??

PostPosted: Thu Oct 20, 2005 11:29 am
by Manuel Aranda
No tiene interferencia alguna. Tiene preferencia el fichero que tu enlazas.
Un saludo.
Manuel

PostPosted: Thu Oct 20, 2005 6:57 pm
by Manuel Valdenebro
Si modifica el color de GotFocus tambien debe modificar el color en LostFocus, sino, a medida que vaya corriendo el focus, todos los campos del Get quedarán con su color.

Un saludo

Manuel

PostPosted: Thu Oct 20, 2005 9:02 pm
by Manuel Aranda
Efectivamente, mis disculpas por el olvido:

//---------------------------------------------------------------------------//

METHOD LostFocus( hCtlFocus ) CLASS TGet

Super:LostFocus( hCtlFocus )

if ! Empty( ::cPicture ) .and. ::oGet:type == "N"
::oGet:Assign()
::oGet:Picture := ::cPicture
::oGet:UpdateBuffer()
endif

#ifdef __CLIPPER__
::oGet:SetFocus() // because Clipper set buffer to nil
#endif

if ! ::oGet:BadDate .and. ! ::lReadOnly .and. ;
( ::oGet:changed .or. ::oGet:unTransform() <> ::oGet:original )
::oGet:Assign() // for adjust numbers
::oGet:UpdateBuffer()
endif

::DispText()

if ! ::oGet:BadDate
::oGet:KillFocus()
else
::oGet:Pos = 1
::nPos = 1
#ifndef __CLIPPER__
::oGet:TypeOut = .f.
#endif
endif

::SetColor()
return nil

//----------------------------------------------------------------------------//

PostPosted: Thu Oct 20, 2005 11:03 pm
by FRANCISCO CARRASCO
Muchas gracias a los dos. Lo he probado y funciona bien. Ahora estoy intentando conseguir que en una pantalla de GETS se pase de campo a campo con la tecla RETURN . Lo que he hecho a veces funciona y a veces no y me imagino que lo ideal seria modificar o bien la clase TGET o bien la TCONTROL.. Bueno como trabajo con copias de ficheros si me cargo algo siempre podre volver atras.
Saludos