Recent

Author Topic: Problema con los Showmessage y la tecla Enter  (Read 2223 times)

daragor

  • Jr. Member
  • **
  • Posts: 66
    • Blog Webscom
Problema con los Showmessage y la tecla Enter
« on: September 29, 2020, 02:39:50 am »
Hola amigos! tiempo q no ando por aca, saludos cordiales.
Recurro a uds. a fin de encontrar luz con algo me me esta ocurriendo, aclaro q tengo usando la version 2.0.10 ultima release de lazarus

Resulta que en todos los procesos del programa, en medio del codigo largo un "showmessage" o un MessageDlg con X texto, informando algo del proceso, y al presionar Enter (si la tecla) se vuelven a repetir algunas cosas! es muuuy raro lo q me esta pasando, no soy novato, no me habia pasado antes nunca, les doy un ejemplo...

cargo un archivo, sale el cartel informando la ruta y el nombre, y al presionar Aceptar, se vuelve a abrir el dialog para cargar el archivo...
o estoy en un bucle, termina, informo y le pregunto al usuario si quiere borrar x registros, al hacer clic en Yes, se vuelve a repetir el ciclo q ya habia terminado...
quiero decir q los codigos, la programacion funciona PERFECTO, si uso solamente el mouse y voy haciando clic con él.. entonces el problema no está en el codigo, esta o "en los dialogs" y es raro con algo tan simple como un "showmessage" o está en el uso del teclado!
 
Obviamente solo uso el evento OnClick de los botones... es como que cuando presionamos el Aceptar del showmessage se esta presionando el boton nuevamente

Por favor! si no me explique bien es porq realmente me cuesta hacerlo es muy muy raro. y No puedo obligar al usuario que SOLO use el mouse...

Gracias
« Last Edit: September 29, 2020, 03:24:54 am by daragor »
Inculcando el software libre.
https://www.webscom.com.ar

Edson

  • Hero Member
  • *****
  • Posts: 1301
Re: Problema con los Showmessage y la tecla Enter
« Reply #1 on: September 29, 2020, 03:52:30 am »
LLevo tiempo trabajando en Lazarus, y nunca he tenido ese problema. Debe ser un problema de tu código.

Sería bueno que incluyas un proyecto de muestra que manifieste ese problema. Eso ayuda bastante. Estoy seguro de que la solución es algo sencillo.

Saludos.
Lazarus 2.2.6 - FPC 3.2.2 - x86_64-win64 on Windows 10

daragor

  • Jr. Member
  • **
  • Posts: 66
    • Blog Webscom
Re: Problema con los Showmessage y la tecla Enter
« Reply #2 on: September 29, 2020, 04:13:14 am »
Si si coincido q es raro. pero el codigo no tiene error, quizas pienso en alguna propiedad del form, algo, no sé como te digo manejando todo con el mouse no ocurre esto y va perfecto el sistema..
Inculcando el software libre.
https://www.webscom.com.ar

GAN

  • Sr. Member
  • ****
  • Posts: 370
Re: Problema con los Showmessage y la tecla Enter
« Reply #3 on: September 29, 2020, 04:48:16 am »
Hola @daragor por lo que cuentas:

Quote
la programacion funciona PERFECTO, si uso solamente el mouse y voy haciando clic con él.

Si el usuario presiona un botón, "Borrar", aparece el showmessage y si le da enter es como si tuviese efecto sobre el botón "Borrar" y vuelve a mostrar el showmessage hasta que se haga click.
Puede ser un bug que afecte a tosos los S.O. o solo a uno, qué usas Win, Linux, Mac?
Un fragmento del código ayudaría mucho, o un simple proyecto donde ocurra el problema para poder chequearlo.

Saludos.
Lazarus 2.0.8 FPC 3.0.4 Linux Mint Mate 19.3
Zeos 7̶.̶2̶.̶6̶ 7.1.3a-stable - Sqlite 3.32.3 - LazReport

lucamar

  • Hero Member
  • *****
  • Posts: 4219
