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


外人  2004-09-17 15:43:53  No: 10973  IP: 192.*.*.*

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

編集 削除
内人  2004-09-17 16:23:29  No: 10974  IP: 192.*.*.*

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

編集 削除
外人  2004-09-17 16:31:42  No: 10975  IP: 192.*.*.*

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

編集 削除
内人  2004-09-17 16:33:10  No: 10976  IP: 192.*.*.*

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

編集 削除
外人  2004-09-17 16:38:22  No: 10977  IP: 192.*.*.*

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

編集 削除
ふぐちゃん  2004-09-17 16:38:26  No: 10978  IP: 192.*.*.*

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

編集 削除
jok  2004-09-17 16: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-17 16:47:36  No: 10980  IP: 192.*.*.*

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

編集 削除
jok  2004-09-17 16:55:32  No: 10981  IP: 192.*.*.*

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

編集 削除
TtPIPICH  2004-09-17 17:09:34  No: 10982  IP: 192.*.*.*

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

編集 削除
外人  2004-09-17 17:10:52  No: 10983  IP: 192.*.*.*

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

編集 削除
jok  2004-09-17 17:16:25  No: 10984  IP: 192.*.*.*

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

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

編集 削除
外人  2004-09-17 17:29:41  No: 10985  IP: 192.*.*.*

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

編集 削除