Hola a todos.
Estoy con una aplicación en la que en el evento on show de un form realizo varias tareas de manejo de un cubo olap, accesos varios a tablas sql, actualización de tablas, etc. Es un proceso lento, tarda unos 30 segundos. Así que creé un form con un label y una imagen giff animada, el típico calculando con un circulo animado.
Tirado del foro (que me es de una ayuda inestimable) configuré el form para que se mantenga en primer plano, no tenga botones de minimizar, etc.
y en el evento on show implementé:
El programa funciona bien, pero el giff animado se queda congelado. El form se crea al arrancar el programa, también probé a crearlo en tiempo de ejecución, pero el giff se sigue quedando congelado. Para comprobar que no era cuestión de un fallo del contenedor del giff asigne en el form principal un botón para mostrarlo, y entonces sí que la imagen está animada.
Tambien he probado con insertar varios Application.ProcessMessages() en el código de acceso a bases, cálculos, etc ....... y nada, congelado.
Como había leído algo de los hilos de ejecución me he planteado crear un hilo solo para ejecutar el form
He implementado el siguiente código en el form resultados (en el evento onshow) (primero presento el form de espera, hago los cálculos, y cierro el form de espera)
Código Delphi
[-]type
THilo = class( TThread )
private protected procedure Execute; override;
procedure terminarlo;
end;
TForm14 = class(TForm)
ADOQuery1: TADOQuery;
DataSource1: TDataSource;
ADOQuery2: TADOQuery;
DataSource2: TDataSource;
y además
Código Delphi
[-]var
Form14: TForm14;
pendiente,anticipos, periodificaciones:real;
Dia, Mes, Año : Word;
Hoy,fechamala: TDateTime;
miaño:string;
X,TOTEM:integer;
pasoactual:string;
hilo:thilo;
implementation
uses currando; procedure thilo.Execute;
begin
inherited;
Synchronize(form23.show);
Application.ProcessMessages();
end;
procedure Thilo.Terminarlo;
begin
Synchronize(form23.close);
Terminate;
end;
y en el evento on show
Código Delphi
[-]procedure TForm14.FormShow(Sender: TObject);
var x:integer;
begin
hilo := Thilo.Create(true);
Hilo.Priority := tpTimeCritical;
hilo.Resume;
Application.ProcessMessages();
hilo.terminarlo();
FreeAndNil( Hilo );
end;
El form de espera aparece, los cálculos se hacen, el form se cierra..... todo bien, pero el giff sigue congelado.
Es como si el hilo de ejecución de la presentación del form no "chupase" cpu (o al menos eso pienso),
Gracias a todos de antemano por vuestro tiempo, y disculpas si hay alguna metedura de pata grande, solo programo por afición.