Como conocer lo que se ha introducido por teclado

10/08/2003 - 01:51 por Adriana | Informe spam
hola


Me gustaria saber, como podria obtener lo que se ha introducido por el
teclado, me refiero a las teclas que se han pulsado ultimamente, por
ejemplo si pulse solamente un enter lo hago en el evento keypress, pero si
pulso dos veces enter. ¿como puedo obtener que he pulsado 2 enter o
solamente un enter?

Tengo la idea, que se hace por medio de analizar el buffer de teclado,
pero no se como o con que instruccion tenga que hacerlo.

Todas sus sugerencias al respecto me seran de gran ayuda


Saludos




PortalFox :: Nada corre como un zorro
http://www.portalfox.com

PortalFox - NNTP Forum Gateway

Preguntas similare

Leer las respuestas

#1 Heberto Villavicencio
10/08/2003 - 01:59 | Informe spam
Puedes hacer lo siguiente, agrega una propiedad al formulario que se llama
pulsaciones por ejemplo
y en el metodo keypress colocas el codigo

THISFORM.Pulsaciones = Chr(nKeyCode)

de esta forma tienes en THISFORM.Pulsaciones todas las teclas que el usuario
presionara durante el uso del formulario, recuerda primero inicializar la
propiedad a "" y que cada tecla sera guardada como un valor string incluyen
teclas de controlo como enter, flechas de movimiento, retroceso, etc.

"Adriana" escribió en el mensaje
news:
hola


Me gustaria saber, como podria obtener lo que se ha introducido por el
teclado, me refiero a las teclas que se han pulsado ultimamente, por
ejemplo si pulse solamente un enter lo hago en el evento keypress, pero si
pulso dos veces enter. ¿como puedo obtener que he pulsado 2 enter o
solamente un enter?

Tengo la idea, que se hace por medio de analizar el buffer de teclado,
pero no se como o con que instruccion tenga que hacerlo.

Todas sus sugerencias al respecto me seran de gran ayuda


Saludos




PortalFox :: Nada corre como un zorro
http://www.portalfox.com

PortalFox - NNTP Forum Gateway
Respuesta Responder a este mensaje
#2 Heberto Villavicencio
10/08/2003 - 03:09 | Informe spam
Entonces prueba esto en el metodo keypress

if nKeyCode = 13 and THISFORM.Tecla = 13
&& Se presiono 2 veces seguidas la tecla enter
else

endif

THISFORM.Tecla = nKeyCode

Recuerda sempre inicializar THISFORM.Tecla = 0


"Adriana" escribió en el mensaje
news:#
gracias por tu respuesta.

otra pregunta en relacion a esta. Me servira tambien para un control?. Es
que especificamente lo que deseo hacer, es que en un control grid, estoy
realizando la entrada de datos, en el evento keypress del cuadro de texto
de mi columna, si se le da enter, pues se pasa a la siguiente fila del
grid, hasta aqui ok, pero lo de los dos enter es para terminar la entrada
de datos y pasar al siguiente control, ahora lo tengo que para terminar de
introducir datos se pulse esc, pero el problema esta en que el cliente
tiene su sistema anterior en clipper, y asi era como terminaba de
introducir datos, pulsando los dos enter. Por esto es que me interesa
saber de que forma podria hacerlo.

Bueno tal vez lo de los grids sea mas recomendable, para mostrar datos y
no para introducir, tambien he considerado la idea de introducirlos por
cuadros de texto y solo mostrar los datos al grid, pero me vuelvo a topar
con lo mismo, quiere que se manejen los dos enter para terminar. vaya lio

Como siempre muy agradecida por su ayuda que puedan brindarme al respecto
y las propuestas son muy bienvenidas.




PortalFox :: Nada corre como un zorro
http://www.portalfox.com

PortalFox - NNTP Forum Gateway
Respuesta Responder a este mensaje
#3 Heberto Villavicencio
10/08/2003 - 03:11 | Informe spam
Yo particularmente preferiria tener controles de texto que fueran llenando
el grid y no agregar datos directamente al grid, pero esto es ya decision de
cada uno, ahora de los 2 enter es primera vez que veo este tipo de accion
para salir de una entrada de datos, a veces nos topamos con esos cliente que
no "le entran balas" y tiene que ser como ellos digan, trata de hacer
entender que esta cambiando de unsistema MSDOS a uno windows y que hay
ciertos cambios a los cuales se debe adaptar ya que la interface grafica no
se maneja exactamente como la de texto. Saludos

