Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi 2 Arten ein Fenster erzeugen: Welche internen Unterschiede? (https://www.delphipraxis.net/76203-2-arten-ein-fenster-erzeugen-welche-internen-unterschiede.html)

Pfoto 31. Aug 2006 10:57


2 Arten ein Fenster erzeugen: Welche internen Unterschiede?
 
Hallo zusammen :hi:

welcher Unterschied besteht eigentlich zwischen den beiden folgenden Varianten, ein Fenster zu erzeugen und zu zeigen?
Delphi-Quellcode:
frmProbe:= TfrmProbe.Create(Application);
try
  frmProbe.ShowModal;
finally
  frmProbe.Free;
end;
und
Delphi-Quellcode:
Application.CreateForm(TfrmProbe, frmProbe);
try
  frmProbe.ShowModal;
finally
  frmProbe.Free;
end;
Der Grund meiner Frage:
Beide Fenster werden wie erwartet ordnungsgemäß erzeugt und geöffnet.
In dem Augenblick aber, wo ich eine Prozedur darin ausführe, stürzt mir das Fenster das mit der ersten Variante erzeugt wurde, ab.

Könnte dies etwas mit einem Elternobjekt zu haben, den das Fenster übergeben bekommt (obwohl das doch immer "Application" zu sein scheint).
Da ich mein Fenster in eine DLL auslagern möchte, kann ich es dort leider nicht mit Application.CreateForm aufrufen, da ja die DLL dieses Objekt gar nicht kennt.

Wenn ich die internen Unterschiede der beiden Varianten wüßte, könnte ich vielleicht dem Fehler auf die Spur kommen...


Weiß jemand was darüber? Danke Euch!


Gruß
Pfoto

3_of_8 31. Aug 2006 10:59

Re: 2 Arten ein Fenster erzeugen: Welche internen Unterschie
 
Zeig mal deinen Code. Ich könnte mir aber vorstellen, dass du eventuell mal Show statt ShowModal versuchen könntest.

Steve 31. Aug 2006 11:05

Re: 2 Arten ein Fenster erzeugen: Welche internen Unterschie
 
Hi,

ergänze doch vor dem ShowModal (bzw. nach dem TfrmProbe.Create...) noch Folgendes:

Delphi-Quellcode:
frmProbe.FormCreate;
Dann sollte es gehen :)

Gruß
Stephan :dance:

Flocke 31. Aug 2006 11:52

Re: 2 Arten ein Fenster erzeugen: Welche internen Unterschie
 
Also eigentlich besteht der Unterschied zwischen
Delphi-Quellcode:
frmProbe := TfrmProbe.Create(Application);
und
Delphi-Quellcode:
Application.CreateForm(TfrmProbe, frmProbe);
nur darin, dass die Methode Application.CreateForm noch prüft, ob Application.MainForm schon gesetzt ist - falls nicht, dann wird das gerade erzeugte Formular dazu "erkoren".

Application.CreateForm benutzt Delphi normalerweise selbst für automatisch erzeugte Formulare in der Projektdatei, für selbst erzeugte Formulare nehme ich immer die erste Version.

Pfoto 31. Aug 2006 13:10

Re: 2 Arten ein Fenster erzeugen: Welche internen Unterschie
 
Danke schonmal für Eure Antworten!

Wenn ich
Delphi-Quellcode:
frmProbe.FormCreate(nil);
einsetze, funktioniert es tatsächlich.

Allerdings kracht es, wenn ich das Ganze in einer DLL aufrufe.
Nun habe ich (ohne an den Erfolg zu glauben) in der DLL die Version mit "Application.CreateForm...." aufgerufen und es funktioniert!

Leider muss ich gestehen, diesen Zusammenhang (vor allem mit TApplication) noch nicht begriffen zu haben.
In der Delphi-Hilfe steht, dass TApplication die Fensterklasse kapselt, ist dies also auch automatisch bei einer DLL so (falls ein Form darin erstellt wurde)?
Kann ich die Version
Delphi-Quellcode:
Application.CreateForm(TfrmProbe, frmProbe);
also immer gefahrlos verwenden?

Wenn die beiden Befehle zur Erstellung eines Fensters nahezu identisch sind, wieso kann dann in einem der Fälle ein Fehler durch den Aufruf einer Prozedur entstehen? :gruebel:



Gruß
Pfoto


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