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/)
-   -   Keine Animation beim SplashScreen (https://www.delphipraxis.net/184844-keine-animation-beim-splashscreen.html)

Popov 24. Apr 2015 13:33

Keine Animation beim SplashScreen
 
Liste der Anhänge anzeigen (Anzahl: 1)
Ich hab ein Standard SplashScreen den ich seit Jahren nutze (falls nötig). Es ist einfach, erfüllt seinen Zweck, nur mit der Animation in dem SplasScreen klappt es nicht. Das ist nichts was mich bisher störte, und es stört mich immer noch nicht, aber ich frage wieso es nicht funktioniert.

Auf dem SplashScreen Formular habe ich eine einfache TAnimate Animation mit einem Standard Windows Avi. Nur läuft die Animation beim SplashScreen beim Start nicht. Später schon, wenn man das SplashScreen erneut aktiviert.

Ich denke das Problem ist TAnimate, nur wie bekomme ist es zu laufen?

Einen kleinen Trick kenne ich. Ich platziere einen Timer drauf. Es ist egal ob er auf 1 ms, auf 1000 ms oder gar auf 2000000 ms eingestellt ist. Läuft der Timer, läuft auch die Animation. Nur es sollte eigentlich auch ohne Tricks funktionieren.

Sir Rufo 24. Apr 2015 13:49

AW: Keine Animation beim SplashScreen
 
Es ist eigentlich ganz einfach ...

Alle vorbereitenden Schritte müssen in einem separaten Thread erfolgen, dann funktionieren auch SplashScreens.

Die Vorgehensweise ist dabei auch simpel:
  • SplashScreen-Form erzeugen
  • Initialisierungs-Thread starten
  • SplashScreen-Formular mit ShowModal anzeigen
Wenn der Thread seine Aufgabe erfüllt hat, dann schliesst der den SplashScreen und fertig.

himitsu 24. Apr 2015 13:57

AW: Keine Animation beim SplashScreen
 
TAnimate arbeitet vermutlich resourcenschonend, also quasi in soeiner Art im OnIdle-Mode und kommt dort beim Programmstart nicht vorbei. :grueble:
Mein TAnimate hat aber auch noch ein Timers-Property und wenn man den auf True setzt, dann wird mit einen internen Timer gearbeitet und schon geht es.
Delphi-Referenz durchsuchenTAnimate.Timers
SysAnimate32 / ANIMATE_CLASS > MSDN-Library durchsuchenACS_TIMER

PS: TShellResources > http://www.delphipraxis.net/136046-t...ter-vista.html


[edit]
Und ja, wenn du beim Programmstart nicht nur sinnlos Zeit verplemperst und eigentlich nichts machst, dann siehe Sir Rufo.

Popov 24. Apr 2015 14:11

AW: Keine Animation beim SplashScreen
 
@Sir Rufo

Ich will nicht behaupten, dass das falsch ist was du schreibst, aber wozu brauche ich dann ein SplasScreen?

Wenn ich zuerst das Fenster anzeige und dann im extra Thread Daten nachlade, dafür habe ich die Sanduhr die mir zeigt, dass in Hintergrund was passiert. Dafür brauche ich keinen SplasScreen.

Das SplasScreen funktioniert bei mir, das ist nicht das Problem, nur die Animation nicht. Die ist auch nicht wichtig, es interessiert mich nur warum. Ich werde doch nicht wegen eine kurzen Verzögerung die ich mit einem Info SplasScreen überbrücke gleich das ganze Programm umschreiben damit ich wegen 0,5 Sekunden Pilepale alles in einen extra Thread auslagere. Sorry, ich baue auch keine Brücke über die Straße, nur weil beim starken Regen sich das Wasser auf der Straße etwas sammelt. Ich bitte dich. Antworten auf Fragen sollten einen Sinn ergeben und nicht dazu dienen zu zeigen was man so alles weiß. Wenn ich eines Tages eine Programm wie PhotoShop schreibe wo ich einiges nachladen muss und es wirklich lange dauert, meinetwegen, dann mache ich es mit deinem Thred. Aber du hast mir gerade auf ein pilepale Problem eine overkill Lösung angeboten.

StringReplace dauert etwas lange, vorbereite es in einem separaten Thread. Trim dauert etwas lange, vorbereite es in einem separaten Thread. Die Zuweisung von 5 zu i dauert etwas lange, vorbereite es in einem separaten Thread. Also lass bitte die Kirche im Dorf.

himitsu 24. Apr 2015 14:19

AW: Keine Animation beim SplashScreen
 
Zitat:

Zitat von himitsu (Beitrag 1299145)
Und ja, wenn du beim Programmstart nicht nur sinnlos Zeit verplemperst und eigentlich nichts machst, dann siehe Sir Rufo.

Wenn das Programm dort was macht und keine/kaum Zeit zur Verfügung stellt, welche der Komponente die Möglichkeit gibt sich zu zeichnen (z.B. Messages verarbeiten), dann kann dort auch keine Animation ablaufen.

Lange Operation im Thread = HauptThread/GUIThread hat Zeit was zu machen, während auf das Ende des anderen Threads gewartet wird.

p80286 24. Apr 2015 14:43

AW: Keine Animation beim SplashScreen
 
Zitat:

Zitat von himitsu (Beitrag 1299152)
Wenn das Programm dort was macht und keine/kaum Zeit zur Verfügung stellt, welche der Komponente die Möglichkeit gibt sich zu zeichnen (z.B. Messages verarbeiten), dann kann dort auch keine Animation ablaufen.

das wird es wohl sein!

Zitat:

Zitat von Popov (Beitrag 1299149)
@Sir Rufo

Ich will nicht behaupten, dass das falsch ist was du schreibst, aber wozu brauche ich dann ein SplasScreen?

Wenn ich zuerst das Fenster anzeige und dann im extra Thread Daten nachlade, dafür habe ich die Sanduhr die mir zeigt, dass in Hintergrund was passiert. Dafür brauche ich keinen SplasScreen.

Ist denn der/das SplashScreen nichts anderes als eine SuperDuperLuxus-Sanduhr?
Von mir aus auch eine freundliche Begrüßung des Benutzers. Aber mir reicht so etwas:
Code:
   Programm Initialisierung
#1 lade Parameter
#2 prüfe Netzverbindungen
#3 

#99 Initialisierung abgeschlossen
(und trotzdem sind diese Lade-Orgien eine Zumutung!)

Gruß
K-H

Popov 25. Apr 2015 11:55

AW: Keine Animation beim SplashScreen
 
Zitat:

Zitat von himitsu (Beitrag 1299152)
Wenn das Programm dort was macht und keine/kaum Zeit zur Verfügung stellt, welche der Komponente die Möglichkeit gibt ...

Ich hab mir gerade TAnimate etwas angeguckt. Die Komponente wird in einem separatem Thread gestartet. Daran liegt es also nicht.

Smaraner 25. Apr 2015 13:56

AW: Keine Animation beim SplashScreen
 
Hallo,

ich hatte das Problem auch mal und folgendes hat geholfen: Füge unter uses noch
Delphi-Quellcode:
ShellAnimations;
ein, dann funktioniert es zu mindestens bei mir. :-D

Oder habe ich das jetzt falsch verstanden und es geht, aber nur verzögert?

Sebastian

Aviator 25. Apr 2015 13:59

AW: Keine Animation beim SplashScreen
 
Zitat:

Zitat von Popov (Beitrag 1299248)
Ich hab mir gerade TAnimate etwas angeguckt. Die Komponente wird in einem separatem Thread gestartet. Daran liegt es also nicht.

Die TAnimate Komponente startet vielleicht in einem eigenen Thread. Aber wenn das Hauptformular durch die ganzen Ladeaktionen keine Zeit bekommt um sich neu zu zeichnen, ja dann funktioniert auch trotz Thread die Animation nicht richtig. Vielleicht würde für eine einfache Lösung ein einfaches
Delphi-Quellcode:
Application.ProcessMessages;
reichen. Ist aber nur so eine Idee.

himitsu 25. Apr 2015 14:06

AW: Keine Animation beim SplashScreen
 
Zitat:

Zitat von Smaraner (Beitrag 1299258)
Oder habe ich das jetzt falsch verstanden und es geht, aber nur verzögert?

Beim späteren Aufruf geht es ... nur beim Start nicht.

Also besteht der Verdacht, daß dort jemand mit Delphi 7 in einem XP-System (oder älter) arbeitet, denn seit Vista fehlen im Windows diese Resourcen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:42 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