Discussion:
Problema con lastkey()
(demasiado antiguo para responder)
Mariano Donaldson
2006-02-08 00:18:10 UTC
Permalink
Hola a todos...

Tengo un form que contiene un combo en el que elijo un ítem existente para
modificar/dar de baja, o tipeo el número de un ítem nuevo para darlo de
alta; al presionar ENTER o TAB se habilita un pageframe donde están los
demás controles....

en el interactivechange del cbo tengo TODO dentro de un

if lastkey()=13 or lastkey()=9

pero se me ejecuta igual con solo desplegar el combo con el mouse y elegir
un ítem con el mouse!!!

... probé con CLEAR TYPEAHEAD en el gotfocus del cbo.... me fijé de tipear
una letra cualquiera en la ventana de comandos antes de correr el formulario
para asegurarme de que no quedara ningún enter pendiente, pero nada...

probé poniendo un messagebox(lastkey()) en el gotfocus del cbo y me aparece
"13"....

no entiendo nada!!
¿Qué puede estar pasando?

Gracias a quien pueda y quiera darme una mano con esto
Mariano Donaldson
***@fibertel.com.ar
Buenos Aires, Argentina
Juan Ramon Hueso
2006-02-08 11:06:14 UTC
Permalink
Prueba con el keypress y ahí controlas el valor del nkeycode.
--
-----------------------
Saludos.
Juan Ramón.
Cartagena-España
Post by Mariano Donaldson
Hola a todos...
Tengo un form que contiene un combo en el que elijo un ítem existente para
modificar/dar de baja, o tipeo el número de un ítem nuevo para darlo de
alta; al presionar ENTER o TAB se habilita un pageframe donde están los
demás controles....
en el interactivechange del cbo tengo TODO dentro de un
if lastkey()=13 or lastkey()=9
pero se me ejecuta igual con solo desplegar el combo con el mouse y elegir
un ítem con el mouse!!!
... probé con CLEAR TYPEAHEAD en el gotfocus del cbo.... me fijé de tipear
una letra cualquiera en la ventana de comandos antes de correr el formulario
para asegurarme de que no quedara ningún enter pendiente, pero nada...
probé poniendo un messagebox(lastkey()) en el gotfocus del cbo y me aparece
"13"....
no entiendo nada!!
¿Qué puede estar pasando?
Gracias a quien pueda y quiera darme una mano con esto
Mariano Donaldson
Buenos Aires, Argentina
Mariano Donaldson
2006-02-08 13:53:06 UTC
Permalink
Gracias Juan

pero me da exactamente lo mismo: 13. No entiendo!!

Mariano Donaldson
***@fibertel.com.ar
Buenos Aires, Argentina
Post by Juan Ramon Hueso
Prueba con el keypress y ahí controlas el valor del nkeycode.
--
-----------------------
Saludos.
Juan Ramón.
Cartagena-España
Post by Mariano Donaldson
Hola a todos...
Tengo un form que contiene un combo en el que elijo un ítem existente para
modificar/dar de baja, o tipeo el número de un ítem nuevo para darlo de
alta; al presionar ENTER o TAB se habilita un pageframe donde están los
demás controles....
en el interactivechange del cbo tengo TODO dentro de un
if lastkey()=13 or lastkey()=9
pero se me ejecuta igual con solo desplegar el combo con el mouse y elegir
un ítem con el mouse!!!
... probé con CLEAR TYPEAHEAD en el gotfocus del cbo.... me fijé de tipear
una letra cualquiera en la ventana de comandos antes de correr el formulario
para asegurarme de que no quedara ningún enter pendiente, pero nada...
probé poniendo un messagebox(lastkey()) en el gotfocus del cbo y me aparece
"13"....
no entiendo nada!!
¿Qué puede estar pasando?
Gracias a quien pueda y quiera darme una mano con esto
Mariano Donaldson
Buenos Aires, Argentina
Jose A. Blasco
2006-02-09 09:39:12 UTC
Permalink
No se si necesitas que el foco quede en el combo. Si no es asi, prueba
a poner tu codigo

if lastkey()=13 or lastkey()=9
...
...

