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

Reply via email to