2chのDelphiスレで質問をしたのですが、
回答を得られなかったのでこちらでも質問させていただきます。
FormをDockしたりUndockしたりすると
Form上に配置していたコンポーネントのDataプロパティから
オブジェクトを正しく参照できなくなるのを回避するためにはどうすればよいんでしょうか。
例)
Form2にTreeViewを配置
TreeViewに適当にNodeを追加
NodeのDataプロパティに適当にオブジェクトを参照させる
Form2をForm1にドック // ここまで参照可能
Form2をForm1からアンドック // ここから参照不可能
先ほど参照したオブジェクトが参照できなくなる
という感じです。
どなたかご存知の方、教えてください。
Delphiのバージョンは6Personalです。
ドック、アンドックしても 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;
「大豆くん」さんのおっしゃる通りでした。
勘違いで質問の内容を間違えてしまいました。
申し訳ありません。
このスレッドは解決とさせていただきます。
本当は下記スレッドの内容の質問をしようとしてました。
https://www.petitmonte.com/bbs/answers?question_id=2731
ツイート | ![]() |