en el metodo "Lostfocus" del combo, y en el interactivechange haces un
KEYBOARD '{TAB}'

Espero que te sirva.

Un saludo.
Mariano Donaldson
2006-02-09 12:13:56 UTC
Permalink
José

Lo que estoy tratando de entender es por qué se me ejecuta todo el código
que tengo en el InteractiveChange del combo si está dentro de un

if lastkey()=13 or lastkey()=9

y yo no presioné ni ENTER ni TAB

Mariano Donaldson
***@fibertel.com.ar
Buenos Aires, Argentina
Post by Jose A. Blasco
No se si necesitas que el foco quede en el combo. Si no es asi, prueba
a poner tu codigo
if lastkey()=13 or lastkey()=9
...
...
en el metodo "Lostfocus" del combo, y en el interactivechange haces un
KEYBOARD '{TAB}'
Espero que te sirva.
Un saludo.
Jose A. Blasco
2006-02-09 12:31:45 UTC
Permalink
Cuando seleccionas algun elemento en el combo, ¿ te pierde el foco ?
Mariano Donaldson
2006-02-09 16:56:24 UTC
Permalink
José,

estuve investigando un poco, y lo que pasa en concreto es lo
siguiente......este es el origen del problema..

si yo pongo en el Load del form "messagebox(lastkey())" APENAS carga el
form, me tira "13"......no sé de dónde lo sacó..... inclusive probé tipeando
una "j" en la ventana de comandos antes de correr el form y me sigue tirando
"13".... de ahí se desencadena todo lo demás.

Esto me empezó a pasar después de que formateé y reinstalé mi
máquina......no entiendo!!

Mariano Donaldson
***@fibertel.com.ar
Buenos Aires, Argentina



"Jose A. Blasco" <***@gmail.com> escribi� en el mensaje news:***@g14g2000cwa.googlegroups.com...
Cuando seleccionas algun elemento en el combo, ¿ te pierde el foco ?
Jose A. Blasco
2006-02-09 17:19:40 UTC
Permalink
Dices que ejecutas desde la ventana de comandos ..., pues si haces un
"do form" terminaras con un "Enter" ?

O como lo haces. ?
Mariano Donaldson
2006-02-09 17:24:36 UTC
Permalink
José...

No. Presiono el botón derecho sobre el form en tiempo de diseño y selecciono
"ejecutar formulario"....

Mariano Donaldson
***@fibertel.com.ar
Buenos Aires, Argentina
Post by Jose A. Blasco
Dices que ejecutas desde la ventana de comandos ..., pues si haces un
"do form" terminaras con un "Enter" ?
O como lo haces. ?
Jose A. Blasco
2006-02-09 17:47:11 UTC
Permalink
Pues acabo de probar lo del "load", y a mi me pasa lo mismo.
Tambien he colocado el messagebox en el click de un boton, y me
devuelve 32

Parece que algunas ejecuciones lleven asociado un valor predeterminado.
Fernando D. Bozzo
2006-02-09 20:58:12 UTC
Permalink
Hola Mariano:

Si querés usar LASTKEY() si o si, lo que podés hacer es poner algo así en el
LOAD del form:

keyboard '{spacebar}'
INKEY(0)

y así te guarda inicialmente 32.

Igualmente yo no te aconsejo depender de ese manejo del buffer de teclado
que querés usar, ya que se te van a presentar muchos casos para controlar y
además dependés de que el usuario efectivamente "use" el teclado, y no se le
dé por intentar hacer todo con el mouse.

Por ejemplo, hay usuarios que gustan de escribir un texto y en vez de darle
Enter al final, simplemente clickean sobre el próximo control en el que van
a escribir.

También se te puede dar el caso de que den Enter o Tab en un textbox y
clickeen tu combo, que va a interpretar que el Enter o Tab se le presionó en
el mismo (usando LASTKEY(), claro)

Yo te aconsejo usar un botón de comando cuadrado al lado del combo, y de
texto ponerle "..." que significa que se mostrará una ventana o cuadro de
diálogo para que el usuario haga alguna elección, y no te rompas más la
cabea. Acordate que el sistema debería funcionar tanto como teclado como con
mouse.

--
Saludos,

