は次のようなものであるは、Delphi XEの手順のパラメータとしてクラスを渡す私は何をする必要があるか
form1 := TForm1.Create(application);
form1.showmodal;
freeandnil(form1);
何IプロシージャーAはもっと複雑ですが、問題は多少一般的なフォームの作成方法にあります。おそらく@演算子と何か...私は本当に知りません。
ありがとうございます!
は次のようなものであるは、Delphi XEの手順のパラメータとしてクラスを渡す私は何をする必要があるか
form1 := TForm1.Create(application);
form1.showmodal;
freeandnil(form1);
何IプロシージャーAはもっと複雑ですが、問題は多少一般的なフォームの作成方法にあります。おそらく@演算子と何か...私は本当に知りません。
ありがとうございます!
procedure Test(AMyFormClass: TFormClass);
var
form: TForm;
begin
form := AMyFormClass.Create(Application); // you can use nil if you Free it in here
try
form.ShowModal;
finally
form.Release; // generally better than Free for a Form
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
Test(TForm2);
end;
何を求めていることなど、TApplication.CreateForm()
が何をするか、基本的である:
Application.CreateForm(TForm1, form1);
form1.ShowModal;
FreeAndNil(form1);
あなたはこのようなTAppliction.CreateForm()
を呼び出さずにいることを模倣することができます。
procedure A(AClassType: TFormClass);
var
form: TForm;
begin
form := AClassType.Create(Application);
try
form.ShowModal;
finally
FreeAndNil(form);
end;
end;
...
begin
A(TForm1);
end;
はい...コードは他と似ています(そしてCreateFormメソッドに似ています)... jeje ...私は決してそれを実現しません! – Speaker
ちょうど別の質問...フォームを解放するための最良の方法は何ですか? Form.release?私が今までFreeAndNilを使用 または FreeAndNil(フォーム) ...しかし... – Speaker
'TForm.Release()は'フォームがそのイベントの1の内側から自分自身を解放する必要がある場合にのみ使用されることを意図してハンドラー。 TFormが何にも使用されていないことを確認するために、メインメッセージループに制御が戻るまで、空きは遅延されます。 TFormがもう使用されていないことが分かっている場合(この状況の場合)、すぐに 'Free()'を呼び出すことができます。 'FreeAndNil()'は、このようなローカル変数の簡単な使用のために、過剰です。もはや使用されないポインタをゼロにする必要はありません。 –
'form.Free'そこには問題ありません。これは、フォームのコンストラクタが 'TForm'コンストラクタのオーバーライドである場合にのみ動作することを指摘する価値があります。 –
@David、子孫のコンストラクタを隠している場合、コンストラクタの名前がCreateで、パラメータが一致している場合、これが機能しないと言っていますか? –
@Marcusそれは正しいです。仮想コンストラクターを使用してクラス参照を介してインスタンス化する必要があります。それ以外の場合は、クラス参照に何が含まれているかにかかわらず、たびに 'TMyForm'が終了します。 –