Re: Problema con los Showmessage y la tecla Enter
« Reply #4 on: September 29, 2020, 05:41:35 am »
Aunque raro, también podría ser un problema de hardware, que la tecla esté "botando" (o se quede "pegada" un momentito) y lance dos <Intro>. ¿Has probado a cambiar el teclado?

Ya sé que si es eso te habrías dado cuenta: pasaría con otras aplicaciones y con otros botones, no sólo con ShowMessage() y MessageDlg() en programas Lazarus, pero por probar no pierdes nada ...
Turbo Pascal 3 CP/M - Amstrad PCW 8256 (512 KB !!!) :P
Lazarus/FPC 2.0.8/3.0.4 & 2.0.12/3.2.0 - 32/64 bits on:
(K|L|X)Ubuntu 12..18, Windows XP, 7, 10 and various DOSes.

daragor

  • Jr. Member
  • **
  • Posts: 66
    • Blog Webscom
Re: Problema con los Showmessage y la tecla Enter
« Reply #5 on: September 29, 2020, 07:35:13 pm »
Gracias muchos por escribir no esperaba menos de uds, los q siempre estan... sigo investigando,

- uso windows 10
- no es el teclado lo probé en un par de maquinas distintas, el problema se repite

No les dejo un ejemplo de codigo ya q le unidad tiene mas de 1500 lineas, pero voy a evaluar y estoy informando

** Actualizo información
No van a creer pero cuando hago Enter en el dialog es como que se vuelve a presionar el boton q ejecuta el proceso.
Lo que hago es un Disabled del mismo para q no se vuelva a ejecutar
« Last Edit: September 29, 2020, 08:31:30 pm by daragor »
Inculcando el software libre.
https://www.webscom.com.ar

lucamar

  • Hero Member
  • *****
  • Posts: 4219
Re: Problema con los Showmessage y la tecla Enter
« Reply #6 on: September 30, 2020, 09:44:06 am »
No lo puedo replicar; hice este programa mínimo (adjunto) para que pruebes a ver si aún te pasa lo mismo. Si funciona como debe entonces es que hay algo raro en el tuyo: ¿no estarás interceptando teclas en el form con OnKeyDown() o algo así? Eso a veces puede provocar problemas como el que dices.

En fin, prueba este test y dinos qué pasa: lo que debería pasar es que el fichero se carga en el memo, la barra de estado se actualiza una vez y sale el cuadro de mensaje.
Turbo Pascal 3 CP/M - Amstrad PCW 8256 (512 KB !!!) :P
Lazarus/FPC 2.0.8/3.0.4 & 2.0.12/3.2.0 - 32/64 bits on:
(K|L|X)Ubuntu 12..18, Windows XP, 7, 10 and various DOSes.

daragor

  • Jr. Member
  • **
  • Posts: 66
    • Blog Webscom
Re: Problema con los Showmessage y la tecla Enter
« Reply #7 on: October 02, 2020, 11:37:20 pm »
Gracias por el esfuerzo lucamar, el programa q me enviaste funciona perfecto, sin problemas.

no sé que es, el drama debe estar en el código, pero imagina que al hacerlo con el mouse anda bien
Inculcando el software libre.
https://www.webscom.com.ar

lucamar

  • Hero Member
  • *****
  • Posts: 4219
Re: Problema con los Showmessage y la tecla Enter
« Reply #8 on: October 03, 2020, 12:01:34 am »
Si con el ratón todo funciona bien lo más probable es que haya algo en tu código que está "interfiriendo" con el teclado pero es imposible saber qué sin verlo; como mucho podemos tratar de "adivinar" y eso no es nada fácil (ni muy útil, ya que estamos).

¿Seguro que no puedes ir aligerando el programa hasta tener un "esqueleto" que muestre el problema? Eso serviría no sólo para nosotros sino también para ti; es bastante posible que una vez lo reduzcas al mínimo veas inmediatamente qué falla y por qué.

En última instancia, si puedes y no es "secreto", adjunta el proyecto completo; mira el consejo del wiki: Sharing large pieces of code; un proyecto con 1500 loc tampoco es tan grande ... ;)