Fernando D. Bozzo
VFP6/SP5
Madrid/España

Recomendación:
Lea estos grupos de noticias con un cliente de newsgroup como Outlook
Express, este artículo lo guiará para configurarlo rápidamente:
http://www.panoramabox.com/GoPub.aspx?IdObj=2447
Post by Mariano Donaldson
Hola a todos...
Tengo un form que contiene un combo en el que elijo un ítem existente para
modificar/dar de baja, o tipeo el número de un ítem nuevo para darlo de
alta; al presionar ENTER o TAB se habilita un pageframe donde están los
demás controles....
en el interactivechange del cbo tengo TODO dentro de un
if lastkey()=13 or lastkey()=9
pero se me ejecuta igual con solo desplegar el combo con el mouse y elegir
un ítem con el mouse!!!
... probé con CLEAR TYPEAHEAD en el gotfocus del cbo.... me fijé de tipear
una letra cualquiera en la ventana de comandos antes de correr el formulario
para asegurarme de que no quedara ningún enter pendiente, pero nada...
probé poniendo un messagebox(lastkey()) en el gotfocus del cbo y me aparece
"13"....
no entiendo nada!!
¿Qué puede estar pasando?
Gracias a quien pueda y quiera darme una mano con esto
Mariano Donaldson
Buenos Aires, Argentina
Fernando D. Bozzo
2006-02-10 21:47:08 UTC
Permalink
Hola Mariano:



Estuve haciendo algunas pruebas y efectivamente, cuando seleccionás un item
del combo lastkey() toma el valor 13, lo que tiene su explicación...



¿Te acordás que en el foro te dije que siempre hay que tener en cuenta dos
formas de ingreso: teclado y mouse?, bueno, tiene que ver con eso y con la
compatibilidad hacia atrás, y te lo cuento en dos pasos:



En la época de FoxPro 2.6, antes de Visual FoxPro, había muy pocos eventos
para usar, básicamente disponías del When y del Valid para detectar que
opciones había elegido el usuario, y basándonos en eso te explico:



1) INGRESO POR TECLADO

Para usar el combo con el teclado el usuario podía desplegarlo usando
Alt+Abajo, navegar por las opciones usando cursores arriba/abajo y
seleccionar una opción pulsando Enter (o Tab)

Entonces: ¿Cómo detectabas si el usuario había elegido algo y no salió con
Escape?

...verificando si lastkey() = 13 ó 9 en el Valid()

NOTA: En la epoca anterior a Visual FoxPro los combos no se podían escribir,
sólo seleccionar.



2) SELECCIÓN CON EL MOUSE

Para elegir una opción con el mouse, el usuario clickeaba el combo y elegía
un elemento de la misma forma.

Entonces: ¿Cómo podías saber si el usuario había elegido algo, si no usó
ninguna tecla?...... y por eso la selección con el mouse hace que lastkey()
devuelva 13, porque sino era imposible saberlo.



Así que todo el tema se reduce a la compatibilidad hacia atrás.



Para las pruebas usé VFP y FoxPro 2.6 para Windows (ya me había olvidado
como se hacía un form en FP :)




Saludos,



Fernando D. Bozzo
VFP6/SP5
Madrid/España



Recomendación:
Lea estos grupos de noticias con un cliente de newsgroup como Outlook
Express, este artículo lo guiará para configurarlo rápidamente:
http://www.panoramabox.com/GoPub.aspx?IdObj=2447
Post by Mariano Donaldson
Hola a todos...
Tengo un form que contiene un combo en el que elijo un ítem existente para
modificar/dar de baja, o tipeo el número de un ítem nuevo para darlo de
alta; al presionar ENTER o TAB se habilita un pageframe donde están los
demás controles....
en el interactivechange del cbo tengo TODO dentro de un
if lastkey()=13 or lastkey()=9
pero se me ejecuta igual con solo desplegar el combo con el mouse y elegir
un ítem con el mouse!!!
... probé con CLEAR TYPEAHEAD en el gotfocus del cbo.... me fijé de tipear
una letra cualquiera en la ventana de comandos antes de correr el formulario
para asegurarme de que no quedara ningún enter pendiente, pero nada...
probé poniendo un messagebox(lastkey()) en el gotfocus del cbo y me aparece
"13"....
no entiendo nada!!
¿Qué puede estar pasando?
Gracias a quien pueda y quiera darme una mano con esto
Mariano Donaldson
Buenos Aires, Argentina
Mariano Donaldson
2006-02-12 13:53:29 UTC
Permalink
Fer:

