Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   FireMonkey (https://www.clubdelphi.com/foros/forumdisplay.php?f=50)
-   -   Firemonkey Application.ProcessMessages (https://www.clubdelphi.com/foros/showthread.php?t=95924)

er_lolo 21-10-2022 14:53:57

Firemonkey Application.ProcessMessages
 
Hola, buenas tardes,

Estoy migrando una aplicación firemonkey realizada para Android a la versión 11.

Ya tengo casi todo, pero he visto que no me funcionan los Application.ProccessMessages, que hay por ejemplo para mostrar una pantalla de espera en procesos algo largos.

¿Hay alguna forma de que se muestren estas pantallas? (realmente son layout).

Código Delphi [-]
      ProgressFrame1.Label1.Text := 'Realizando cálculos, por favor espere...';
      ProgressFrame1.Visible := true;
      ProgressFrame1.BringToFront;
      Application.ProcessMessages;
      CalculaDatos;
      ProgressFrame1.Visible := false;

En este caso, finaliza el proceso sin haber mostrado esta pantalla de espera.

egostar 21-10-2022 16:36:35

Cita:

Empezado por er_lolo (Mensaje 548778)
......¿Hay alguna forma de que se muestren estas pantallas? (realmente son layout)......

Android no es compatible directamente con el concepto de formas modales como lo hace Windows, hay un artículo de Marco Cantú que te ayudará a "modificar" tu proceso para solucionar la problemática.

https://blog.marcocantu.com/blog/xe5...l_android.html

Saludos

er_lolo 24-10-2022 09:45:22

Gracias por la respuesta, pero no es el caso, en este caso no quiero mostrar un formulario modal, si no una pantalla de carga (la típica del circulito dando vueltas), mientras realizo algún proceso "largo", como cargar un listview.

er_lolo 24-10-2022 11:33:53

Parece que he conseguido resolver mi problema metiendo el calculo en un hilo. (teniendo cuidado que no llamar a componentes visuales, o utilizar syncronice para ello.

Por si le sirve a alguien, esto es lo que hice. (si es incorrecto agradezco me saquen del error.).

Código Delphi [-]
      ProgressFrame1.Label1.Text := 'Realizando cálculos, por favor espere...';
      ProgressFrame1.Visible := true;
      ProgressFrame1.BringToFront;

      Application.ProcessMessages;
      TThread.CreateAnonymousThread(procedure
        begin
           CalculaDatos;
           ProgressFrame1.Visible := false;
        end).Start;

xalo 24-10-2022 15:12:38

No es correcto como lo estás haciendo er_lolo.
Una de las múltiples formas de hacerlo sería la siguiente:

Código Delphi [-]
      ProgressFrame1.Label1.Text := 'Realizando cálculos, por favor espere...';
      ProgressFrame1.Visible := true;
      ProgressFrame1.BringToFront;
     
      TThread.CreateAnonymousThread(procedure  
      begin
         // Aquí iría todo el código que no afecte a interface usuario....cálculos...todo usando variables locales
         CalculaDatos;
         TThread.Synchronize(nil , procedure
         begin
            // Aquí iría todo el código que cambie algo de la UI. TEdit,TLabel,......
            ProgressFrame1.Visible := false;
         end);
       end).Start;

er_lolo 24-10-2022 19:16:33

Cita:

Empezado por xalo (Mensaje 548792)
No es correcto como lo estás haciendo er_lolo.
Una de las múltiples formas de hacerlo sería la siguiente:

Código Delphi [-]
      ProgressFrame1.Label1.Text := 'Realizando cálculos, por favor espere...';
      ProgressFrame1.Visible := true;
      ProgressFrame1.BringToFront;
     
      TThread.CreateAnonymousThread(procedure  
      begin
         // Aquí iría todo el código que no afecte a interface usuario....cálculos...todo usando variables locales
         CalculaDatos;
         TThread.Synchronize(nil , procedure
         begin
            // Aquí iría todo el código que cambie algo de la UI. TEdit,TLabel,......
            ProgressFrame1.Visible := false;
         end);
       end).Start;

Efectivamente, lo pongo en el texto y no lo aplico, todo lo que afecta a la UI. en el TThread.Synchronize.

Gracias!.


La franja horaria es GMT +2. Ahora son las 15:35:35.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi