FRANCISCO CARRASCO
FRANCISCO CARRASCO
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
- 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
- Chantiel
- Posts: 33
- Joined: Mon Oct 10, 2005 12:49 pm
- Location: En una piedra en medio del Atlantico (Tenerife)
Re: FRANCISCO CARRASCO
Buenas,
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.
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.
se quedaria asi.
Lo que hace es saltar desde oGet1 a oGet5 al apretar enter.
Nos leemos!!
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.pacofcc wrote: - Por necesidades de uso tengo que habiliar teclas de funcion (F2-F10)
Code: Select all
oWin:bKeyDown := {|nKey| iif((nkey==VK_F2),Funcion(),nil)}
Mirate para mas referencias el archivo que encontraras en \include\vkey.ch, dentro del directorio donde has instalado el fivewin.
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 ...pacofcc wrote: - Como hago para que el get que tenga el foco, sea de otro color ?
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.
Fijate en el ejemplo que te puse antes, y modificandolo un poco ...pacofcc wrote: - Como hago para pasar de campo a campo de los get con la tecla ENTER.
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)}
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 ...
Sin mas ...
Manuel
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
//----------------------------------------------------------------------------//
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
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
Gracias y saludos. Paco Carrasco
- Manuel Aranda
- Posts: 561
- Joined: Wed Oct 19, 2005 8:20 pm
- Location: España
-
- Posts: 13
- Joined: Sun Oct 16, 2005 3:19 pm
Para manuel
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 ??
- Manuel Aranda
- Posts: 561
- Joined: Wed Oct 19, 2005 8:20 pm
- Location: España
- Manuel Valdenebro
- Posts: 706
- Joined: Thu Oct 06, 2005 9:57 pm
- Location: Málaga-España
- Manuel Aranda
- Posts: 561
- Joined: Wed Oct 19, 2005 8:20 pm
- Location: España
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
//----------------------------------------------------------------------------//
//---------------------------------------------------------------------------//
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
//----------------------------------------------------------------------------//
-
- Posts: 13
- Joined: Sun Oct 16, 2005 3:19 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
Saludos