FoxPro/Visual FoxPro - Ayuda Algo básico.. pero no sé como resolverlo :(

   
Vista:

Ayuda Algo básico.. pero no sé como resolverlo :(

Publicado por Andrea (325 intervenciones) el 20/11/2008 22:11:23
Hola a todos.
Días pasado envíe un post sobre el tema pero todavía no lo pude resolver.

Tengo un cuadro de texto (para ingresar el código de cliente) que si el usuario presiona ENTER y
- está vacío, despliega un formulario de búsqueda
-Si el textbox no está vacío, busca el código en la tabla CLIENTES

Hasta ahí todo bien.

El problema es que si el usuario quiere presionar sobre el botón Cerrar del formulario, LE APARECE EL FORM DE BÚSQUEDA.

Es decir, cuando el Cuadro de Texto pierde el foco porque el usuario hizo click con el Mouse en [X], queda como si hubiera presionado Enter

Puse un CLEAR TYPEAHEAD en el When del cuadro de texto (para limpiar el buffer del teclado) pero el problema sigue igual

¿NO HAY NINGUNA FORMA DE QUE EL LASTKEY( ) no sea 13 (Enter) CUANDO UNO SALE CON EL MOUSE?

¿PORQUE EL LASTKEY( ) ES 13 SI YO VACÍO EL BUFFER Y NO PRESIONO NINGUNA TECLA? (solo el mouse)

MUCHAS GRACIAS!!!!
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Ayuda Algo básico.. pero no sé como resolverlo

Publicado por Plinio (7771 intervenciones) el 20/11/2008 22:20:34
Pon tu codigo en el Keypress() y pregunta de esta manera

IF nKeyCode = 13 &&Si presiono Enter
**Tu codigo aqui

ENDIF
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Ayuda Algo básico.. pero no sé como resolverlo

Publicado por kong (681 intervenciones) el 20/11/2008 22:45:02
eso es exactamente lo que te dije.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Gracias... pero

Publicado por Andrea (325 intervenciones) el 21/11/2008 00:36:41
Gracias Plinio y a Kong (perdón Kong...) pero yo hasta ahora uso el VALID para validar un campo

¿se puede usar Return .T .y Return .F. en el Keypress?

Aunque cambie todo (para usar el Keypress, tengo una duda:

¿se sigue utilizando el CLEAR TYPEAHEAD en el VFP 9?, porque lo pongo en el When pero es como si no lo tomara

Si pongo un Wait window STR(LASTKEY()) me muestra siempre algún valor en vez de poner ""

Muchas gracias y perdonen mi ignorancia
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Gracias... pero

Publicado por neo (1601 intervenciones) el 21/11/2008 16:57:35
estoy de acuerdo con plinio, pero además, si ya tienes algon en el valid porqué utilizar el keypress ??

Pregunta:

Como tienes estructurado el codigo tanto en el evento Valid como en Keypress??..... postea un ejemplo y te solucionamos el problema

Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Gracias... pero

Publicado por kong (681 intervenciones) el 21/11/2008 19:05:19
eso, postea el codigo
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

ACA VA EL CODIGO "PROBLEMÁTICO"... :(

Publicado por Andrea (325 intervenciones) el 21/11/2008 20:21:51
Ante todo gracias a todo por las respuestas

Antes de postear el código les recuerdo que es un CUADRO DE TEXTO donde se ingresa el código de un cliente.

- Si está vacío y presiona Enter tiene que aparecer un FORM de búsqueda donde figuran los nombres de clientes ordenados.

- Si presiona Esc, debe cerrar el formulario de carga

- Si no está vacío, busca el valor ingresado en la base de datos de clientes

-- Si encuentra el código, muestra los datos
-- Si NO encuentra el código de cliente, muestra el FORM de búsqueda

- En todos los casos, el usuario tiene que poder cerrar el FORM con el botón Cerrar [x] sin que aparezca ningún cartel ni nada raro.
--------------
En el código VALID está

IF this.value="" && vacío
__DO CASE
__CASE LASTKEY( )=27 && Esc
____THISFORM.RELEASE
____RETURN .T.

__CASE LASTKEY( )=13 && Enter
____RETURN .T.
____(acá cambié el código, y lo pasé a Keypress como sugirieron ustedes

__ENDCASE

ELSE
__IF SEEK(this.value, "Tabla_de_Clientes","codigo")
____(muestra los datos)
____RETURN .T.
__ELSE
____(muestra el FORM de consulta)
____IF devuelve_vacio
______RETURN .F.
____ELSE
______=SEEK(this.value, "Tabla_de_Clientes","codigo")
______(muestra los datos)
______RETURN .T.
____ENDIF
__ENDIF

ENDIF

--------------------------------------------------------

En el KEYPRESS ahora está

DO CASE
CASE nKeyCode=13 &&Enter
__IF this.value=""
____(muestra el FORM de consulta)
____IF devuelve_vacio
______RETURN .F.
____ELSE
______=SEEK(this.value, "Tabla_de_Clientes","codigo")
______(muestra los datos)
______RETURN .T.
___ENDIF
__ENDIF

ENDCASE
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:ACA VA EL CODIGO

Publicado por kong (681 intervenciones) el 21/11/2008 21:07:51
haber si lo logro.

Todo en el KeyPress

do case
__case nKeyCode=13
____if alltrim(this.value)<>""
________seek alltrim(this.value)
________if found()
____________poner los resultados en los text
__________else
____________abrir el form de busqueda
________endif
______else
________abrir el form de busqueda
____endif

__case nKeyCode=27 &&personalmente esta opcion deberia ir en el keypress del form y no en el del text
____thisform.release

endcase
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:ACA VA EL CODIGO

Publicado por neo (1601 intervenciones) el 21/11/2008 21:14:11
Mira, yo no veo rpoblemático el codigo, lo que me parece problematico es la método que estás empleando en la escritura del codigo.

Haz de cuenta que vfp hace lo que tu escribes, tu escribes que si está vacio y logico al salir de este textbox, ejecutará lo que tengas en condicion "vacio"

te recomiendo que mejor hagas un "messagebox" con una pregunta y que cuando esté vacio preguntes si quieres mostrar el form de busqueda y con eso sales de ese problema

Saludos!!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:ACA VA EL CODIGO

Publicado por Andrea (325 intervenciones) el 21/11/2008 22:56:27
Si, Gracias Kong y Neo

El problema es que el cliente me pidió que cuando presione Enter le aparezca la ventanita.

En realidad funciona bien, pero tengo el problema que cuando quiere presionar la [x] se descuelga la ventana de búsqueda, como si hubiera apretado Enter (cuando en realidad no presionó nada y solamente hizo click con el mouse), entonces la única forma de salir del Form es presionando Esc

Gracias por la ayuda
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:ACA VA EL CODIGO

Publicado por neo (1601 intervenciones) el 22/11/2008 01:22:23
es que el "enter" es igual a valid....

entonces lo que te recomiendo es convencer que la mejor opcion es que el cliente utilice otra tecla para mostrar la ventana

entonces utiliza alguna logica, como por ejemplo en el valid si está vacio el textbox pero no pulsó la tecla enter, entonces asigna una variable y ya con eso dependiendo si la variable es verdadera despliega la ventana y si no aunque esté vacia no mostrará la ventana ya que la variable es falsa.

Aunque sigo con la idea de que cuando el textbox esté vacio y ya sea con un Enter o que simplemente salga del enfoque del text, PRIMERO QUE HAGA UNA PREGUNTA SI DE QUE SI DESEA REALIZAR UNA BUSQUEDA,....y si el usuario pulsa que si, que se muestre la ventana y si pulsa que no, no realize nada y pueda salir del form sin ningun problema

saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:ACA VA EL CODIGO

Publicado por Marcelo (171 intervenciones) el 22/11/2008 14:13:20
yo haria lo siguiente
sacaria el codigo del Valid
lo pongo en el keypress
habilito set confirm on
do case
case nkeycode=13
IF this.value="" && vacío
(muestra el FORM de consulta)
IF devuelve_vacio
__le paso una variable falsa para el valid
ELSE
__=SEEK(this.value, "Tabla_de_Clientes","codigo")
__(muestra los datos)
__le paso la variable verdadera al valid
ENDIF
ELSE TENGO DATOS A BUSCAR
IF SEEK(this.value, "Tabla_de_Clientes","codigo")
(muestra los datos)
__le paso la variable verdadera al valid
ELSE
(muestra el FORM de consulta)
IF devuelve_vacio
__le paso una variable falsa para el valid
ELSE
__=SEEK(this.value, "Tabla_de_Clientes","codigo")
__(muestra los datos)
__le paso la variable verdadera al valid
ENDIF
ENDIF
ENDIF
case nkeycode=27
____THISFORM.RELEASE
endcase

en el valid
analizo la variable si es que te sirve para otro procedimiento

si cerras el form = tocar esc
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:ACA VA EL CODIGO

Publicado por ANDRES CORTEZ M (162 intervenciones) el 23/11/2008 05:08:08
HOLA ANDREITA

Mira como dice marcelo no utilices el valid

en el text1 vamos a suponer es alli donde tienes el problema, dentro del metodo keypress. escribe

if nkeycode=13 .and. empt(thisform.text1.value)
do form formulariodebusqueda
endif

ACM
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar