Einzelnen Beitrag anzeigen

chsgmbh

Registriert seit: 16. Sep 2002
Ort: Straelen
56 Beiträge
 
Delphi 5 Enterprise
 
#9
  Alt 18. Okt 2002, 16:42
Kerl, veröffentliche bitte mal Deinen IQ - ich fasse es nicht -
ich kapiere jetzt überhaupt nichts mehr.

Logisch wird je Create oder CreateForm eine Instanz erzeugt.

Aber das wollen wir doch ?

Du erzeugt Dir z.B.: drei Formulare ( Instanzen ), auf die vom Hauptformular zugegriffen werden soll. Also muß dass HF als letztes
erzeugt werden. Da spielt uns Delphi den Streich - erstes CreateForm => Hauptformular, also wird als erstes angezeigt, der Pointer MainForm gesetzt, Anwendung beim Schließen des Formulars beendet etc.

Wir schreiben irgendwie aneinander vorbei.

Ich habe genau das gleiche Problem wie das Ursprungsthema. Ich muß vom Hauptformular aus schon auf etliche Datenmodule und Einstellungsformulare zugreifen und mache es genau so, wie ich Anfangs schrieb. Nach Deinem Beitrag bekam ich den Schock: Irgendwelchen nicht aufgeräumten Speicher zu hinterlassen, aber welchen Speicher Du genau meinst, habe ich noch nicht verstanden.

Ich erzeuge mir mit

Form1 := TForm.Create ( Application )

eine Instanz der Größe TForm im Heap. Danach erzeuge ich mir eine weitere Instanz der Größe TForm durch

Application.CreateForm ( TForm, MainForm );

Nur mal als Beispiel, angenommen TForm hätte 1000 Byte ( Quatsch, ich weiß ) also einen Pointer Namens Form1, Größe 4 Byte, der auf einen Heapbereich 1000 Byte zugreift. Das Gleiche mit dem Pointer MainForm. Der Pointer Application.MainForm ist eh definiert, 4 Byte. Ich habe in meinem Verständnis nun 3 x 4 Byte für die Pointer und 2 x 1000 Byte für die Instanzen verbraten.

Evtl. ist hier das Mißverständnis:

Ich habe gerade noch einmal den ersten Beitrag gelesen. Wenn Form1 nicht gezeigt werden soll, willst Du auch den Speicher der Instanz sparen ? - Richtig ? Das würde Deine Lösung mit InitData aber auch nicht tun.

Wenn Du Dir die OH ansiehst, ist der einzige Unterschied zwischen CreateForm und "normalem" Create:

1. der Aufruf -> Du nutzt eine Methode von TApplication, die sonst nicht existiert ( außer Applet und Web... )

und

2. zusätzlich wird die Eigenschaft Application.MainForm gesetzt.

Da sie read only ist, kann Delphi erkennen, welches der erste Aufruf ist und daher wird der erste Aufruf das Hauptformular.

Ansonsten kenne ich keinen Unterschied zwischen beiden Methoden ?

Mir geht es aber jetzt auch nicht darum, "eine Diskussion zu gewinnen", ich habe echt Panik mit meiner Verfahrensweise unsauber zu programmieren.

Gruß

Sven
Sei zufrieden, es könnte schlimmer kommen.

Ich war zufrieden - und es kam schlimmer.
  Mit Zitat antworten Zitat