Delphi-PRAXiS
Seite 2 von 3     12 3      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Tutorials und Kurse (https://www.delphipraxis.net/36-tutorials-und-kurse/)
-   -   Delphi Tutorial: Splash Screens (https://www.delphipraxis.net/8637-tutorial-splash-screens.html)

ArmyMan 4. Aug 2004 11:58

Re: Tutorial: Splash Screens
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hi

bei mir funktioniert der Splash screen nicht. :'(

Weiss nicht was ich falsch gemacht habe. Kann mir jemand helfen bitte!

Thx ArmyMan

ArmyMan 4. Aug 2004 12:04

Re: Tutorial: Splash Screens
 
Alles klar!

Hab meinen doofen fehler gefunden :wall:

ArmyMan

sakura 4. Aug 2004 12:20

Re: Tutorial: Splash Screens
 
Zitat:

Zitat von ArmyMan
Hab meinen doofen fehler gefunden :wall:

Der da war? Vielleicht hilft Deine Lsung auch wem andrs ;)

...:cat:...

APP 4. Aug 2004 12:44

Re: Tutorial: Splash Screens
 
Hallo,

ich benutzte diese tolle Tutorial auch als Grundlage für meinen Splash-Screen,
ich habe noch einen kleinen Vorschlag dazu:

Code:
begin
  frmSplash := TfrmSplash.Create(Application);
  try
[b]   frmSplash.InitializationDone := False; [/b]
    frmSplash.Show;
    frmSplash.Refresh;
    Application.Initialize;
    Application.CreateForm(TfrmMain, frmMain);
    // (1)
    // weitere Formulare und Datenmodule hier her verschieben (siehe 2)
  finally
    frmSplash.InitializationDone := True;
  end;
  // (2)
  // Standardmäßig erstellte Formulare wird Delphi hier eintragen
  // nach (1) verschieben !!! 
  Application.Run;
end.
Damit wird der Cursor zum Stundenglas und der Start-Button disabled.

DymonD 23. Jan 2005 12:54

Re: Tutorial: Splash Screens
 
Hi Sakura,
Also mit anderen Worten wird ein Form einfach nur angezeigt, bevor die Anwendung initialisiert wurde?

und @ canada:
Geiles Design!! Will das auch!! :-D

Kernel32.DLL 23. Jan 2005 12:58

Re: Tutorial: Splash Screens
 
Zitat:

Zitat von DymonD
Hi Sakura,
Also mit anderen Worten wird ein Form einfach nur angezeigt, bevor die Anwendung initialisiert wurde?

Eigentlich nicht bevor, sondern während die übrigen Formulare geladen werden.

DymonD 24. Jan 2005 21:12

Re: Tutorial: Splash Screens
 
:wiejetzt:
Verständnisfrage:
das bedeutet doch, ich kann auch so etwas machen:
Delphi-Quellcode:
begin
  frmSplash := TfrmSplash.Create(Application);
  frmSplash.Show;
  frmSplash.Refresh;
  Application.Initialize;
  Application.CreateForm(TfrmMain, frmMain);
  Application.Run;
  frmSplash.Close;
end.
(also ich meine wenn ich das erstmal ohne Timer mache)

Ich will halt nicht nur abschreiben, sondern auch nachvollziehen :-D

Robert_G 24. Jan 2005 21:37

Re: Tutorial: Splash Screens
 
Sagt mal Mädels...
Müsst ihr denn Miezes Tutorial so zumüllen?
Wenn ihr Fragen, Sorgen, Ängste,... habt könnt ihr doch in der DP in der passenden Sparte einen Thread aufmachen.
Dieses Tutorial-spamming ist zum Beispiel der Hauptgrnd dafür, dass ich noch keines verfasst habe.
(Und es auch nicht tun werde solange es hier Gang & Gebe ist Tutorials mit Fragen zuzumüllen. :? )

MagicAndre1981 24. Jan 2005 21:38

Re: Tutorial: Splash Screens
 
Hi,

ich habe es so gemacht:

Delphi-Quellcode:
  SplashForm := TSplashForm.Create(Application);
  SplashForm.Show;
  SplashForm.Update;
  Application.Title := 'SBNBUCH 2004';
  Application.CreateForm(TSBN_Buch, SBN_Buch);
  Application.CreateForm(TDataModule_SBNBUCH, DataModule_SBNBUCH);
  .
  .
  .
  .
  SplashForm.Hide;
  SplashForm.Free;
  Application.Run;
Gruß

[Edit: Hi Robert_G. das war nicht meine Absicht ]

Kernel32.DLL 24. Jan 2005 21:43

Re: Tutorial: Splash Screens
 
@DymonD

Jepp, so in etwa...

In der Delphi 5 Hilfe steht:
Delphi-Quellcode:
begin
  Application.Initialize;
  with TForm5.Create(nil) do
  try
    ProgressBar1.Max := 100;
    Show;  // Startbildschirm mit ProgressBar anzeigen
    Update; // Anzeige von Form5 auslösen
    Application.CreateForm(TForm1, Form1);
    ProgressBar1.StepBy(25);
    Application.CreateForm(TForm2, Form2);
    ProgressBar1.StepBy(25);
    Application.CreateForm(TForm3, Form3);
    ProgressBar1.StepBy(25);
    Application.CreateForm(TForm4, Form4);

    ProgressBar1.StepBy(25);
  finally
    Free;
  end;
  Application.Run;
end.


[Edit]Ups, Robert's Wutanfall zu spät gesehen...[/Edit]

DymonD 24. Jan 2005 21:47

Re: Tutorial: Splash Screens
 
Oki THX!!
und @ Robert_G: ich denke mal, dass man das nicht Zuspammen nennen darf. Ich finde, dass es gerade passend ist, wenn zu einem Tutorial Fragen gestellt werden, sie auch in diesem Thread geschriben werden, anstatt immer ein neues Thread zu öffnen. Dann kann 1.) der Author schneller antworten und 2.) bezieht es sich ja irgendwie auf das Tutorial.

