AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Tutorials Delphi Tutorial: Splash Screens
Tutorial durchsuchen
Ansicht
Themen-Optionen

Tutorial: Splash Screens

Ein Tutorial von sakura · begonnen am 9. Sep 2003 · letzter Beitrag vom 31. Jan 2009
Antwort Antwort
Seite 8 von 10   « Erste     678 910      
Benutzerbild von sakura
sakura
Registriert seit: 10. Jun 2002
Hi DPler,

immer wieder kommt die Frage danach, wie Splash Screens bzw. "Startbildschirmen" gemacht werden können. Also, die Implementierung ist einfacher, als viele es glauben wollen.

Folgend meine zwei beliebtesten Methoden, Splash Screens zu implementieren.

Dabei ist die grundlegende Vorgehensweise immer identisch. Zum Üben einfach mal mitmachen und dann die präferierte Methode annehmen

Let's roll!

Delphi starten und eine neue Anwendung erstellen. Die Anwendung und das Hauptformular an gewünschter Stelle auf der Festplatte speichern. Anschließend im Objekt Inspektor dem Hauptformular einen beliebigen Namen geben. In den Bespielen heißt dieses frmMain. Damit wir bei unserer Super-Beispiel-Anwendung auch mal einen "vernünftigen" Grund für einen Splash-Screen erzwingen, folgenden Code in das OnCreate-Ereignis einfügen.

Delphi-Quellcode:
procedure TfrmMain.FormCreate(Sender: TObject);
begin
  Sleep(1500);
end;
Dann noch einen Button aufs Form werfen und folgenden Code in des OnClick-Ereignis einfügen.

Delphi-Quellcode:
procedure TfrmMain.btnBoahClick(Sender: TObject);
begin
  Close;
end;
Soweit die Vorbereitung auf Seiten des Hauptformulars. Jetzt gehts an den Splash Screen. Dazu erstellen wir ein neues Formular und speichern auch dieses. Als Namen im Objekt Inspektor bitte frmSplash eingeben (damit die Beispiele funktionieren). Ansonsten ist der natürlich auch frei wählbar.

Jetzt das Splash Formular nach belieben "stylen" und weiter gehts. Im folgenden Beispiel ist einfach ein hübsches Bildchen zu sehen

Weiter gehts. Folgend zu den beiden Standard-Methoden.
  • Der nächste Abschnitt erklärt, wie man das Splash-Form dazu bringt mind. 3 Sekunden zu bleiben und mindestens so lange, bis die Anwendung vollständig initialisiert wurde.
  • Der übernächste Abschnitt zeigt, wie der Splash Screen solange zu sehen ist, bis der User auf den "Starten" Schalter geklickt hat. Dieses kann er natürlich erst dann tun, wenn die Anwendung vollständig initialisiert ist.

Anschließend kommt der Teil im Projekt, welcher wieder identisch für alle Lösungen ist.

......
Ich bin nicht zurück, ich tue nur so
 
Benutzerbild von xZise
xZise

 
Delphi 2009 Professional
 
#71
  Alt 8. Jul 2006, 19:06
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.
Fabian
  Mit Zitat antworten Zitat
moelski

 
Delphi 2010 Professional
 
#72
  Alt 17. Okt 2006, 10:03
Moin Jungs !

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

Dominik Schmidt
  Mit Zitat antworten Zitat
Svenkan

 
Delphi 7 Enterprise
 
#73
  Alt 2. Mai 2007, 14:47
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?
Sven Kannenberg
  Mit Zitat antworten Zitat
Benutzerbild von sakura
sakura

 
Delphi 11 Alexandria
 
#74
  Alt 2. Mai 2007, 14:51
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.

......
Daniel W.
  Mit Zitat antworten Zitat
Benutzerbild von Matze
Matze

 
Turbo Delphi für Win32
 
#75
  Alt 2. Mai 2007, 14:53
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 ...
  Mit Zitat antworten Zitat
Svenkan

 
Delphi 7 Enterprise
 
#76
  Alt 2. Mai 2007, 14:55
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.
Sven Kannenberg
  Mit Zitat antworten Zitat
Benutzerbild von sakura
sakura

 
Delphi 11 Alexandria
 
#77
  Alt 2. Mai 2007, 15:18
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.

......
Daniel W.
  Mit Zitat antworten Zitat
Benutzerbild von Die Muhkuh
Die Muhkuh

 
Delphi 2009 Professional
 
#78
  Alt 2. Mai 2007, 15:19
Hi,

kann es vielleicht auch sein, dass Du den Code in der Projektdatei vergessen hast?
Manuel
  Mit Zitat antworten Zitat
Svenkan

 
Delphi 7 Enterprise
 
#79
  Alt 2. Mai 2007, 15:33
@ 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...
Sven Kannenberg
  Mit Zitat antworten Zitat
Benutzerbild von Die Muhkuh
Die Muhkuh

 
Delphi 2009 Professional
 
#80
  Alt 2. Mai 2007, 15:34
Was hat der Timer für ein Intervall?
Manuel
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 8 von 10   « Erste     678 910      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:32 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