FRANCISCO CARRASCO

FRANCISCO CARRASCO

Postby pacofcc » Sun Oct 16, 2005 11:35 am

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
pacofcc
 

Re: FRANCISCO CARRASCO

Postby Chantiel » Mon Oct 17, 2005 9:13 am

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

Manuel

Postby Guest » Mon Oct 17, 2005 6:03 pm

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

//----------------------------------------------------------------------------//
Guest
 

Configuracion de gets

Postby Manuel » Tue Oct 18, 2005 7:49 pm

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
Manuel
 

Postby Manuel Aranda » Wed Oct 19, 2005 8:36 pm

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

Para manuel

Postby FRANCISCO CARRASCO » Thu Oct 20, 2005 11:12 am

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

Postby Manuel Aranda » Thu Oct 20, 2005 11:29 am

No tiene interferencia alguna. Tiene preferencia el fichero que tu enlazas.
Un saludo.
Manuel
User avatar
Manuel Aranda
 
Posts: 604
Joined: Wed Oct 19, 2005 8:20 pm
Location: España

Postby Manuel Valdenebro » Thu Oct 20, 2005 6:57 pm

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
User avatar
Manuel Valdenebro
 
Posts: 706
Joined: Thu Oct 06, 2005 9:57 pm
Location: Málaga-España

Postby Manuel Aranda » Thu Oct 20, 2005 9:02 pm

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

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

Postby FRANCISCO CARRASCO » Thu Oct 20, 2005 11:03 pm

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


Return to FiveWin para CA-Clipper

Who is online

Users browsing this forum: No registered users and 15 guests