¡Suerte!
« Last Edit: October 03, 2020, 12:03:13 am by lucamar »
Turbo Pascal 3 CP/M - Amstrad PCW 8256 (512 KB !!!) :P
Lazarus/FPC 2.0.8/3.0.4 & 2.0.12/3.2.0 - 32/64 bits on:
(K|L|X)Ubuntu 12..18, Windows XP, 7, 10 and various DOSes.

daragor

  • Jr. Member
  • **
  • Posts: 66
    • Blog Webscom
Re: Problema con los Showmessage y la tecla Enter
« Reply #9 on: October 03, 2020, 02:27:19 am »
Bueno dada la insistencia, y con razon del compañero lucasmar, me he puesto a hacer una prueba, casi paso a paso del codigo en el boton (opendialog) q generaba este error y lo encontré, pero ahora quiero una explicación! jajaja

Lo que causa q se repita es un Application.ProcessMessages dentro de un bucle, les dejo un codigo simple:

Code: Pascal  [Select][+][-]
  1. procedure TForm1.Button1Click(Sender: TObject);
  2. var
  3.   i, nro: integer;
  4. begin
  5.   // Abrimos un archivo
  6.   OpenXLS.FileName:= '';
  7.   OpenXLS.InitialDir:= ExtractFilePath(Application.EXEName);
  8.   try
  9.     if OpenXLS.Execute then
  10.       if OpenXLS.FileName <> '' then
  11.       begin
  12.         fn.Caption:= OpenXLS.FileName;
  13.         nro:= 0;
  14.         // Recorremos un ciclo cualquiera
  15.         for i:= 1 to 1000 do
  16.         begin;
  17.           inc(nro);
  18.           cn.Caption:= inttostr(nro)+'/1000';
  19.           Application.ProcessMessages;
  20.         end;
  21.       end;
  22.   except
  23.      on E: Exception do showmessage(pchar(Exception));
  24.   end;
  25. end;
  26.  

Un video para ver aqui: https://www.youtube.com/watch?v=oXBUalfFbmk

Si quieren, y seria bueno, lo compilan y lo ejecutan, van a ver, o no, lo que me pasa. Dentro del form puse el paso a paso

Entonces, quito el Application.ProcessMessages;  y se soluciona el problema, alguien me da una explicación? y una solución, gracias!
« Last Edit: October 03, 2020, 03:09:21 am by daragor »
Inculcando el software libre.
https://www.webscom.com.ar

Edson

  • Hero Member
  • *****
  • Posts: 1301
Re: Problema con los Showmessage y la tecla Enter
« Reply #10 on: October 03, 2020, 06:12:53 pm »
Confirmo que puedo reproducir el problema en mi sistema, de acuerdo a las condiciones indicadas.

Pareciera que usar teclado para abrir un formulario modal, y luego ejecutar Application.ProcessMessages() genera un efecto de reingresar la tecla "enter" pulsada antes de abrir el formulario. La explicación detallada no la manejo. Tendría que sumergirme en el código del LCL.

De todas formas no me parece apropiado mezclar Application.ProcessMessages() con la apertura/cierre de formularios modales. Es muy impredecible.

Te recomiendo que uses TTimer y eventos para generar temporizaciones y evitar Application.ProcessMessages().


Saludos
Lazarus 2.2.6 - FPC 3.2.2 - x86_64-win64 on Windows 10

daragor

  • Jr. Member
  • **
  • Posts: 66
    • Blog Webscom
Re: Problema con los Showmessage y la tecla Enter
« Reply #11 on: October 03, 2020, 10:43:16 pm »
Gracias por el compromiso Edson, si puede haber variantes mejores, era un detalle que ni lo tenia en cuenta dado q lo use muchas veces para mostrar un progreso x ejemplo, pero ahora estoy mas tranquilo de que no es un "problema mio" particularmente...

Inculcando el software libre.
https://www.webscom.com.ar

 

TinyPortal © 2005-2018