Ante todo, muchísimas gracias, siempre tan claro.

Pero......

¿tenés idea por qué C..... , antes de que reformateara mi máquina, no
pasaba? Estuve revisando SET por SET pero no lo encuentro. Me era re útil
por que entonces, todas esas órdenes se ejecutaban sólo cuando el usuario
presionaba TAB o ENTER para pasar al campo siguiente.

Igualmente, ahora voy a buscarle una vuelta, poner esas órdenes en el
lostfocus o algo así, pero el tema es que ya lo tenía hecho y funcionando,
por lo cual, se me torna bastante embolante.

Gracias de nuevo
Mariano Donaldson
***@fibertel.com.ar
Buenos Aires, Argentina
Post by Fernando D. Bozzo
Estuve haciendo algunas pruebas y efectivamente, cuando seleccionás un item
del combo lastkey() toma el valor 13, lo que tiene su explicación...
¿Te acordás que en el foro te dije que siempre hay que tener en cuenta dos
formas de ingreso: teclado y mouse?, bueno, tiene que ver con eso y con la
En la época de FoxPro 2.6, antes de Visual FoxPro, había muy pocos eventos
para usar, básicamente disponías del When y del Valid para detectar que
1) INGRESO POR TECLADO
Para usar el combo con el teclado el usuario podía desplegarlo usando
Alt+Abajo, navegar por las opciones usando cursores arriba/abajo y
seleccionar una opción pulsando Enter (o Tab)
Entonces: ¿Cómo detectabas si el usuario había elegido algo y no salió con
Escape?
...verificando si lastkey() = 13 ó 9 en el Valid()
NOTA: En la epoca anterior a Visual FoxPro los combos no se podían escribir,
sólo seleccionar.
2) SELECCIÓN CON EL MOUSE
Para elegir una opción con el mouse, el usuario clickeaba el combo y elegía
un elemento de la misma forma.
Entonces: ¿Cómo podías saber si el usuario había elegido algo, si no usó
ninguna tecla?...... y por eso la selección con el mouse hace que lastkey()
devuelva 13, porque sino era imposible saberlo.
Así que todo el tema se reduce a la compatibilidad hacia atrás.
Para las pruebas usé VFP y FoxPro 2.6 para Windows (ya me había olvidado
como se hacía un form en FP :)
Saludos,
Fernando D. Bozzo
VFP6/SP5
Madrid/España
Lea estos grupos de noticias con un cliente de newsgroup como Outlook
http://www.panoramabox.com/GoPub.aspx?IdObj=2447
Post by Mariano Donaldson
Hola a todos...
Tengo un form que contiene un combo en el que elijo un ítem existente para
modificar/dar de baja, o tipeo el número de un ítem nuevo para darlo de
alta; al presionar ENTER o TAB se habilita un pageframe donde están los
demás controles....
en el interactivechange del cbo tengo TODO dentro de un
if lastkey()=13 or lastkey()=9
pero se me ejecuta igual con solo desplegar el combo con el mouse y elegir
un ítem con el mouse!!!
... probé con CLEAR TYPEAHEAD en el gotfocus del cbo.... me fijé de tipear
una letra cualquiera en la ventana de comandos antes de correr el
formulario
Post by Mariano Donaldson
para asegurarme de que no quedara ningún enter pendiente, pero nada...
probé poniendo un messagebox(lastkey()) en el gotfocus del cbo y me
aparece
Post by Mariano Donaldson
"13"....
no entiendo nada!!
¿Qué puede estar pasando?
Gracias a quien pueda y quiera darme una mano con esto
Mariano Donaldson
Buenos Aires, Argentina
Mariano Donaldson
2006-02-12 18:59:42 UTC
Permalink
Fer:

