Autor Beitrag
Fabian
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 42



BeitragVerfasst: Mi 25.09.02 17:54 
Hallo

In Visual Basic gibt es die Möglichkeit ein sogenanntes Splashscreen (ein Bild das während das Programm geladen wird eingeblendet wird) einzublenden. Ist sowas auch in Delphi möglich und wenn ja wie ?

Danke
DeCodeGuru
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 1333
Erhaltene Danke: 1

Arch Linux
Eclipse
BeitragVerfasst: Mi 25.09.02 18:52 
Man kann zum Beispiel eine Form hinzufügen und dann Borderstyle auf bsNone setzen. Dann kannste ja aufs Canvas deine Grafik zeichnen bzw. ein Image raufhauen und darin die Grafik laden. Wenn dein Programm fertig geladen wurde, schließt du den Splahscreen einfach wieder. :wink:

_________________
Viele Grüße
Jakob
ao
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 145

Win XP Prof.
D7 Ent.
BeitragVerfasst: Mi 25.09.02 19:13 
Hi Fabian,

so kannst du einen SplashScreen während des Programmstarts anzeigen:

ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
begin
  Application.Initialize;
  Application.Title := 'MyApp';  
  FSplashForm := TFSplashForm.Create(Application);
  FSplashForm.Show;
  FSplashForm.Update;
  Application.CreateForm(TFForm1, FForm1);
  Application.CreateForm(TFForm2, FForm2);
  Application.CreateForm(TFForm3, FForm3);
  FSplashForm.Hide;
  FSplashForm.Free;
  Application.Run;
end.


der Code muss in die dpr-Datei deines Projekts.

Gruß
Andreas
MathiasSimmack
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Do 26.09.02 06:48 
ao hat folgendes geschrieben:
so kannst du einen SplashScreen während des Programmstarts anzeigen:
ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
begin
  Application.Initialize;
  Application.Title := 'MyApp';  
  FSplashForm := TFSplashForm.Create(Application);
  FSplashForm.Show;
  FSplashForm.Update;
  Application.CreateForm(TFForm1, FForm1);
  Application.CreateForm(TFForm2, FForm2);
  Application.CreateForm(TFForm3, FForm3);
  FSplashForm.Hide;
  FSplashForm.Free;
  Application.Run;
end.

Von try-finally hast du noch nichts gehört? :? Und das "FSplashForm.Hide" ist auch blödsinnig, da es danach ohnehin verschwindet?
Außerdem vermisse ich den Hinweis, dass dieses Formular natürlich nicht zusätzlich so
ausblenden Quelltext
1:
Application.CreateForm(TFSplashForm, FSplashForm);					

erzeugt werden darf. Den Fehler hast du zwar nicht gemacht, aber du hast auch nicht gesagt, dass man das Splash-Formular aus der Liste der automatisch erzeugten Formulare herausnehmen muss!

Die andere Variante, die auch so im EDH oder zumindest irgendwo bei den Entwicklern des EDH zu finden ist:
ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
begin
  Application.Initialize;
  Application.Title := 'MyApp';  
  with TFSplashForm.Create(nil) do
    try
      Show;
      Update;

      Application.CreateForm(...);
      { ... }
    finally
      Free;
    end;
  Application.Run;
end.
wwerner
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 185



BeitragVerfasst: Do 26.09.02 07:42 
MathiasSimmack hat folgendes geschrieben:

Außerdem vermisse ich den Hinweis, dass dieses Formular natürlich nicht zusätzlich so
ausblenden Quelltext
1:
Application.CreateForm(TFSplashForm, FSplashForm);					

erzeugt werden darf. Den Fehler hast du zwar nicht gemacht, aber du hast auch nicht gesagt, dass man das Splash-Formular aus der Liste der automatisch erzeugten Formulare herausnehmen muss!


Falls du es noch nicht gemerkt hast, die Liste er automatisch generierten Forms wird dynamisch aus der DPR-Datei erstellt!

