16

いくつかの情報を数秒間表示するために使用するフォームがあります。フォーム自体を解放しても問題ありませんか? コンストラクターでタイマーを開始してから、タイマー イベントで self.free を呼び出すことはできますか? それとも、これがトラブルにつながる可能性がありますか?

4

4 に答える 4

31

さらに、フォームを使用して呼び出すことができますRelease

CM_RELEASE メッセージをフォームに送信します。反応として Free を呼び出します。リリースの利点は、クラッシュの原因となる可能性のあるメッセージがフォームに残されないことです。

于 2009-04-02T09:16:24.887 に答える
18

ユーザーまたはコードからフォームが閉じられたときにフォームを解放することができます。

procedure TForm27.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  Action := caFree;
end;

procedure TForm27.FormCreate(Sender: TObject);
begin
  Timer1.Enabled := True;
end;

procedure TForm27.Timer1Timer(Sender: TObject);
begin
  Timer1.Enabled := False;
  Close;
end;

アプリケーションがシャットダウンし、フォームがその時点で破棄されない場合に備えて、コンストラクターで所有者を指定してください。所有者は、それ自体を解放する前にフォームを解放します。

于 2009-04-02T09:03:28.303 に答える
1

自分自身を解放する一連のオブジェクト全体があり、それらに対してさまざまなテストを実行しましたが、問題やリークは示されていません。TForm はもっと複雑かもしれませんが、Self.Free() が最後に行われた呼び出しである限り、問題はありません。

(なぜ地球上で自分自身を解放するオブジェクトがあるのか​​ 疑問に思っている人のために。私はそれらをシステムの周りにたくさん渡すので、独自の参照カウント方式で実装しました。最後の参照が解放されると、オブジェクトは自分自身を解放します)。

于 2009-04-02T08:54:08.497 に答える
0

これはまさにインターフェイスで行われることです。

于 2009-04-02T09:28:58.693 に答える