Robert_G 24. Jan 2005 21:49

Re: Tutorial: Splash Screens
 
ich verweise mal auf einen eigenen Post. ;) (Ich tippe ungern Dinge doppelt)
http://www.delphipraxis.net/internal...=192505#192505

DymonD 24. Jan 2005 21:52

Re: Tutorial: Splash Screens
 
Naja... ich finde aber dennoch, solange das Fragen zum Tutorial sind, ist es schon legitim, sie in den Thread zu schreiben. Ansonsten gäbe es den Tutorial doch nur zum Herunterladen, oder?

freak4fun 23. Feb 2005 14:40

Re: Tutorial: Splash Screens
 
Hallo und danke,
vielleicht schreibst du noch hin, wo man den Projektcode findet. Ich musste erst suchen. :roll:

Projekt - Quelltext anzeigen

MfG
freak

Jarmen_Kell 20. Mär 2005 18:20

Re: Tutorial: Splash Screens
 
Hmm, ja wirklich praktisch.
Ich brauches zwar an sich nicht ( objektiv ) aber es sieht natürlich verdammt wichtig aus!

Jetzt nur mal 2 Probleme:
1.:
Wenn das Prog gestartet ist, kann man auf dem Splash-Screnn leider nichts machen.
Also was ich damit meine: Es wäre ja praktisch, wenn man da zum Beispiel ein Label einfügt, das bei OnClick die ShellExecute meiner HP macht. Dies geht aber aufgrund der CPU-Usage nicht wirklich.
( Eieruhr immer sichtbar )

Und: wenn das Hauptform schon sichtbar ist, dauert es immer noch etwas, bis der Splash-Screnn verschwindet.
Das ist auch teilweise etwas störend.

Das zweite ist natürlich nicht so fatal, sondern nur ein Schönheitsfehler, aber das erste finde ich wirklich misslich.

Matze 20. Mär 2005 18:24

Re: Tutorial: Splash Screens
 
Zitat:

Zitat von Jarmen_Kell
Eieruhr immer sichtbar

Delphi-Quellcode:
btnStart.Cursor := crHourGlass;
Darum ist sie sichtbar, nicht wegen der Auslastung. ;)

Alexander 20. Mär 2005 18:25

Re: Tutorial: Splash Screens
 
Zum zweiten:
Zitat:

Zitat von sakura
Wann kann der Splash Screen nun wirklich geschlossen werden? Eigentlich doch nur dann, wenn die Anwendung geladen wurde und wenn die drei Sekunden abgelaufen sind.

Ist also gewollt und meiner Meinung auch gut so ;). Aber du kannst ja die Timer-Zeit verändern.

