Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Ereignisreihenfolge beim Anzeigen mehrerer Formulare (https://www.delphipraxis.net/68184-ereignisreihenfolge-beim-anzeigen-mehrerer-formulare.html)

PeterPanino 25. Apr 2006 21:04


Ereignisreihenfolge beim Anzeigen mehrerer Formulare
 
Normalerweise ist die Reihenfolge beim Programmstart beim Anzeigen eines Formulars:

Delphi-Quellcode:
OnCreate
OnShow
OnPaint
OnActivate
OnResize
Wenn das Programm aber mehrere Formulare besitzt, so werden diese in der Reihenfolge erzeugt, wie sie in der Project-Datei stehen:

Delphi-Quellcode:
program MeinProgramm;

uses
  Forms,
  Main in 'Main.pas' {Form1},
  Rain in 'Rain.pas' {Form2},
  Pain in 'Pain.pas' {Form3};
 
{$R *.res}

begin
  Application.CreateForm(TForm1, Form1);
  Application.CreateForm(TForm2, Form2);
  Application.CreateForm(TForm3, Form3);
  Application.Run;
end.
Nun meine Frage: Kann man absolut ausschließen, dass etwa das Ereignis Form1.OnShow VOR Form2.OnCreate auftritt? Oder anders ausgedrückt: Müssen zuerst alle Formulare erzeugt werden, bevor das Ereignis OnShow eines Formulars eintritt, oder kann das Ereignis OnShow eines Formulars eintreten, bevor ALLE annderen Formulare erzeugt wurden?

mkinzler 25. Apr 2006 21:26

Re: Ereignisreihenfolge beim Anzeigen mehrerer Formulare
 
Diev mwißten Events (außer onCreate) werden erst ausgelöst, wenn die Eventsloop des Application-Objekts aktiv ist, also anch Application.Run. Deshalb ist es sichergestellet das alle Formulare erzeugt sind, bevor eine Form sichtbar wird.

SirThornberry 25. Apr 2006 21:36

Re: Ereignisreihenfolge beim Anzeigen mehrerer Formulare
 
das trifft nicht ganz zu. Ein Beispiel sind die Splashscreens. Oder wenn du vor Application.Run mit ShowModal ein Formular öffnest werden auch Messages abgearbeitet.
Ich würde versuche das ganze "sauberer" zu lösen und nicht darauf hoffen das niemals eine Message vorher abgearbeitet wird.

mkinzler 25. Apr 2006 21:41

Re: Ereignisreihenfolge beim Anzeigen mehrerer Formulare
 
Zitat:

das trifft nicht ganz zu. Ein Beispiel sind die Splashscreens. Oder wenn du vor Application.Run mit ShowModal ein Formular öffnest werden auch Messages abgearbeitet.
In seinem Quelltext oben, sollte dies aber nicht passieren.

PeterPanino 25. Apr 2006 22:41

Re: Ereignisreihenfolge beim Anzeigen mehrerer Formulare
 
Zuerst mal vielen Dank an alle für die Antworten!

Zitat:

Zitat von SirThornberry
Ich würde versuche das ganze "sauberer" zu lösen und nicht darauf hoffen das niemals eine Message vorher abgearbeitet wird.

Heißt das also, wenn ich ganz sicher gehen will, dann sollte ich in der Project-Datei VOR allen Form.Create-Aufrufen die Routine einfügen, von der ich sichergehen will, dass sie vor allem anderen Code ausgeführt werden soll:

Delphi-Quellcode:
program MeinProgramm;

uses
  Forms,
  MyUnit,
  Main in 'Main.pas' {Form1},
  Rain in 'Rain.pas' {Form2},
  Pain in 'Pain.pas' {Form3};
 
{$R *.res}

begin
  DoThisBeforeEverythingElse;
  Application.CreateForm(TForm1, Form1);
  Application.CreateForm(TForm2, Form2);
  Application.CreateForm(TForm3, Form3);
  Application.Run;
end.

mkinzler 26. Apr 2006 05:45

Re: Ereignisreihenfolge beim Anzeigen mehrerer Formulare
 
Zitat:

Heißt das also, wenn ich ganz sicher gehen will, dann sollte ich in der Project-Datei VOR allen Form.Create-Aufrufen die Routine einfügen, von der ich sichergehen will, dass sie vor allem anderen Code ausgeführt werden soll:
Nein Nach dem Create der entsprecheneden Form aber vor den Create der anderen.

MPirnstill 26. Apr 2006 06:23

Re: Ereignisreihenfolge beim Anzeigen mehrerer Formulare
 
Hi,

bin mir jetzt nicht ganz sicher, aber wäre hier nicht der Initialization Teil der Projektdatei, um etwas ganz zu Beginn des Projektes auszuführen?! :gruebel:

Gruß

mkinzler 26. Apr 2006 06:28

Re: Ereignisreihenfolge beim Anzeigen mehrerer Formulare
 
Es kommt darauf an, was er machen will, ist der Code ein Teil einer Form, muß diese natürlich erst Instantiiert sein.


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:58 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