"Adriana" escribió en el mensaje
news:#
gracias por tu respuesta.

otra pregunta en relacion a esta. Me servira tambien para un control?. Es
que especificamente lo que deseo hacer, es que en un control grid, estoy
realizando la entrada de datos, en el evento keypress del cuadro de texto
de mi columna, si se le da enter, pues se pasa a la siguiente fila del
grid, hasta aqui ok, pero lo de los dos enter es para terminar la entrada
de datos y pasar al siguiente control, ahora lo tengo que para terminar de
introducir datos se pulse esc, pero el problema esta en que el cliente
tiene su sistema anterior en clipper, y asi era como terminaba de
introducir datos, pulsando los dos enter. Por esto es que me interesa
saber de que forma podria hacerlo.

Bueno tal vez lo de los grids sea mas recomendable, para mostrar datos y
no para introducir, tambien he considerado la idea de introducirlos por
cuadros de texto y solo mostrar los datos al grid, pero me vuelvo a topar
con lo mismo, quiere que se manejen los dos enter para terminar. vaya lio

Como siempre muy agradecida por su ayuda que puedan brindarme al respecto
y las propuestas son muy bienvenidas.




PortalFox :: Nada corre como un zorro
http://www.portalfox.com

PortalFox - NNTP Forum Gateway
Respuesta Responder a este mensaje
#4 David Amador \(Davphantom\)
10/08/2003 - 03:21 | Informe spam
Es cierto lo que te dice Heberto lo mejor seria que fueras agregando los
registros al grid a través de cuadros de texto ... esto te da mejor manejo
de programa y mayor control ..

David Amador Tapia
Webmaster de "La Web de Davphantom"
www.davphantom.net

Cartagena. Colombia
Tel (5) 6621502 - 6581523


"Heberto Villavicencio" escribió en el mensaje
news:u##
Yo particularmente preferiria tener controles de texto que fueran llenando
el grid y no agregar datos directamente al grid, pero esto es ya decision


de
cada uno, ahora de los 2 enter es primera vez que veo este tipo de accion
para salir de una entrada de datos, a veces nos topamos con esos cliente


que
no "le entran balas" y tiene que ser como ellos digan, trata de hacer
entender que esta cambiando de unsistema MSDOS a uno windows y que hay
ciertos cambios a los cuales se debe adaptar ya que la interface grafica


no
se maneja exactamente como la de texto. Saludos

"Adriana" escribió en el mensaje
news:#
> gracias por tu respuesta.
>
> otra pregunta en relacion a esta. Me servira tambien para un control?.


Es
> que especificamente lo que deseo hacer, es que en un control grid, estoy
> realizando la entrada de datos, en el evento keypress del cuadro de


texto
> de mi columna, si se le da enter, pues se pasa a la siguiente fila del
> grid, hasta aqui ok, pero lo de los dos enter es para terminar la


entrada
> de datos y pasar al siguiente control, ahora lo tengo que para terminar


de
> introducir datos se pulse esc, pero el problema esta en que el cliente
> tiene su sistema anterior en clipper, y asi era como terminaba de
> introducir datos, pulsando los dos enter. Por esto es que me interesa
> saber de que forma podria hacerlo.
>
> Bueno tal vez lo de los grids sea mas recomendable, para mostrar datos y
> no para introducir, tambien he considerado la idea de introducirlos por
> cuadros de texto y solo mostrar los datos al grid, pero me vuelvo a


topar
> con lo mismo, quiere que se manejen los dos enter para terminar. vaya


lio
>
> Como siempre muy agradecida por su ayuda que puedan brindarme al


respecto
> y las propuestas son muy bienvenidas.
>
>
>
>
> PortalFox :: Nada corre como un zorro
> http://www.portalfox.com
>
> PortalFox - NNTP Forum Gateway


