Перейти к содержанию
Fire Monkey от А до Я
  • 0

Криво отображаются наследники TTreeViewItem


Frol

Вопрос

Опубликовано (изменено)

Добрый день. Неожиданно столкнулся со странностью. В проекте объявлены такие классы

Цитата

 

type
  TTreeViewItemA=class (TTreeViewItem);
  TTreeViewItemB=class (TTreeViewItem);

  TTreeViewItemAA=class (TTreeViewItemA);
  TTreeViewItemAAA=class (TTreeViewItemAA);

 

A и B наследники от TTreeViewItem, а AA и AAA наследники от наследника. Но ни в каком из этих классов нет никаких изменений. В моем понимании это просто другое имя класса и все.

Есть такая процедура

Цитата

 

procedure TForm1.FormCreate(Sender: TObject);

  procedure SetItem(Item:TTreeViewItem; Text:string);
  var
    Item2:TTreeViewItem;
  begin
    Item.Text:=Text;  //текст узла
    TreeView1.AddObject(Item);  //размещение в корне
    //
    Item2:=TTreeViewItem.Create(TreeView1); //еще один узел
    Item2.Text:='A';
    Item.AddObject(Item2); //новый узел размещается как дочерний
    Item.IsExpanded:=true;
  end;

var
  ItemO:TTreeViewItem;
  ItemA:TTreeViewItemA;
  ItemB:TTreeViewItemB;
  ItemAA:TTreeViewItemAA;
  ItemAAA:TTreeViewItemAAA;
  i:integer;
begin
  //создаются узлы разных классов
  ItemO:=TTreeViewItem.Create(TreeView1);
  ItemA:=TTreeViewItemA.Create(TreeView1);
  ItemB:=TTreeViewItemB.Create(TreeView1);
  ItemAA:=TTreeViewItemAA.Create(TreeView1);
  ItemAAA:=TTreeViewItemAAA.Create(TreeView1);
  //улам задается текст, они размещаются в корне, и им добавляется дочерний узел
  SetItem(ItemO,'ItemO');
  SetItem(ItemA,'ItemA');
  SetItem(ItemB,'ItemB');
  SetItem(ItemAA,'ItemAA');
  SetItem(ItemAAA,'ItemAAA');
  //проверочный вывод в Memo
  for i := 0 to TreeView1.Count-1 do with TreeView1.Items[i] do
    Memo1.Lines.Add(Text+' - '+ClassName);
end;

 

В результате (в моем понимании) должно получиться 5 узлов в корне с текстом ItemO, ItemA, ItemB, ItemAA, ItemAAA. Но по факту оказывается, что для наследников от наследника текст не выводится, и кнопка сворачивания узла не рисуется. А в Memo появляется правильный текст... 

Что я делаю не так?

Form.png

Изменено пользователем Frol

Рекомендуемые сообщения

  • 0
Опубликовано (изменено)

решение найдено. 

Цитата

В FMX для каждого визуального контрола подбирается «дефолтный» стиль по имени. Для TTreeViewItem это treeviewitemstyle.
У прямых наследников (TTreeViewItemA, TTreeViewItemB) движок ещё находит стиль корректно, а вот у «внуков» (TTreeViewItemAA, TTreeViewItemAAA) подбор стиля срывается (особенность/баг механизма поиска по иерархии). В итоге элемент создаётся, текст у него есть, но стиль не применён — поэтому не рисуются ни текст, ни кнопка

вот такое исправление кода всё наладило

Цитата

 

procedure SetItem(Item:TTreeViewItem; Text:string);
  var
    Item2:TTreeViewItem;
  begin
    Item.Text:=Text;  //текст узла
    TreeView1.AddObject(Item);  //размещение в корне
    Item.StyleLookup:='treeviewitemstyle'; //ИСПРАВЛЕНИЕ
    //

........

 

 

Изменено пользователем Frol

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить на вопрос...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
×
×
  • Создать...