-
procedure TExportLinuxScript.BuildCtmWndTree(Form: TCustomForm;
Tree: TTreeView);
var
i: integer;
vNode: TTreeNode;
vList: TStringList;
vWin: TWinControl;
vIndex: integer;
vTreeView: TTreeView;
vCtmWnd: CtmWnd;
begin
vTreeview := Tree;
vTreeview.Items.Clear;
vTreeview.Items.BeginUpdate;
vList := TStringList.Create;
try
{ Add a form Node. }
vNode := vTreeview.Items.AddObject(nil, '-1', Form);
vList.AddObject(Form.Name, vNode);
{ Add all Node which in form. }
for i := 0 to Form.ComponentCount - 1 do
begin
vWin := TWinControl(Form.Components[i]);
if vWin.Name <> '' then
begin
vCtmWnd := GetCtmWnd(vWin);
if vCtmWnd = nil then
vNode := vTreeView.Items.AddObject(nil, vWin.Parent.Name, vWin)
else
vNode := vTreeView.Items.AddObject(nil, vWin.Parent.Name, vCtmWnd);
vList.AddObject(vWin.Name, vNode);
end;
end;
{ Change and move node, so that build a tree. }
for i := 1 to vList.Count - 1 do
begin
vNode := TTreeNode(vList.Objects[i]);
vIndex := vList.IndexOf(vNode.Text);
if (vIndex >= 0) then
vNode.MoveTo(TTreeNode(vList.Objects[vIndex]), naAddChild);
end;
{ rename all node name. }
for i := 0 to vTreeView.Items.Count - 1 do
begin
if TComponent(vTreeView.Items.Item[i].Data) is CtmWnd then
vTreeView.Items.Item[i].Text := TComponent(vTreeView.Items.Item[i].Data).Owner.Name
else
vTreeView.Items.Item[i].Text := TComponent(vTreeView.Items.Item[i].Data).Name;
end;
finally
vList.Free;
vTreeview.Items.EndUpdate;
end;
end;
重现Delphi的ObjectTreeView
最新推荐文章于 2023-12-26 17:12:59 发布