Lo conseguí!!! Encontré la forma de diferenciar entonces si se hizo click
con el mouse, o se hizo ENTER con el teclado.

El combo ahora tiene dos propiedades nuevas:

"desplegado" que me dice, obviamente .T. o .F. si está desplegado o no, y
"quieresalir" que me dice .T. si estoy tratando de dejar el combo o .F. si
no lo estoy tratando de dejar...

entonces....

lo que hago es poner en el keypress de mi clase combo:

case nkeycode=13 and desplegado=.T.
this.quieresalir=.F.
case nkeycode=13 and desplegado=.F.
this.quieresalir=.T.
...

en el interactivechange cambié:

"if lastkey()=13 or lastkey()=9" por "if this.quieresalir=.T."

entonces en el valid (que se dispara siempre), pongo:

if this.quieresalir=.T.
valido....
...si la validación da correcta
...
this.interactivechange
...
endif

NOTA: curiosamente, si presiono ENTER una vez cerrado el combo, NO se
ejecuta Interactivechange, con lo cual, si en el interactivechange me llega
lastkey()=13 es porque se selecciono un ítem con el mouse sí o sí.

Bueno, gracias una vez más por todo

Mariano Donaldson
***@fibertel.com.ar
Buenos Aires, Argentina
Post by Fernando D. Bozzo
Estuve haciendo algunas pruebas y efectivamente, cuando seleccionás un item
del combo lastkey() toma el valor 13, lo que tiene su explicación...
¿Te acordás que en el foro te dije que siempre hay que tener en cuenta dos
formas de ingreso: teclado y mouse?, bueno, tiene que ver con eso y con la
En la época de FoxPro 2.6, antes de Visual FoxPro, había muy pocos eventos
para usar, básicamente disponías del When y del Valid para detectar que
1) INGRESO POR TECLADO
Para usar el combo con el teclado el usuario podía desplegarlo usando
Alt+Abajo, navegar por las opciones usando cursores arriba/abajo y
seleccionar una opción pulsando Enter (o Tab)
Entonces: ¿Cómo detectabas si el usuario había elegido algo y no salió con
Escape?
...verificando si lastkey() = 13 ó 9 en el Valid()
NOTA: En la epoca anterior a Visual FoxPro los combos no se podían escribir,
sólo seleccionar.
2) SELECCIÓN CON EL MOUSE
Para elegir una opción con el mouse, el usuario clickeaba el combo y elegía
un elemento de la misma forma.
Entonces: ¿Cómo podías saber si el usuario había elegido algo, si no usó
ninguna tecla?...... y por eso la selección con el mouse hace que lastkey()
devuelva 13, porque sino era imposible saberlo.
Así que todo el tema se reduce a la compatibilidad hacia atrás.
Para las pruebas usé VFP y FoxPro 2.6 para Windows (ya me había olvidado
como se hacía un form en FP :)
Saludos,
Fernando D. Bozzo
VFP6/SP5
Madrid/España
Lea estos grupos de noticias con un cliente de newsgroup como Outlook
http://www.panoramabox.com/GoPub.aspx?IdObj=2447
Post by Mariano Donaldson
Hola a todos...
Tengo un form que contiene un combo en el que elijo un ítem existente para
modificar/dar de baja, o tipeo el número de un ítem nuevo para darlo de
alta; al presionar ENTER o TAB se habilita un pageframe donde están los
demás controles....
en el interactivechange del cbo tengo TODO dentro de un
if lastkey()=13 or lastkey()=9
pero se me ejecuta igual con solo desplegar el combo con el mouse y elegir
un ítem con el mouse!!!
... probé con CLEAR TYPEAHEAD en el gotfocus del cbo.... me fijé de tipear
una letra cualquiera en la ventana de comandos antes de correr el
formulario
Post by Mariano Donaldson
para asegurarme de que no quedara ningún enter pendiente, pero nada...
probé poniendo un messagebox(lastkey()) en el gotfocus del cbo y me
aparece
Post by Mariano Donaldson
"13"....
no entiendo nada!!
¿Qué puede estar pasando?
Gracias a quien pueda y quiera darme una mano con esto
Mariano Donaldson
Buenos Aires, Argentina
Loading...