Autor Beitrag
ploRa
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 59

Win XP
Delphi 6
BeitragVerfasst: Fr 10.06.05 06:42 
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:

ausblenden volle Höhe 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' {Form1},
  Unit2 in 'Unit2.pas' {Form2},
  Unit3 in 'Unit3.pas' {Form3},
  Unit4 in 'Unit4.pas' {Form4},
  Unit5 in 'Unit5.pas' {Form5},
  Unit6 in 'Unit6.pas' {Form6},
  Unit7 in 'Unit7.pas' {Form7},
  Unit8 in 'Unit8.pas' {Form8},
  Unit9 in 'Unit9.pas' {Form9},
  Unit10 in 'Unit10.pas' {Form10},
  Unit11 in 'C:\Programme\Borland\Delphi6\Projects\Unit11.pas' {SplashScreen};

{$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 user profile iconraziel: Code- durch Delphi-Tags ersetzt.
Torti
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 17

WinXP
D7 Prof
BeitragVerfasst: 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
MagicAndre1981
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Fr 10.06.05 17:33 
Hi Ich habe das so gemacht:

ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2889
Erhaltene Danke: 13

W2000, XP
D6E, BDS2006A, DevExpress
BeitragVerfasst: 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.
MagicAndre1981
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Fr 10.06.05 17:51 
user profile iconalzaimar 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 user profile iconploRa 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 user profile iconploRa viele Forms erstellt bleibt der SplashScreen lange zu sehen, wenn weniger dann sieht man ihn kürzer.

André
alzaimar
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2889
Erhaltene Danke: 13

W2000, XP
D6E, BDS2006A, DevExpress
BeitragVerfasst: Fr 10.06.05 18:14 
Nö. Die erste Zeile in seinem Code ist...
ausblenden 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...
MagicAndre1981
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Fr 10.06.05 18:26 
user profile iconalzaimar hat folgendes geschrieben:
Nö. Die erste Zeile in seinem Code ist...
ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1964
Erhaltene Danke: 15

MacOSX 10.6.7
Xcode / C++
BeitragVerfasst: 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 ;) )

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
[...]
  Application.CreateForm(TForm9, Form9);
  Application.CreateForm(TSplashScreen, SplashScreen);
  Sleep(250); //Hier das Sleep..!
  SplashScreen.Hide;
  Finally
    SplashScreen.Free;
[...]


Au'revoir,
Aya~

_________________
Aya
I aim for my endless dreams and I know they will come true!
delfiphan
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2684
Erhaltene Danke: 32



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2889
Erhaltene Danke: 13

W2000, XP
D6E, BDS2006A, DevExpress
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1964
Erhaltene Danke: 15

MacOSX 10.6.7
Xcode / C++
BeitragVerfasst: 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???

_________________
Aya
I aim for my endless dreams and I know they will come true!


Zuletzt bearbeitet von Aya am Fr 10.06.05 21:27, insgesamt 1-mal bearbeitet
delfiphan
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2684
Erhaltene Danke: 32



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1964
Erhaltene Danke: 15

MacOSX 10.6.7
Xcode / C++
BeitragVerfasst: 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~

_________________
Aya
I aim for my endless dreams and I know they will come true!
alzaimar
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2889
Erhaltene Danke: 13

W2000, XP
D6E, BDS2006A, DevExpress
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 103

XP Prof
Delphi 7
BeitragVerfasst: 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

_________________
cum grano salis