Wie erzeuge ich (richtig) zur Laufzeit ein Formular bzw. ein Datenmodul?
Wie/Wann gebe ich es wieder (richtig) frei?
Ich weis die Frage hört sich wie von vor X Jahren als programmieren mit Delphi noch in den Kinderschuhen stand an... Aber es ist mir immer noch unklar, zumal ich immer wieder auf unterschiedliche Antworten/Beispiele in diversen Foren gestoßen bin!?
Was ist der Unterschied zwischen Release und Free? Worin besteht der
Unterschied, wenn ich ein Formular mit Parent übergebe oder ohne?
Beispiel für das Verwenden eines Datenmoduls/Formulars lokal in einer procedure:
<b>procedure</b> TForm1.Button1Click(Sender: TObject);
<b>var</b>
F : TForm2; <i>//oder TDatamodule1</i>
<b>begin</b>
<b>try</b> <i>// try vor dem create oder...</i>
<i>//Variante 1:</i>
F := TForm2.Create(self);
<i> //Variante 2:</i>
F := TForm2.Create(<b>nil</b>);
<b>try</b> <i>// try nach dem create?</i>
F.ShowModal;
<i> //Do Something</i>
<b>finally</b>
<i> //Variante 1:</i>
F.Release;
<i> //Variante 2: </i>
F.Free;
<i> //Variante 3:
//F nicht freigeben, wenn ein Parent übergeben wurde, denn dann macht er alles frei, wenn der Parent selbst freigegeben wird!</i>
<b> end;</b>
<b>end;</b>
Beispiel für die globale Verwendung in einer Form:
<b>unit</b> Unit1;
<b>interface</b>
<b>uses</b>
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
StdCtrls;
<b>type</b>
TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
<b>private</b>
F : TDataModule1; <i>//oder TForm1</i>
<b>public</b>
<b>end;</b>
<b>var</b>
Form1: TForm1;
<b>implementation</b>
{$R *.dfm}
<b>procedure</b> TForm1.FormCreate(Sender: TObject);
<b>begin</b>
<i>//Variante 1:</i>
F := TDataModule1.Create(self);
<i>//Variante 2:</i>
F := TDataModule1.Create(<b>nil</b>);
<b>end;</b>
<b>procedure</b> TForm1.Button1Click(Sender: TObject);
<b>begin</b>
<i> //F verwenden
</i> F.DoSomething;
<b>end;</b>
<b>procedure</b> TForm1.Button2Click(Sender: TObject);
<b>begin</b>
<i> //F verwenden
</i> F.DoSomethingElse;
<b>end;</b>
<b>procedure</b> TForm1.FormDestroy(Sender: TObject);
<b>begin</b>
<i> //Variante 1:
</i> F.Release;
<i> //Variante 2:
</i> F.Free;
<i> //Variante 3:
//F nicht freigeben, wenn ein Parent übergeben wurde, denn dann macht er alles frei, wenn der Parent selbst freigegeben wird!
</i><b>end;</b>
<b>end.</b></p>
Wie/Wann gebe ich es wieder (richtig) frei?
Ich weis die Frage hört sich wie von vor X Jahren als programmieren mit Delphi noch in den Kinderschuhen stand an... Aber es ist mir immer noch unklar, zumal ich immer wieder auf unterschiedliche Antworten/Beispiele in diversen Foren gestoßen bin!?
Was ist der Unterschied zwischen Release und Free? Worin besteht der
Unterschied, wenn ich ein Formular mit Parent übergebe oder ohne?
Beispiel für das Verwenden eines Datenmoduls/Formulars lokal in einer procedure:
<b>procedure</b> TForm1.Button1Click(Sender: TObject);
<b>var</b>
F : TForm2; <i>//oder TDatamodule1</i>
<b>begin</b>
<b>try</b> <i>// try vor dem create oder...</i>
<i>//Variante 1:</i>
F := TForm2.Create(self);
<i> //Variante 2:</i>
F := TForm2.Create(<b>nil</b>);
<b>try</b> <i>// try nach dem create?</i>
F.ShowModal;
<i> //Do Something</i>
<b>finally</b>
<i> //Variante 1:</i>
F.Release;
<i> //Variante 2: </i>
F.Free;
<i> //Variante 3:
//F nicht freigeben, wenn ein Parent übergeben wurde, denn dann macht er alles frei, wenn der Parent selbst freigegeben wird!</i>
<b> end;</b>
<b>end;</b>
Beispiel für die globale Verwendung in einer Form:
<b>unit</b> Unit1;
<b>interface</b>
<b>uses</b>
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
StdCtrls;
<b>type</b>
TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
<b>private</b>
F : TDataModule1; <i>//oder TForm1</i>
<b>public</b>
<b>end;</b>
<b>var</b>
Form1: TForm1;
<b>implementation</b>
{$R *.dfm}
<b>procedure</b> TForm1.FormCreate(Sender: TObject);
<b>begin</b>
<i>//Variante 1:</i>
F := TDataModule1.Create(self);
<i>//Variante 2:</i>
F := TDataModule1.Create(<b>nil</b>);
<b>end;</b>
<b>procedure</b> TForm1.Button1Click(Sender: TObject);
<b>begin</b>
<i> //F verwenden
</i> F.DoSomething;
<b>end;</b>
<b>procedure</b> TForm1.Button2Click(Sender: TObject);
<b>begin</b>
<i> //F verwenden
</i> F.DoSomethingElse;
<b>end;</b>
<b>procedure</b> TForm1.FormDestroy(Sender: TObject);
<b>begin</b>
<i> //Variante 1:
</i> F.Release;
<i> //Variante 2:
</i> F.Free;
<i> //Variante 3:
//F nicht freigeben, wenn ein Parent übergeben wurde, denn dann macht er alles frei, wenn der Parent selbst freigegeben wird!
</i><b>end;</b>
<b>end.</b></p>
Comment