Entwickler-Ecke
Multimedia / Grafik - Splashscreen mit TImage
ploRa - Fr 10.06.05 06:42
Titel: Splashscreen mit TImage
Guten morgen allerseits,
wollt fragen ob ich ein Splashscreen etwas hinauszögern kann.
D.h. ich habe bevor beim Programm beginnt ein Splashscreen bis das Programm geladen ist.
Aber mein Programm läd so schnell. Deshalb wollt ich fragen ob man das manuell etwas herauszögern kann.
Hier ist der Code wie ich es gemacht habe bissher:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47:
| program memory;
uses Forms, Windows, Unit1 in 'Unit1.pas' , Unit2 in 'Unit2.pas' , Unit3 in 'Unit3.pas' , Unit4 in 'Unit4.pas' , Unit5 in 'Unit5.pas' , Unit6 in 'Unit6.pas' , Unit7 in 'Unit7.pas' , Unit8 in 'Unit8.pas' , Unit9 in 'Unit9.pas' , Unit10 in 'Unit10.pas' , Unit11 in 'C:\Programme\Borland\Delphi6\Projects\Unit11.pas' ;
{$R *.RES}
begin
SplashScreen := tSplashScreen.Create (Application);
try
SplashScreen.Show; SplashScreen.Update;
Application.Initialize; Application.CreateForm(TForm2, Form2); Application.CreateForm(TForm3, Form3); Application.CreateForm(TForm10, Form10); Application.CreateForm(TForm1, Form1); Application.CreateForm(TForm4, Form4); Application.CreateForm(TForm5, Form5); Application.CreateForm(TForm6, Form6); Application.CreateForm(TForm7, Form7); Application.CreateForm(TForm8, Form8); Application.CreateForm(TForm9, Form9); Application.CreateForm(TSplashScreen, SplashScreen); SplashScreen.Hide;
Finally SplashScreen.Free; end; Application.Run; end. |
Moderiert von
raziel: Code- durch Delphi-Tags ersetzt.
Torti - Fr 10.06.05 07:49
Hi !
Ohne das es jetzt der weisheit letzter Schluss ist...
Wie wäre es mit einem sleep in einer der Forms (bei Create).
Gruß
Torti
Delete - Fr 10.06.05 17:33
Hi Ich habe das so gemacht:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14:
| begin Application.Initialize; SplashForm := TSplashForm.Create(Application); SplashForm.Show; SplashForm.Update;
Application.CreateForm(TForm1, Form1); Application.CreateForm(TForm2, Form2); Application.CreateForm(TForm3, Form3);
SplashForm.Hide; SplashForm.Free; Application.Run; end. |
Und das funzt perfekt!
André
alzaimar - Fr 10.06.05 17:39
@MagicAndre1981: Natürlich geht das, aber die Frage war, wie man das hinauszögern kann.
Dein Programm läuft erst, wenn das Hauptformular sichtbar ist.
Im OnShow des Hauptformulars startest Du einen Timer, der nach einiger Zeit den Splash beendet (wobei das nervt, wenn man es mal eilig hat). Oder du killst den Spalsh direkt im OnShow. Oder mit einem Timer oder wenn die Maus bewegt wird. Oder Oder Oder.
Delete - Fr 10.06.05 17:51
alzaimar hat folgendes geschrieben: |
@MagicAndre1981: Natürlich geht das, aber die Frage war, wie man das hinauszögern kann.
Dein Programm läuft erst, wenn das Hauptformular sichtbar ist.
Im OnShow des Hauptformulars startest Du einen Timer, der nach einiger Zeit den Splash beendet (wobei das nervt, wenn man es mal eilig hat). Oder du killst den Spalsh direkt im OnShow. Oder mit einem Timer oder wenn die Maus bewegt wird. Oder Oder Oder. |
Schau dir mal an, wo
ploRa den SplashScreen erzeugt?
Als letztes und das kann nicht gut gehen, d.h. die Form ist nur kurz zu sehen. Deshalb an den Anfang, so wie ich es mache. Wenn
ploRa viele Forms erstellt bleibt der SplashScreen lange zu sehen, wenn weniger dann sieht man ihn kürzer.
André
alzaimar - Fr 10.06.05 18:14
Nö. Die erste Zeile in seinem Code ist...
Delphi-Quelltext
1: 2: 3: 4: 5: 6:
| Begin SplashScreen := tSplashScreen.Create (Application); try SplashScreen.Show; SplashScreen.Update; .... |
Das er das unten nochmal macht, ist ein faux pas, aber hier unereheblich. Er wird sich vermutlich nur wundern, warum das Programm ab und an beim Programmende eine n RTE 216 ausspuckt (oder sowas in der Art). Denn der SplashScreen wird erst vor dem Application.Run freigegeben, und dann nochmal beim Application.Terminate...
Delete - Fr 10.06.05 18:26
alzaimar hat folgendes geschrieben: |
Nö. Die erste Zeile in seinem Code ist...
Delphi-Quelltext 1: 2: 3: 4: 5: 6:
| Begin SplashScreen := tSplashScreen.Create (Application); try SplashScreen.Show; SplashScreen.Update; .... |
Das er das unten nochmal macht, ist ein faux pas, aber hier unereheblich. Er wird sich vermutlich nur wundern, warum das Programm ab und an beim Programmende eine n RTE 216 ausspuckt (oder sowas in der Art). Denn der SplashScreen wird erst vor dem Application.Run freigegeben, und dann nochmal beim Application.Terminate... |
:oops: Hab gar nicht gesehen, wo er den Scren erzeugt und anzeigt :oops:.
Aya - Fr 10.06.05 20:17
Hi,
pack einfach noch nen Sleep rein.. ist die beste methode dafür denke ich. (aber nicht zu lange machen.. 250ms oder so ok, aber jeder Splasscreen der 5min stehen bleibt is nervig ;) )
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8:
| [...] Application.CreateForm(TForm9, Form9); Application.CreateForm(TSplashScreen, SplashScreen); Sleep(250); SplashScreen.Hide; Finally SplashScreen.Free; [...] |
Au'revoir,
Aya~
delfiphan - Fr 10.06.05 20:55
Das "Problem" bei Sleep ist, dass dein Programm während dieser Zeit nicht reagiert. Wie wär's mit einem Splashscreen, der einfach noch 2-3 Sekunden länger sichtbar bleibt, auch wenn das eigentliche Programm/Form (im Hintergrund) schon sichtbar ist? Du setzt einfach das FormStyle des Splashscreens auf fsStayOnTop. Ein Timer sorgt dann dafür, dass dieser nach einer gewissen Zeit automatisch verschwindet.
alzaimar - Fr 10.06.05 21:03
Hab ich auch schon bemängelt und den Timer vorgeschlagen (weiter oben), aber die Leute hörn ja nicht.
Aya - Fr 10.06.05 21:06
Ehm... was soll das Programm denn machen während es wartet....???
Sleep hält halt alles an, aber ich denke mal das war doch auch gewollt, oder???
delfiphan - Fr 10.06.05 21:19
Das Programm macht während dieser Zeit nichts... Wartet auf Input. Jedenfalls reagiert es und du kannst das Ding verschieben, minimieren, maximieren, usw.. Während einem Sleep macht das Programm auch nichts, jedoch reagiert es dann auch nicht auf irgendwelche Befehle.
Für Leute, die es eilig haben: Kannst ja zusätzlich zum Timer noch auf Mausklicks/Tastatur reagieren. (Das alles kannst du während einem Sleep nicht)
Aya - Fr 10.06.05 21:29
Hi,
na ja, ich hab nochnie einen Splashscreen gesehen den man maximieren/minimieren oder gar verschieben kann ;)
Das einzige wo ich dir recht gebe is sowas vonwegen das man den SplashScreen via klick auf diesen vorzeitig beendet.. allerdings meinte ich deswegen ja "250ms" reichen vollkommen aus. Wenn der Screen als ein 2sek standbild geplant ist würde ich auch eher etwas empfehlen wo man ihn frühzeitig abbrechen kann (sprich Timer o.Ä.).
Au'revoir,
Aya~
alzaimar - Fr 10.06.05 22:17
@aya: Dann nimm doch sleep. Aber in 250ms (oder auch 500ms) kann ich beim besten Willen den Autor, die Versionsnummer und die ganzen Copyrightinformationen nicht erkennen, also was soll das dann.
Das Programm startet, der Splash geht auf, die Initialisierungsschritte werden per Progressbar oder textuell angezeigt. Dann ist das Programm 'ready to use'. Wenn jetzt keiner mit dem Teil arbeitet, dann bleibt der splash-screen noch einige Zeit stehen. Bewegt man die Maus, blendet sich der Splash elegant per Alphablend aus. Und wenn man einfach dieses absolut geile Splash anschauen will, fein. Nach ein paar Sekunden blendet sich das Teil auch dezent aus. Da benötigt man kein sleep. Im Gegenteil.
Softchaos67 - Mo 27.06.05 13:01
| Zitat: |
Das Programm startet, der Splash geht auf, die Initialisierungsschritte werden per Progressbar oder textuell angezeigt. Dann ist das Programm 'ready to use'. Wenn jetzt keiner mit dem Teil arbeitet, dann bleibt der splash-screen noch einige Zeit stehen. Bewegt man die Maus, blendet sich der Splash elegant per Alphablend aus. Und wenn man einfach dieses absolut geile Splash anschauen will, fein. Nach ein paar Sekunden blendet sich das Teil auch dezent aus. Da benötigt man kein sleep. Im Gegenteil. |
Und wie hast du das gemacht??
Ich versuche das auch gerade, aber die Progressbar wird nicht aktualisiert. Ich versuche das mit einer Timerkomponente.
Ich will erreichen, das das gestartete Formular sich im Hintergrund lädt. Das kann bei manchen Forms etwas länger dauern.
Gruss
Matthias
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!