Hello,
I'd like to show a splash screen with an animation during a lengthy
operation.
I cannot rely on a timer to show the animation since the message loop
isn't running, so I'm using a thread to directly paint over the form, i.e.:
WaitForm.Show;
Application.ProcessMessages;
...
procedure TWaitForm.FormShow(Sender: TObject);
begin
FUpdateThread:=TUpdateThread.Create(self);
end;
...
procedure TUpdateThread.Execute;
begin
while not Terminated do
begin
FWaitForm.ShowProgress;
Sleep(30);
end;
end;
...
procedure TWaitForm.ShowProgress;
begin
PaintBox1.Canvas.Clear;
//WaitAnimation is an image list
WaitAnimation.Draw(PaintBox1.Canvas,0,0,FImageIndex);
FImageIndex:=FImageIndex+1;
if FImageIndex>=WaitAnimation.Count then
FImageIndex:=0;
end;
This works wonderfully under windows (which is my intended target, so no
problem here), but under Linux it doesn't work (tested with gtk2, gtk3
and qt5). In fact, even the "Show; Application.ProcessMessages" is
erratic, sometimes it shows the form, sometimes it doesn't.
Lazarus 2.2.6/fpc 3.2.2
Any idea?
Bye
--
Luca Olivetti
Wetron Automation Technology http://www.wetron.es/
Tel. +34 93 5883004 (Ext.3010) Fax +34 93 5883007
--
_______________________________________________
lazarus mailing list
lazarus@lists.lazarus-ide.org
https://lists.lazarus-ide.org/listinfo/lazarus