TTreeView, доступ к нужному Nodes

_andrews_
Дата: 13.11.2007 17:42:52
Run-Time добавляю компоненты на форму
Есть TreeView
В него Run-Time заносятся Nodes, при создании компонента (а-ля Дизайнер Делфи)
С каждым из этих Nodes в дальнейшем нужно управлять (удалять, переименовывать и т.д.)
Как доступиться к нужному Nodes НЕ по индексу?* (По названию или еще какой-то отличительной черте)
Ска
Дата: 13.11.2007 17:48:02
TTreeNode.Data
_andrews_
Дата: 13.11.2007 18:04:46
Ска
TTreeNode.Data

Пишу например так:
Создание Контрола и добавление Nodes:
procedure Tfrm_Main.CreateControl(aParent: TWinControl);
var
  NewControl: TControl;
  MyData: PShortString;
  tmp: ShortString;
begin
  ..........//Создал Контрол
  tmp := NewControl.ClassName;
  MyData := Addr(tmp);

  Tree.Items.AddChild(Item[0].Item[0],NewControl.Name).Data := MyData;
end;
Считывание Data:
procedure Tfrm_Main.TreeChange(Sender: TObject; Node: TTreeNode);
begin
  ShowMessage(String(Node.Data));
end;
Выдает сообщение такого вида:(см файл) независимо от типа Контрола
(я добавляю TEdit, TDBChart, TShape)
Gator
Дата: 13.11.2007 19:06:53
Примерно так:
procedure TForm1.TreeView1DblClick(Sender: TObject);
var i: Integer;
begin
  TreeView1.Items.BeginUpdate;
  TreeView1.Items.Clear;
  for i := 0 to Self.ComponentCount - 1 do
    TreeView1.Items.AddChildObject(nil, Self.Components[i].Name, Self.Components[i]);

  TreeView1.Items.EndUpdate;
end;

procedure TForm1.TreeView1Change(Sender: TObject; Node: TTreeNode);
begin
  Caption := TComponent(Node.Data).ClassName;
end;

Very smart impertinent dog is in my avatar
But he helps me
_andrews_
Дата: 14.11.2007 17:10:26
И снова созрел вопрос:
Как доступиться до определенного Node (не зависимо от вложености), зная, например, его Data ну или по св-ву Text?*
Неужели перебором всех Nodes и сравнение каждого из них с требуемым значением?*
Создаются Nodes так:
AddChildObject(Item[0].Item[0],MyControl.Name, MyControl).ImageIndex := ImgIndex;
Ega
Дата: 14.11.2007 17:19:12
_andrews_
И снова созрел вопрос:
Как доступиться до определенного Node (не зависимо от вложености), зная, например, его Data ну или по св-ву Text?*
Неужели перебором всех Nodes и сравнение каждого из них с требуемым значением?*
Создаются Nodes так:
AddChildObject(Item[0].Item[0],MyControl.Name, MyControl).ImageIndex := ImgIndex;


Именно перебором.
Хотя я обычно делаю так:
TMyClass=class
.....
Node: TTreeNode;
end;

В Data прописываем указатель на экземпляр TMyClass, а в нём - на экземпляр TTreeNode.
Правда там тоже есть нюансы с TCustomTreeView.DestroyWnd/CreateWnd