Zum ersten: Das liegt wohl an dem Sleep. Aber ich habe jetzt den Source nicht mehr im Kopf. Aber an sich sollte nichts dagegen sprechen, dass zu machen.

Jarmen_Kell 20. Mär 2005 20:25

Re: Tutorial: Splash Screens
 
nein, ich hab die eieruhr nie eingestellt!
das habe ich weggelassen, eben damit man auf den einen Link klicken kann, und damit das dann auch noch gut aussieht


Nachtrag:

Hat irgendwas mit dem "Sleep" zu tun.
Währenddessen kann man scheinbar auch auf anderen Forms nix anderes machen?!?

Alexander 20. Mär 2005 21:12

Re: Tutorial: Splash Screens
 
Jupp, sage ich ja... Sleep pausiert die ganze Anwendung.

MaBuSE 28. Jul 2005 16:18

Re: Tutorial: Splash Screens
 
Im Forum gab es die Frage zu einem Spash Screen mit Alpha Blending.

Ich habe mal auf die schnelle ein kleines Beispiel gebastelt.

http://www.delphipraxis.net/internal...=404732#404732

Das Beispiel ist ein Minimalbeispiel für einen Splashscreen.
Es ging mir nur darum das Ein- und Ausblenden eines Forms zu demostrieren.

Viel Spaß

freq.9 31. Okt 2005 13:04

Re: Tutorial: Splash Screens
 
Ich habe nun nicht alle "Lösungen" durchgesehen aber gibt es hier irgendwo eine "richtige" Lösung eines Splash-Screens, der sich erst dann selbst schliesst, wenn die Anwendung komplett geladen ist?

Matze 31. Okt 2005 13:31

Re: Tutorial: Splash Screens
 
Hi, evtl. hilft dir das hier weiter.

Nils_13 23. Dez 2005 13:24

Re: Tutorial: Splash Screens
 
Liste der Anhänge anzeigen (Anzahl: 1)
So nun noch mein senf: Genial :thumb: ! Der Timer kann auch auf 0 stehen und es läuft.

Wenn ich die Anwendung beenden kommt ein Fehler (siehe Screenshot).

SubWorx 12. Jan 2006 13:34

Re: Tutorial: Splash Screens
 
Zitat:

Zitat von sakura
Jetzt wird die Anwedung gestartet und sämtliche Formulare und Datenmodule geladen. Abschließend setzen wir die Eigenschaft frmSplash.InitializationDone auf True und überlassen die Anwendung dem Benutzer.

Delphi-Quellcode:
begin
  frmSplash := TfrmSplash.Create(Application);
  try
    frmSplash.Show;
    frmSplash.Refresh;
    Application.Initialize;
    Application.CreateForm(TfrmMain, frmMain);
    // (1)
    // weitere Formulare und Datenmodule hier her verschieben (siehe 2)
  finally
    frmSplash.InitializationDone := True;
  end;
  // (2)
  // Standardmäßig erstellte Formulare wird Delphi hier eintragen
  // nach (1) verschieben !!!
  Application.Run;
end.

und wo soll dieser kram hin?
in die TfrmMain.FormCreate? oder wo? steht ja ausser einem begin..end. nix dabei

gruß
Sub

Khabarakh 12. Jan 2006 13:40

Re: Tutorial: Splash Screens
 
Zitat:

Zitat von SubWorx
steht ja ausser einem begin..end. nix dabei

Und damit sollte doch klar sein, wo der Code hingehört :wink: . In Pascal gibt es nur eine Stelle mit begin/end. im gesamten Quellcode.

Projekt -> Quelltext anzeigen

dfried 12. Jan 2006 13:43

Re: Tutorial: Splash Screens
 
