Autor Beitrag
Petersen
Hält's aus hier
Beiträge: 4



BeitragVerfasst: Do 21.10.10 17:26 
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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 1248
Erhaltene Danke: 187

XP - Server 2008R2
D2 - Delphi XE
BeitragVerfasst: Do 21.10.10 17:44 
Geht problemlos ...

Miniblöddemo:

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:
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.


Zuletzt bearbeitet von bummi am Do 21.10.10 19:07, insgesamt 1-mal bearbeitet
elundril
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 3747
Erhaltene Danke: 123

Windows Vista, Ubuntu
Delphi 7 PE "Codename: Aurora", Eclipse Ganymede
BeitragVerfasst: 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

_________________
This Signature-Space is intentionally left blank.
Bei Beschwerden, bitte den Beschwerdebutton (gekennzeichnet mit PN) verwenden.
bummi
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 1248
Erhaltene Danke: 187

XP - Server 2008R2
D2 - Delphi XE
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19339
Erhaltene Danke: 1752

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: 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.

Für diesen Beitrag haben gedankt: Petersen
elundril
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 3747
Erhaltene Danke: 123

Windows Vista, Ubuntu
Delphi 7 PE "Codename: Aurora", Eclipse Ganymede
BeitragVerfasst: 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

_________________
This Signature-Space is intentionally left blank.
Bei Beschwerden, bitte den Beschwerdebutton (gekennzeichnet mit PN) verwenden.
bummi
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 1248
Erhaltene Danke: 187

XP - Server 2008R2
D2 - Delphi XE
BeitragVerfasst: 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 Threadstarter
Hält's aus hier
Beiträge: 4



BeitragVerfasst: 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ß