Respuesta Responder a este mensaje
#5 Del Angel Davenport
10/08/2003 - 03:37 | Informe spam
Hola Adriana, si quieres te comparto mi experiencia con lso grids,
definitivamente a mi se me hacen lo mejor para meter valores por partidas
(para facturacion, pedidos, ordenes de compra, etc).

Como yo los implemento es creando un cursor.

en el INIT de mi FORM lo creo

CREATE CURSOR Auxiliar (AuxNumero N(2), AuxNoArticulo C(8), AuxDescripcion
C(30), ;
AuxUdMed C(5), AuxCantidad N(10), AuxTiempo N(4,2))

En un metodo que yo creo que se llama INICIALIZA, y es ejecutado cada
nueva factura, pedido o movimiento que vayas a ocupar

WITH THISFORM
*!* Borro todos los datos del cursor
SELECT Auxiliar
ZAP

*!* Asigno el cursor al grid, por codigo, no de manera grafica.
.grdGrid1.RECORDSOURCETYPE = 1
.grdGrid1.RECORDSOURCE = 'Auxiliar'
.grdGrid1.REFRESH
ENWITH

Las validaciones que necesitas, yo las defino en de la siguiente manera:

la estructura del GRID es grid.columna.control que normalmente es un
textbox.

En el objeto textbox, puedes validar la entrada en el VALID, un ejemplo de
un valid que yo tengo es

*!* para validar los movimientos dentro del grid.
IF LASTKEY()== 5 .AND. RECNO() > 1
SKIP -1
RETURN
ENDIF
IF LASTKEY() == 24 .AND. RECNO() < RECCOUNT()
SKIP 1
RETURN
ENDIF

*!* Puedes cargar info a la segunda columna con lo que introduciste en la
primera, ejemplo, buscas en la tabla de articulos y depliegas info de otra
columna

SELECT Articulo
IF SEEK(THIS.VALUE)
SELECT Auxiliar
REPLACE AuxNombreArticulo WITH Articulo.Nombre
THISFORM.GrdGrid1.REFRESH
ELSE
IF !EMPTY(THIS.VALUE)
WAIT WINDOW "Articulo Inexistente" TIMEOUT 2
SELECT Auxiliar
REPLACE AuxNombreArticulo WITH ''
THISFORM.GrdGrid1.REFRESH
RETURN .F.
ELSE
IF LASTKEY() == 13
RETURN .F.
ENDIF
ENDIF
ENDIF


Esta otra columna, de Descripcion, no necesitas tenerla habilitada, puedes
tenerla como: ENABLED = .F. (ojo es el objeto de la columna), asi al dar
enter te bricas hasta la 3a columna...

En el textbox de tu ultima columna, puedes validar lo que necesitas con el
doble enter,

yo tengo validaciones de cantidad, y al ultimo esto:

*!* Si lo ultimo capturado es un enter
IF LASTKEY() == 13
*!* Agrega un registro al cursor, lo que te posibilita capturar un nuevo
registro
SELECT Auxiliar
IF RECNO() == RECCOUNT()
APPEND BLANK
ENDIF

*!* Para no perder el control, del grid... jejejeje ; )
GO TOP
GO BOTTOM

*!* refrescas el grid, y mandas el control a la primera columna de abajo.
THISFORM.GrdGrid1.REFRESH
THISFORM.GrdGrid1.ColNoArticulo.SETFOCUS
KEYBOARD '{DNARROW}'
ENDIF


De lo del doble enter, yo lo pondria asi:

en el Keypress

if nkeycode== 13
if thisform.anteriorcapturado == 13

thisform.bandera = .t.
endif
endif
thisform.anteriorcapturado = nkeycode

Ojo: lo del doble enter no se si funciona, lo agregue pensando en una
solucion, pero se basa en que el evento Keypress de tu ultimo textbox se
ejecuta cada que presionas una tecla, por eso guardas el eco de lo ultimo
que presionaste y lo comparas con el actual.

Despues cambiaria la condicion que pongo del validad del LASTKEY por IF
THISFORM.Bandera = .t., y continuaria normal.

Espero haberme explicado y que te sirva de ayuda.

Saludos



saludos a la banda


PortalFox :: Nada corre como un zorro
http://www.portalfox.com

PortalFox - NNTP Forum Gateway
Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida