掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
ライブラリにあるFormに値をSet (ID:37984)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
>とありますが例えばそれがただ単に >Free; >とするのはだめなんでしょうか? procedure TLibForm.FormClose(Sender: TObject; var Action: TCloseAction); begin Self.Free; end; ということでしょうか? 詳しいわけではないのでだめなのか良いのか断言できませんが、ヘルプには「コンポーネントのイベントハンドラ内で明示的にコンポーネントを解放したり,コンポーネントが所有するか,またはコンポーネントに含まれているコンポーネントのイベントハンドラからコンポーネントを解放したりしないようにしてください。」とありますので多分だめなんじゃないでしょうか。 また「フォームを解放するには,Release メソッドを使います。」ともあるので、なおさらだめなんじゃないでしょうか。 >LibForm := LibForm.Create(nil); >とし、そのPlojectではCreateするだけで、 >LibFormのActionをcaFreeにしてあげれば各ProjectでCreateしたものはFreeになるということでよいのですよね? Createするだけで、明示的にFree(Release)を呼ばずとも良いのを望むのならば LibForm := TLibForm.Create(Application); とすれば良いのではないでしょうか。 Createの引数にApplicationを指定すればApplicationが終了するとき(プログラムが終了するとき)に自動でLibFormは解放されます。 ActionにcaFreeをセットするのはそれとはちょっと違います。 LibFormを閉じたときに解放するようにしたい場合です。 例えばButton1のOnClickイベントでLibFormをShowModalで表示するならLibFormを閉じるまで制御はもどってこないのでそのOnClickイベントで LibForm.Release; とすることで呼び出し側で明示的に解放できます。 でもShowで表示するとすぐに戻ってきてしまうのでLibFormを解放するタイミングがつかめません。 そこでLibFormが閉じられたときに自分で解放してくれるようにする、というのがActionにcaFreeをセットする目的です。 例えばLibFormがバージョン情報を表示するフォームだと、閉じてしまえば必要のないフォームでしょうから閉じた時点で解放して欲しいのでActionをcaFreeにします。 LibFormが設定用のフォームなどで一度生成したらプログラム終了までは解放しないで置きたい場合ならActionにcaFreeはセットしません。 そんな感じです。
←解決時は質問者本人がここをチェックしてください。
更新する
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.