FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index FiveWin para CA-Clipper FRANCISCO CARRASCO
Posts: 155
Joined: Tue Dec 30, 2008 03:07 AM
FRANCISCO CARRASCO
Posted: 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

Posts: 33
Joined: Mon Oct 10, 2005 12:49 PM
Re: FRANCISCO CARRASCO
Posted: Mon Oct 17, 2005 09: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.

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 ...

@ 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 ...
Posts: 155
Joined: Tue Dec 30, 2008 03:07 AM
Manuel
Posted: Mon Oct 17, 2005 06: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. ::type == "N"
::Picture := StrTran( ::cPicture, ",", "" )
endif

if ! ::lDrag
::KillFocus() // to properly initialize internal status
::SetFocus()
::DispText()
if ::type$"DN"
::nPos := 1
endif
::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

//----------------------------------------------------------------------------//
Posts: 155
Joined: Tue Dec 30, 2008 03:07 AM
Configuracion de gets
Posted: Tue Oct 18, 2005 07: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

Posts: 610
Joined: Wed Oct 19, 2005 08:20 PM
FRANCISCO CARRASCO
Posted: Wed Oct 19, 2005 08: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

Un saludo,

Manuel



xH 1.2.3, FWH 23.07 32 bits, BC++ 7.4, xVerce CW 1.0, PellesC
Posts: 13
Joined: Sun Oct 16, 2005 03:19 PM
Para manuel
Posted: 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 ??

Posts: 610
Joined: Wed Oct 19, 2005 08:20 PM
FRANCISCO CARRASCO
Posted: Thu Oct 20, 2005 11:29 AM

No tiene interferencia alguna. Tiene preferencia el fichero que tu enlazas.
Un saludo.
Manuel

Un saludo,

Manuel



xH 1.2.3, FWH 23.07 32 bits, BC++ 7.4, xVerce CW 1.0, PellesC
Posts: 711
Joined: Thu Oct 06, 2005 09:57 PM
FRANCISCO CARRASCO
Posted: Thu Oct 20, 2005 06: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

Un saludo



Manuel
Posts: 610
Joined: Wed Oct 19, 2005 08:20 PM
FRANCISCO CARRASCO
Posted: Thu Oct 20, 2005 09:02 PM
Efectivamente, mis disculpas por el olvido:

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

METHOD LostFocus( hCtlFocus ) CLASS TGet

Super:LostFocus( hCtlFocus )

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

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

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

::DispText()

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

::SetColor()
return nil

//----------------------------------------------------------------------------//
Un saludo,

Manuel



xH 1.2.3, FWH 23.07 32 bits, BC++ 7.4, xVerce CW 1.0, PellesC
Posts: 13
Joined: Sun Oct 16, 2005 03:19 PM
FRANCISCO CARRASCO
Posted: 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

Continue the discussion