Na in die Projektdatei (dpr) natürlich!
Wenn du dir den QQuelltext mal genauer anschaust siehst du dort, dass das abschliessende "end" einen "." hat und kein ";" und auch dass das FrmMain erst hier erzeugt wird (Application.CreateForm(TfrmMain, frmMain)!

MaBuSE 12. Jan 2006 13:52

Re: Tutorial: Splash Screens
 
Zitat:

Zitat von Khabarakh
Zitat:

Zitat von SubWorx
steht ja ausser einem begin..end. nix dabei

Und damit sollte doch klar sein, wo der Code hingehört :wink: . In Pascal gibt es nur eine Stelle mit begin/end. im gesamten Quellcode.

In diesem Fall ist es das Projekt File (*.dpr), aber die Aussage, dass es nur eine Stelle in einem Pascal Projekt gibt in dem begin...end. vorkommt ist schlichtweg falsch.

In jeder Unit kann begin...end. stehen.

Das end. signalisiert nur das Dateiende.

Delphi-Quellcode:
unit Unit2.pas;
uses
  Dialogs,
...
begin
  MessageShow('Huch');
end.
Funktioniert sehr wohl in diesem Beispiel ist es gleichbedeutend mit:
Delphi-Quellcode:
unit Unit2.pas;
uses
  Dialogs,
...
initialization
  MessageShow('Huch');
end.
In Turbo Pascal 3.0 gab es z.B. das initialization noch nicht, damals wurde begin verwendet (und das funktioniert immer noch).
Mit dem finalization wurde dann auch das initialization benötigt, da der Compiler ja irgendwie erkennen muß welchen Code er beim Programmende ausführen muß.

SubWorx 13. Jan 2006 07:59

Re: Tutorial: Splash Screens
 
Ahhhhhh jetzt klappts auch mal :)

Vielen Dank euch allen.

Falls meine Frage unfreundlich klang, möchte ich mich natürlich dafür entschuldigen.

Abgesehen von meinem Verständnisproblem ist das Tutorial gut ... war genau das was ich brauchte für eine neue Anwendung :)

Danke an Daniel dafür.

bis denne
Sub

xZise 8. Jul 2006 18:59

Re: Tutorial: Splash Screens
 
Sry, aber ich muss einfach fragen:
Wie schaffe ich es, dass erst nachdem der Splash geschlossen wird, das andere Fenster sichbar wird?

Nils_13 8. Jul 2006 19:03

Re: Tutorial: Splash Screens
 
Hm ? Das ist doch normalerweise automatisch so. Bei mir läuft der obige Code perfekt --> Das Fenster wird erst sichtbar, wenn der Splash Screen weg ist.

xZise 8. Jul 2006 19:06

Re: Tutorial: Splash Screens
 
Seltsam...

Ich habe folgenden Code:
Delphi-Quellcode:
begin
  FSplash := TFSplash.Create(Application);
  try
    FSplash.Show;
    FSplash.Refresh;
    Application.Initialize;
    Application.Title := 'TrackMania IPC';
    Application.CreateForm(TFForm, FForm);
    Application.CreateForm(TForm1, Form1);
  finally
    FSplash.InitializationDone := True;
  end;
  Application.Run;
  FForm.Visible := false;
end.
Splash:
Delphi-Quellcode:
procedure TFSplash.Show;
var i : Integer;
begin
  inherited;
  for i := 0 to 255 do begin
    AlphaBlendValue := i;
    Application.ProcessMessages;
    Sleep(2);
  end;


end;

procedure TFSplash.FormClose(Sender: TObject; var Action: TCloseAction);
var i : Integer;
begin
  for i := 255 downto 0 do begin
    AlphaBlendValue := i;
    Application.ProcessMessages;
    Sleep(2);
  end;
  Action := caFree;
  UIPC.FForm.Enabled := true;
  FSplash := nil;
end;

procedure TFSplash.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
  CanClose := (not Timer.Enabled) and FInitializationDone;
end;

procedure TFSplash.SetInitializationDone(const Value: Boolean);
begin
  FInitializationDone := Value;
  Close;
end;

procedure TFSplash.TimerTimer(Sender: TObject);
begin
  Timer.Enabled := False;
  Close;
end;

end.
Ich habe außer dort beim Fade KEIN Sleep.

moelski 17. Okt 2006 10:03

Re: Tutorial: Splash Screens
 
Moin Jungs !

Wollte nur mal eben sagen ...
Vielen Dank für diesen Fred! Hat mich sehr geholft :hello:

:witch:

Svenkan 2. Mai 2007 14:47

Re: Tutorial: Splash Screens
 
Ach sorry!
Vergesst den Post!
Hab übersehn, dass der Splash noch im Hintergrund offen ist!
Kann man das nicht so ändern, dass das Main-Window hinter dem Splash erscheint?

sakura 2. Mai 2007 14:51

Re: Tutorial: Splash Screens
 
Zitat:

Zitat von Svenkan
Kann man das nicht so ändern, dass das Main-Window hinter dem Splash erscheint?

