Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > FireMonkey
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 21-10-2022
er_lolo er_lolo is offline
Miembro
 
Registrado: may 2016
Posts: 16
Poder: 0
er_lolo Va por buen camino
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.
Responder Con Cita
  #2  
Antiguo 21-10-2022
[egostar] egostar is offline
Registrado
 
Registrado: feb 2006
Posts: 6.557
Poder: 25
egostar Va camino a la fama
Cita:
Empezado por er_lolo Ver Mensaje
......¿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
__________________
"La forma de empezar es dejar de hablar y empezar a hacerlo." - Walt Disney
Responder Con Cita
  #3  
Antiguo 24-10-2022
er_lolo er_lolo is offline
Miembro
 
Registrado: may 2016
Posts: 16
Poder: 0
er_lolo Va por buen camino
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.
Responder Con Cita
  #4  
Antiguo 24-10-2022
er_lolo er_lolo is offline
Miembro
 
Registrado: may 2016
Posts: 16
Poder: 0
er_lolo Va por buen camino
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;
Responder Con Cita
  #5  
Antiguo 24-10-2022
xalo xalo is offline
Miembro
 
Registrado: ene 2011
Posts: 18
Poder: 0
xalo Va por buen camino
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;
Responder Con Cita
  #6  
Antiguo 24-10-2022
er_lolo er_lolo is offline
Miembro
 
Registrado: may 2016
Posts: 16
Poder: 0
er_lolo Va por buen camino
Cita:
Empezado por xalo Ver Mensaje
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!.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Problema con Application.ProcessMessages jandro Varios 5 21-01-2010 15:36:14
Application.ProcessMessages; Stevenmn API de Windows 3 24-02-2008 19:02:34
Tthread Vs. Application -> ProcessMessages(); Peterman Varios 8 31-05-2007 03:05:03
Application.ProcessMessages y Application.HandleMessages molinero1 Varios 13 09-05-2007 14:53:29
No funciona Application.ProcessMessages Sr_Sombrero Varios 0 24-01-2005 22:21:01


La franja horaria es GMT +2. Ahora son las 16:36:58.


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
Copyright 1996-2007 Club Delphi