![]() |
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:
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.
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; 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? |
Re: Problem bei Splashscreen mit anim. Gif
Du müsstest wahrscheinlich einen neuen Thread erstellen in dem die Aktualisierung regelmäßig aufgerufen wird.
|
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.
|
Re: Problem bei Splashscreen mit anim. Gif
Zitat:
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:
Leider wird das -laut Haltepunktfunktion des Debugers- nur 1 mal durchlaufen. Somit wird das Gif auch nie akktualisiert.
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; Was habe ich falsch gemacht bzw. vergessen? |
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] ![]() 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 23:22 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz