Как добавить узлы в TreeView FireMonkey во время выполнения - PullRequest
5 голосов
/ 22 сентября 2011

Я не могу найти ни одного примера в онлайн-документации или в демонстрациях, включенных в Delphi XE2, для добавления узлов в элемент управления FMX.TreeView.TTreeView во время выполнения. Итак, как я могу добавлять, удалять и проходить узлы FireMonkey TreeView во время выполнения?

Ответы [ 3 ]

13 голосов
/ 22 сентября 2011

Я думаю, что мы все учимся на этом этапе ...

Но из того, что я видел, TTreeView использует принцип, что любой элемент управления может быть родительским для другого элемента управления.

Все, что вам нужно сделать, это установить свойство Parent, чтобы элемент отображался как ребенок.

var
  Item1 : TTreeViewItem;
  Item2 : TTreeViewItem;
begin
  Item1 := TTreeViewItem.Create(Self);
  Item1.Text := 'My First Node';
  Item1.Parent := TreeView1;

  Item2 := TTreeViewItem.Create(Self);
  Item2.Text := 'My Child Node';
  Item2.Parent := Item1;
end;

Из-за этого вы можете делать вещи, которые раньше были невозможны, например,как размещение любого элемента управления в TreeView.Например, этот код добавит кнопку в область, используемую Item2, и кнопка не будет видна, пока не будет виден Item2.

  Button := TButton.Create(self);
  Button.Text := 'A Button';
  Button.Position.X := 100;
  Button.Parent := Item2;
0 голосов
/ 22 января 2019

С помощью AddObject (FmxObject) вы также можете добавить любой объект (кнопку и т. Д.) ...

0 голосов
/ 07 июня 2012

У меня есть другая идея.Первый ответ помог мне получить его.Поэтому добавьте следующий код

Var
TempItem:TTreeViewItem;
Begin
TempItem := TTreeViewItem.Create(Self);
TempItem.Text := 'Enter Caption Here';
TempItem.Parent := TreeView;  
End

Теперь актуальный трюк наступает, когда вам нужно освободить предмет, чтобы он не использовал ненужную память.Допустим, вы используете это в цикле, как я сделал здесь:

ADOTable.Connection := ADOConnection;
  ADOTable.TableName := 'MenuTree';

  ADOTable.Open;
  ADOTable.First;

  ADOTable.Filter := '(CHFlag=''CURRENT'') AND (Parent=''Tree'')';
  ADOTable.Filtered := True;

  While NOT ADOTable.Eof Do
    Begin
      TempItem := TTreeViewItem.Create(Self);
      TempItem.Text := ADOTable['ItemName'];
      TempItem.Parent := TreeView;
      // TempItem.Free;

      ADOTable.Next;
    End;
  TempItem.Free;
  ADOTable.Close;
...