Du musst im Splash den FormStyle auf fsStayOnTop (o.ä.) setzen.

...:cat:...

Matze 2. Mai 2007 14:53

Re: Tutorial: Splash Screens
 
Zitat:

Zitat von Svenkan
Kann man das nicht so ändern, dass das Main-Window hinter dem Splash erscheint?

Stelle einfach FormStyle auf fsStayOnTop, doch das steht hier im Thema irgendwo bereits.

Edit: Da war ich wohl zu langsam ...

Svenkan 2. Mai 2007 14:55

Re: Tutorial: Splash Screens
 
Dankeschön!
Jetzt kommt mir nur grad eins etwas seltsam vor....
Ich kann den SplashScreen nicht schließen. oO
Weder über das 'X', noch über nen Close-Button. oO
Es passiert einfach nix, wenn ich draufklicke...
Und autom. tut sich auch nix.
Der OnClose-Befehl wird ausgeführt, hab ich grad mal gemerkt.
Es wird einfach nix geclosed.

Hier mal noch der Code des Splash-Forms:

Delphi-Quellcode:
unit Unit4;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ExtCtrls, StdCtrls, jpeg;

type
  TSplash = class(TForm)
    Timer1: TTimer;
    Image1: TImage;
    Label1: TLabel;
    Button1: TButton;
    procedure Timer1Timer(Sender: TObject);
    procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure Button1Click(Sender: TObject);

  private
    { Private declarations } 
    FInitializationDone: Boolean;
    procedure SetInitializationDone(const Value: Boolean);
  public
    { Public declarations } 
    property InitializationDone: Boolean read FInitializationDone write SetInitializationDone;
  end;


var
  Splash: TSplash;

implementation

uses Unit1;

{$R *.dfm}

procedure TSplash.Timer1Timer(Sender: TObject);
begin
  Timer1.Enabled := False;
  close;
end;

procedure TSplash.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
 CanClose := (not Timer1.Enabled) and FInitializationDone;
end;

procedure TSplash.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  Action := caFree;
  Splash := nil;
  Form1.Enabled := True;
end;

procedure TSplash.SetInitializationDone(const Value: Boolean);
begin
  FInitializationDone := Value;
  close;
end;

procedure TSplash.Button1Click(Sender: TObject);
begin
close;
end;

end.

sakura 2. Mai 2007 15:18

Re: Tutorial: Splash Screens
 
Du hast den Code gezeigt, welcher den Splash-Screen automatisch schließt (wenn das Hauptformular die "fertig"-Meldung gesandt hat) - lade Dir alle Beispiele herunter, dann siehst Du die verschiedenen Möglichkeiten.

...:cat:...

Die Muhkuh 2. Mai 2007 15:19

Re: Tutorial: Splash Screens
 
Hi,

kann es vielleicht auch sein, dass Du den Code in der Projektdatei vergessen hast?

Svenkan 2. Mai 2007 15:33

Re: Tutorial: Splash Screens
 
@ Die Muhkuh: Jap, ist auch alles drin.

Delphi-Quellcode:
begin
  Splash := TSplash.Create(Application);
  try
    Splash.Show;
    Splash.Refresh;
    Application.Initialize;
    Application.Title := 'SPlan';
    Application.CreateForm(TForm1, Form1);
    Application.CreateForm(TFaecherBox, FaecherBox);
    Application.CreateForm(TSettings_Standard, Settings_Standard);
    Application.CreateForm(TAboutBox, AboutBox);
    Application.CreateForm(THTMLFarben, HTMLFarben);
    Application.CreateForm(TSettings_FTP, Settings_FTP);
    Application.CreateForm(TSchullogo, Schullogo);
    Application.CreateForm(TeMail, eMail);
    Application.CreateForm(TReadme, Readme);
    Application.CreateForm(TSplash, Splash);
    finally
     Splash.InitializationDone := True;
  end;
  Application.Run;
@ sakura: Das komische ist ja, dass ich keinen Unterschied in der Hinsicht finden kann. Entweder bin ich total blind, oder es kann sich nu um ne Kleinigkeit handeln...

Die Muhkuh 2. Mai 2007 15:34

Re: Tutorial: Splash Screens
 
Was hat der Timer für ein Intervall?


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:38 Uhr.
Seite 2 von 3     12 3      

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