FRANCISCO CARRASCO

Post Reply
pacofcc

FRANCISCO CARRASCO

Post 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
User avatar
Chantiel
Posts: 33
Joined: Mon Oct 10, 2005 12:49 pm
Location: En una piedra en medio del Atlantico (Tenerife)

Re: FRANCISCO CARRASCO

Post 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

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

@ 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!!
FW 2.5 + Cl 5.3 + Blk 7.0

Sin mas ...
Guest

Manuel

Post 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

//----------------------------------------------------------------------------//
Manuel

Configuracion de gets

Post 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
User avatar
Manuel Aranda
Posts: 561
Joined: Wed Oct 19, 2005 8:20 pm
Location: España

Post 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
FRANCISCO CARRASCO
Posts: 13
Joined: Sun Oct 16, 2005 3:19 pm

Para manuel

Post 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 ??
User avatar
Manuel Aranda
Posts: 561
Joined: Wed Oct 19, 2005 8:20 pm
Location: España

Post by Manuel Aranda »

No tiene interferencia alguna. Tiene preferencia el fichero que tu enlazas.
Un saludo.
Manuel
User avatar
Manuel Valdenebro
Posts: 706
Joined: Thu Oct 06, 2005 9:57 pm
Location: Málaga-España

Post 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 _ del Get quedarán con su color.

Un saludo

Manuel
User avatar
Manuel Aranda
Posts: 561
Joined: Wed Oct 19, 2005 8:20 pm
Location: España

Post 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

//----------------------------------------------------------------------------//
FRANCISCO CARRASCO
Posts: 13
Joined: Sun Oct 16, 2005 3:19 pm

Post 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
Post Reply