フォームをアンドックしたときにフォーム上のコンポーネントのDataプロパティを正しく参照するには?

解決


foobar  2005-05-07 09:12:53  No: 14660

2chのDelphiスレで質問をしたのですが、
回答を得られなかったのでこちらでも質問させていただきます。

FormをDockしたりUndockしたりすると
Form上に配置していたコンポーネントのDataプロパティから
オブジェクトを正しく参照できなくなるのを回避するためにはどうすればよいんでしょうか。

例)
Form2にTreeViewを配置
TreeViewに適当にNodeを追加
NodeのDataプロパティに適当にオブジェクトを参照させる
Form2をForm1にドック // ここまで参照可能
Form2をForm1からアンドック // ここから参照不可能
先ほど参照したオブジェクトが参照できなくなる

という感じです。
どなたかご存知の方、教えてください。

Delphiのバージョンは6Personalです。


大豆くん  2005-05-08 09:55:31  No: 14661

ドック、アンドックしても  TreeのData値は変化しません
オブジェクトも変化しません
コードを見直す方が賢明です。

----------------------

procedure TForm1.FormCreate(Sender: TObject);
begin
  Panel1.DockSite := True;
end;

----------------------

procedure TForm2.FormCreate(Sender: TObject);
begin
  DragKind := dkDock;
  DragMode := dmAutomatic;
end;

procedure TForm2.Button1Click(Sender: TObject);
  var i ,j :integer;
begin
  For i:=0 to TreeView1.Items.Count-1 do
  with TreeView1 do
  begin
    if (i=0) then j := Integer(@(Button3)) else j := i;
    Items[i].Text := IntTostr(j);
    Items[i].Data := Ptr(j);
  end;
end;

procedure TForm2.Button2Click(Sender: TObject);
  var i :integer;
begin
  For i:=0 to TreeView1.Items.Count-1 do
  with TreeView1 do
  begin
    Items[i].Text := IntTostr(Integer(Items[i].Data));
  end;
end;

procedure TForm2.Button3Click(Sender: TObject);
begin
  if TreeView1.Items.Count=0 then Exit;
  ShowMessage(Format('Old[%d] New[%d]',
    [Integer(TreeView1.Items[0].Data),Integer(@(Button3))]));
end;


foobar  2005-05-09 08:35:08  No: 14662

「大豆くん」さんのおっしゃる通りでした。
勘違いで質問の内容を間違えてしまいました。
申し訳ありません。

このスレッドは解決とさせていただきます。

本当は下記スレッドの内容の質問をしようとしてました。
https://www.petitmonte.com/bbs/answers?question_id=2731


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加