コンポーネント自身を解放するには?


外人  2004-09-18 00:43:53  No: 10973  IP: [192.*.*.*]

たとえば、ボタンを押すと、パネル(ボタンのペアレント)を開放する方法はありますか?

編集    削除
内人  2004-09-18 01:23:29  No: 10974  IP: [192.*.*.*]

procedure TForm1.Button1Click(Sender: TObject);
begin
  Panel1.Free;
end;

編集    削除
外人  2004-09-18 01:31:42  No: 10975  IP: [192.*.*.*]

そうすると、エラーになりますよ。

編集    削除
内人  2004-09-18 01:33:10  No: 10976  IP: [192.*.*.*]

そうですか。わたしのではなりませんね。

編集    削除
外人  2004-09-18 01:38:22  No: 10977  IP: [192.*.*.*]

マウスと「Enter」キー両方試してみたら、
ちなみに、こっちは、バージョン7ですけど。

編集    削除
ふぐちゃん  2004-09-18 01:38:26  No: 10978  IP: [192.*.*.*]

参考までに、私の環境でもエラーにはなりませんでした。

編集    削除
jok  2004-09-18 01:41:56  No: 10979  IP: [192.*.*.*]

わたしのD5でもエラーになりません。TForm.Release をまねて、例えば

procedure TForm1.ApplicationEvents1Message(var Msg: tagMSG;
  var Handled: Boolean);
begin
  case Msg.message of
    WM_APP+100: TObject(Msg.wParam).Free;
  end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  PostMessage(Application.Handle,WM_APP+100,WParam(Panel1),0);
end;

とかでいいのでは。

編集    削除
外人  2004-09-18 01:47:36  No: 10980  IP: [192.*.*.*]

確認しますが、
ボタンは、パネルにつけている。

編集    削除
jok  2004-09-18 01:55:32  No: 10981  IP: [192.*.*.*]

はい、Form1の上にPanel1、その上にButton1です。

編集    削除
TtPIPICH  2004-09-18 02:09:34  No: 10982  IP: [192.*.*.*]

Enterでもエラーになりません。D6ですが。
何かのイベントが邪魔をしているのでは?

編集    削除
外人  2004-09-18 02:10:52  No: 10983  IP: [192.*.*.*]

jok殿、
初心者なので、よく理解できなくて、少し説明をいただければ、ありがたいのですが...
例えば、procedure TForm1.ApplicationEvents1Message  の作成方法など...

編集    削除
jok  2004-09-18 02:16:25  No: 10984  IP: [192.*.*.*]

>例えば、procedure TForm1.ApplicationEvents1Message  の作成方法など...

コンポーネントに  TApplicationEvent っていうのがあるので、それをはって
から、その OnMessage イベントをオブジェクトインスペクタでダブルクリック

編集    削除
外人  2004-09-18 02:29:41  No: 10985  IP: [192.*.*.*]

すばらしい!
ありがとうございます。

編集    削除