Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Problem bei Splashscreen mit anim. Gif (https://www.delphipraxis.net/97379-problem-bei-splashscreen-mit-anim-gif.html)

rayj 9. Aug 2007 14:19


Problem bei Splashscreen mit anim. Gif
 
Guten Tag Delphianer

Ich mache gerade ein kleines Programm und möchte da nen Splashscreen anzeigen.
Das klappt auch ganz gut, nur bewegt sich das animierte Gif auf dem Splashscreen nicht.

Hier die dpr:

Delphi-Quellcode:
begin
  SplashScreen := TSplashScreen.Create(Application) ;
  SplashScreen.Show;
  Application.Initialize;
  SplashScreen.Update;
  Application.ProcessMessages;
  Application.CreateForm(Tdm, dm);
  Application.CreateForm(TfMain, fMain);
  [usw...]
  Application.ProcessMessages;
  SplashScreen.Hide;
  SplashScreen.Free;
  Application.Run;
end;
Funktioniert ansich besten, nur das animierte gif eben nicht. Wenn ich es auf die Mainform schmeiss geht es, nur im Splashscreen nicht. Ich nehme an das liegt daran, dass das Laden der Forms soviel Rechenleistung beansprucht dass die Messages nie verarbeitet werden.

Ich habe es schon versucht indem ich mehrere application.proccessmessages oder application.handlemessage in einen Timer und OnActivate geschmissen hab, aber das bringt leider nichts.

Was kann ich da tun?

iGoA 9. Aug 2007 15:06

Re: Problem bei Splashscreen mit anim. Gif
 
Du müsstest wahrscheinlich einen neuen Thread erstellen in dem die Aktualisierung regelmäßig aufgerufen wird.

SirThornberry 9. Aug 2007 15:29

Re: Problem bei Splashscreen mit anim. Gif
 
genau, ein Programm mit nur einem Thread (Standard) kann nur ein was zur gleichen Zeit machen. Also entweder das nächste Bild bei deinem animierten Gif laden oder den Rest der Anwendung weiter laden. Aber beides gleichzeitig geht nicht.

rayj 10. Aug 2007 09:15

Re: Problem bei Splashscreen mit anim. Gif
 
Zitat:

Zitat von SirThornberry
genau, ein Programm mit nur einem Thread (Standard) kann nur ein was zur gleichen Zeit machen. Also entweder das nächste Bild bei deinem animierten Gif laden oder den Rest der Anwendung weiter laden. Aber beides gleichzeitig geht nicht.

Hallo,
Danke für die Info :thumb: Dass ich was mit Threads machen muss hab ich schon fast befürchtet, denn ich habe noch nie was damit gearbeitet :gruebel:

Ich habe jetzt in der Splashscreen Unit folgendes:

Delphi-Quellcode:
type
  TMyOwnThread = class(TThread)
  protected
    procedure Execute; override;
  end;

.....

procedure TMyOwnThread.Execute;
begin
try
    Application.ProcessMessages;
  except
    on e: exception do begin
      // mache hier irgendetwas mit dem Fehler.
    end;
  end;
end;

....

procedure TSplashScreen.FormCreate(Sender: TObject);
var
  Thread: TMyOwnThread;
begin
  Thread := TMyOwnThread.Create(True);
  Thread.FreeOnTerminate := True;
  Thread.Execute;
end;
Leider wird das -laut Haltepunktfunktion des Debugers- nur 1 mal durchlaufen. Somit wird das Gif auch nie akktualisiert.

Was habe ich falsch gemacht bzw. vergessen?

DGL-luke 10. Aug 2007 09:21

Re: Problem bei Splashscreen mit anim. Gif
 
Aua, Aua, Aua!!!!!

Du kannst doch nicht im Thread deine Mainform aktualisieren. Also, könntest du schon, aber dann muss sie auch im Kontext deines Threads laufen.
Merke: VCL ist nicht threadsicher!
Alles, was mit Fenstern zu tun hat, immer im gleichen Thread machen.

Das Laden deines GIFs kannst du asynchron machen. Und dann aber bitte ordentlich synchronisieren.

[dp]Thread synch*[/dp]
http://dsdt.info/tutorials/threads/

EDIT: Eine Threadfunc stellt keinen impliziten Loop dar. Die Threadfunc wird einmal ausgeführt, dann stirbt der Thread bzw. legt sich wieder schlafen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:15 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz