Entwickler-Ecke

Sonstiges (Delphi) - Splash Screen vor "Modul laden: ...." anzeigen


Petersen - Do 21.10.10 17:26
Titel: Splash Screen vor "Modul laden: ...." anzeigen
Hallo

ich hoffe, Ihr könnt mir bei folgendem Problem eine Hilfestellung geben:

angenommen ein umfangreiches Delphi-Programm benötigt extrem lange, bis es am Punkt "Application.Initialize;" angekommen ist - oder anders gesagt: lässt man das Programm in der Entwicklungsumgebung laufen, erscheinen nach Compilieren und Linken im Meldungsfenster hunderte Meldungen der Art "Modul laden: xxxxx" bevor "Application.Initialize;" abgearbeitet wird. Es sind wohl alles DLLs die dort geladen werden, die von den hunderten Komponenten benötigt werden, die das Programm einsetzt.

Meine Frage dazu:

gibt es eine Möglichkeit, ein Splash Screen so zu programmieren, das es vor diesem Vorgang angezeigt wird und wäre es evtl. möglich, die Information welches Modul gerade geladen wird in diesem Splash Screen anzuzeigen?

Danke & Gruß


bummi - Do 21.10.10 17:44

Geht problemlos ...

Miniblöddemo:


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:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
program Project1;

uses
  Forms,windows,sysutils,
  Unit1 in 'Unit1.pas' {Form1},
  Unit2 in 'Unit2.pas' {Form2};

{$R *.res}

begin
  Form2 := TForm2.Create(Application);
  Form2.Show;
  sleep(2000);
  Application.Initialize;
  Application.MainFormOnTaskbar := True;
  Form2.Hide;
  Application.CreateForm(TForm1, Form1);
  Application.Run;
  Form2.Free;
end.



unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation
uses unit2;
{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
  form2.Show;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
  form2.hide;
end;

end.


elundril - Do 21.10.10 17:46

Das Sleep könnte man sich auch sparen, weil es eigentlich nur nochmehr verzögert. Und da du eh schon lange brauchst um das Projekt zu laden, würd sich das nur noch mehr verzögern.

lg elundril


bummi - Do 21.10.10 18:49

machst Du Dich lustig über mich??
Das Sleep ist nur drin um die Funtionalität zu demonstrieren und steht für seine aufwändigen Initalisierungen....


jaenicke - Do 21.10.10 19:02

user profile iconbummi hat folgendes geschrieben Zum zitierten Posting springen:
und steht für seine aufwändigen Initalisierungen....
Das hast du falsch verstanden. Die laufen alle bevor dein Splashscreen überhaupt greift...

Um das zu realisieren muss der Code in den initialization Abschnitt einer Unit und diese muss als erste Unit im Projektquelltext eingebunden werden. Aber auch dann werden vorher schon Initialisierungen laufen. Daran kann man aber nichts ändern.
Der erste Punkt zum Eingreifen ist der initialization Abschnitt der ersten Unit.


elundril - Do 21.10.10 19:05

user profile iconbummi hat folgendes geschrieben Zum zitierten Posting springen:
machst Du Dich lustig über mich??
Das Sleep ist nur drin um die Funtionalität zu demonstrieren und steht für seine aufwändigen Initalisierungen....


Dann schreibt man das normalerweise als Kommentar dazu oder schreibt nur ein Kommentar. woher soll das irgendwer ahnen was du mit dem Sleep bezweckst.

lg elundril


bummi - Do 21.10.10 19:05

@jaenicke
ok, ich dachte er initalisert im Projektcode, also da wo mein sleep steht.
@elundril
sorry, schien mir zu offensichtlich


Petersen - Fr 22.10.10 10:02

Hallo!

Der Tipp von "jaenicke" hat mich schon einmal eine riesen Schritt weitergebracht; also den "initialization"-Abschnitt einer Unit nutzen und diese als erste in das Projekt einbinden!

Vielen Dank für die schnellen Antworten - super Forum!

Danke & Gruß