Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   MDI Anwendung verursacht Schutzverletzung (https://www.delphipraxis.net/179809-mdi-anwendung-verursacht-schutzverletzung.html)

floppybe 3. Apr 2014 13:09

MDI Anwendung verursacht Schutzverletzung
 
Hallo Liebe DP Gemeinde,

ich habe wieder mal eine Frage auf die ich leider keine Lösung habe.
Ich möchte ganz einfach eine MDI Anwendung erstellen, bis jetzt habe ich nur zwei Forms.

Ich habe das zweite Form aus den Projekt Optionen -> Formulare aus dem Reiter Automatisch erzeugen
rausgenommen und in den Reiter Verfügbare Formulare geschoben. Damit es nicht gleich beim starten
der Anwendung angezeigt wird.

Ich habe Form1 in den FormStyle, fsMDIForm genannt und Form2 als fsMDIChild.

Nun möchte ich entweder über Form2.ShowModal oder Form2.Create(self) das zweite
Formular erzeugen, aber dabei stürzt mir die Anwendung immer wieder ab.

Habe ich da was falsch verstanden ? Oder wesshalb passiert das ?

Code:
Zugriffsverletzung bei Adresse 006CF662 in Modul 'PLMIS.exe'. Lesen von Adresse 00000000
Ich wäre sehr froh für die Hilfe.

Bummi 3. Apr 2014 13:12

AW: MDI Anwendung verursacht Schutzverletzung
 
TForm2.Create(self) ;

mkinzler 3. Apr 2014 13:28

AW: MDI Anwendung verursacht Schutzverletzung
 
Keines der beiden erzeugt eine Instanz ( deshalb ist diese Nil = 00000000 ). Der 1. Befehl setzt die Werte Anfang ( Init). Der 2. versucht eine, in Deinem Fall nicht existente Form-Instanz modal anzuzeigen.

hanspeter 3. Apr 2014 14:10

AW: MDI Anwendung verursacht Schutzverletzung
 
Macht es doch nicht so umständlich, die Lösung ist doch trivial.

Entweder

Delphi-Quellcode:
With TForm2.Create(Self) do
begin
 Showmodal;
 free;
end;
oder bei nichtmodal
Delphi-Quellcode:
Frm : TForm2;

frm := TForm2.Create(self);
frm.Show;

Das Fenster muss dann entweder bei Programmende geschlossen werden.
Oder im Fenster selbst.
Wird das Fenster selbst, z.B. ein Endebutten geschlossen dann muss
im Ereignis onClose Action = cafree gesetzt werden.

Der Aufruf kann auch mit TForm2.Create(nil) erfolgen.
Bei Create wird der Besitzer und nicht das Parent übergeben.
Wird Owner angegeben, dann wird dieser beim Beenden das Fenster mit schließen.

Gruß
Peter


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