MathiasSimmack hat folgendes geschrieben:

Die andere Variante, die auch so im EDH oder zumindest irgendwo bei den Entwicklern des EDH zu finden ist:
ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
begin
  Application.Initialize;
  Application.Title := 'MyApp';  
  with TFSplashForm.Create(nil) do
    try
      Show;
      Update;

      Application.CreateForm(...);
      { ... }
    finally
      Free;
    end;
  Application.Run;
end.


Was ist daran anders, außer dem Try finaly Block?

_________________
Gruß

Wolfgang

----------
zu hause ist es doch am schönsten
MathiasSimmack
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Do 26.09.02 07:47 
wwerner hat folgendes geschrieben:
Falls du es noch nicht gemerkt hast, die Liste er automatisch generierten Forms wird dynamisch aus der DPR-Datei erstellt!

Ach? Wirklich? :roll: Das ist ja was ganz neues ... Nur wo soll der Sinn liegen, den Splash-Screen trotzdem erzeugen zu lassen und dann durch das ganze Programm mitzuschleppen, wenn man ihn nur beim Start braucht?

Bleiben wir doch mal beim Weg, den Andreas oben beschrieben hat, und lassen wir das Splash-Formular auch mal erzeugen:

ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
  Application.Initialize;
  Application.Title := 'MyApp'; 
  FSplashForm := TFSplashForm.Create(Application);
  FSplashForm.Show;
  FSplashForm.Update;
  Application.CreateForm(TFForm1, FForm1);
  Application.CreateForm(TFForm2, FForm2);
  Application.CreateForm(TFForm3, FForm3);

// -->
  Application.CreateForm(TFSplashForm,FSplashForm);
// <--

  FSplashForm.Hide;
  FSplashForm.Free;
  Application.Run;

Was passiert? :shock: Nichts! Aber dann lass mal irgendwo in einem der anderen Formulare einen Aufruf des Splash-Screens stehen.

Zitat:
Was ist daran anders, außer dem Try finaly Block?

Ich präzisiere: die bessere und richtige Variante.
MathiasSimmack
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Do 26.09.02 08:29 
Mensch, jetzt habe ich mich wohl ein bisschen verrannt. :oops: Man sollte eben nicht telefonieren und gleichzeitig versuchen, produktive Antworten im Forum zu geben. Ich lasse mein letztes Posting mal als Beweis des Unsinns, den auch ich reden kann, zurück. :cry: :D

Also, noch mal -
Es passiert gar nichts, wenn man das Formular sowohl manuell als auch automatisch erzeugen lässt. Aber -wie gesagt- viel Sinn macht´s doch nicht, wenn du es so
ausblenden Quelltext
1:
Application.CreateForm(TFSplashForm,FSplashForm);					

erzeugst, und hier
ausblenden Quelltext
1:
FSplashForm.Free;					

wieder freigibst.

Und try-finally-end ist generell bei solchen Aktionen, wo etwas erzeugt und freigegeben wird (werden muss) vorzuziehen, wenn es auch normalerweise so vorgesehen ist.
Ich denke mal nur an die ganzen Negativbeispiele bezüglich Registry und INI, in denen auch mit der Fehlertoleranz gespielt und auf try-finally-end verzichtet wird.

So, jetzt muss ich aber weiter telefonieren.

Gruß,
Mathias.
ao
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 145

Win XP Prof.
D7 Ent.
BeitragVerfasst: Do 26.09.02 09:30 
Hallo!

Also, drei Sachen:

1. über "try...except" bzw. "try...finally" lässt sich hier wirklich streiten ... :wink:
2. das "hide" musste ich damals mal in einem meiner Programme einbauen, weil sich der SplashScreen nach einem "free" nicht wirklich verabschieden wollte ... und schaden tuts ja auch nicht ...
3. meine Version behindert Delphi nicht beim automatischen Einfügen neuer Formulare.

Gruß
Andreas