AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Problem bei Splashscreen mit anim. Gif

Ein Thema von rayj · begonnen am 9. Aug 2007 · letzter Beitrag vom 10. Aug 2007
Antwort Antwort
rayj

Registriert seit: 18. Okt 2005
46 Beiträge
 
#1

Problem bei Splashscreen mit anim. Gif

  Alt 9. Aug 2007, 15:19
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?
  Mit Zitat antworten Zitat
iGoA

Registriert seit: 9. Jul 2007
69 Beiträge
 
#2

Re: Problem bei Splashscreen mit anim. Gif

  Alt 9. Aug 2007, 16:06
Du müsstest wahrscheinlich einen neuen Thread erstellen in dem die Aktualisierung regelmäßig aufgerufen wird.
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#3

Re: Problem bei Splashscreen mit anim. Gif

  Alt 9. Aug 2007, 16:29
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.
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
rayj

Registriert seit: 18. Okt 2005
46 Beiträge
 
#4

Re: Problem bei Splashscreen mit anim. Gif

  Alt 10. Aug 2007, 10:15
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 Dass ich was mit Threads machen muss hab ich schon fast befürchtet, denn ich habe noch nie was damit gearbeitet

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?
  Mit Zitat antworten Zitat
Benutzerbild von DGL-luke
DGL-luke

Registriert seit: 1. Apr 2005
Ort: Bad Tölz
4.149 Beiträge
 
Delphi 2006 Professional
 
#5

Re: Problem bei Splashscreen mit anim. Gif

  Alt 10. Aug 2007, 10:21
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.
Lukas Erlacher
Suche Grafiktablett. Spenden/Gebrauchtangebote willkommen.
Gotteskrieger gesucht!
For it is the chief characteristic of the religion of science that it works. - Isaac Asimov, Foundation I, Buch 1
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:56 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