TTreeView Як програмно виділити елемент TreeView - TTreeView - Fire Monkey від А до Я

slava_d2000 0

slava_d2000 0

  • Новачок
  • Користувачі
  • 0
  • 7 повідомлень

Прошу підказати, як програмно виділити елемент дерева.

Поділитись повідомленням

Посилання на повідомлення
Поділитись на інші сайти

1 відповідь на це питання

Рекомендовані повідомлення

ttreeview

Схожий контент

Може комусь знадобиться. 19 Трохи заплутався я, т.к. у FMX майже будь-яка візуальна компонента може бути контейнером для іншої компоненти.

Робочий код функція GetPathFromNode(AItem: TTreeViewItem): String; begin if AItem = nil then exit('нічого не вибрано'); while Assigned(AItem) and (AItem is TTreeViewItem) до початку Result := AItem.Text + '/' + Result; AItem := TTreeViewItem(AItem.ParentItem); end; Delete (Result, Length (Result), 1); end; проблема була у мене AItem.Parent а правильно - AItem.ParentItem

Чому цей цикл "бачить" лише перший рівень дерева? Тоді як правильно організувати пошук потрібного TreeViewItem`а по всіх вузлах, по всьому дереву?

function TfmTree.FindItemByIndex(id_parent: Integer): TTreeViewItem; var i: Integer; begin Result := nil; for i:= 0 to Pred(TreeView1.Count) if TreeView1.Items[i].Tag = id_parent then begin Result := TreeView1.Items[i]; break; end; end;

Поекспериментував і знайшов найпростіший випадок – вузол і в ньому два аркуші. Алгоритм наступний (спрощено) кожний аркуш показує пару key=value при натисканні на вузол залишається тільки key= і показується листям з вибором value. Потім ми отримуємо грубо key=new value (хоча не обов'язково) Після такої операції ви обов'язково отримуємо те що 2 листиміняються місцями

З вузлом нічого не відбувається ні програмно, ні фактично

У складніших випадках теж ворушіння спостерігається, але його детально вивчав

Мені потрібно динамічно додавати та видаляти елементи дерева. І щоб краще зрозуміти як працювати з FMX.TreeView.TTreeView я написав простий тестовий приклад і який не можу змусити працювати. Програма взагалі падає. Може підкажіть, де я помиляюся.

Опис тестового прикладу Потрібно, коли користувач розгортає (Expand) елементи дерева, я хочу видаляти всі дочірні елементи потім додавати нові дочірні елементи і потім вже нехай батьківський TreeViewItem розкривається (Expand) для показу нових дочірніх елементів.

Для емуляції OnExpand та OnCollapse користуюся способом, описаним тут: Як можна реалізувати у TTreeView події OnExpand та OnCollapse?

Тест кейс Досить створити кореневий елемент, До нього додасть дочірній елемент Потім розкривати (Expand) кореневий елемент. І програма падає. Коли відбувається помилка Додаєш кореневий елемент дерева, потім до нього дочірній елемент. Намагаєшся розгорнути (Expand) кореневий елемент (клікаючи мишкою по плюсику) і програма падає.

Тестовий проект: Test_Tree.zip

Таке завдання. Хочу створити деяке дерево виду: Корінь -нащадок -нащадок Корінь -нащадок -нащадок -нащадок Корінь -нащадок -нащадок -нащадок і записати цю структуру в БД (FB). А потім у зворотний бік – із даних у БД, програмно створити цю ж структуру. Але як у VCL не знайшов Nodes, і absoluteindex. Так би мовити нема на що спертися в числовому уявленні. Спробував використовувати Globalindex - вийшла невдача, він видає "правильний" результат, тобто. який він за рахунком тільки коли всі гілкиповністю розкриті. Думаю добре, якщо тобі треба щоб були всі гілки розкриті, нехай будуть, вирішив використовувати ExpandetALL а потім вже знаходити Globalindex, але на жаль знову невдача, він просто не розгортає гілки (покажчики змінюють розташування), а дані так і лежать згорнуті. Натискаєш на будь-яку гілку та дані розгортаються. Але код вже відпрацював і видав неправильний індекс (такий як при згорнутих гілках).

Проблема - у якому вигляді представляти об'єкти? хотілося б у числовому за унікальним ID Як їх знаходити?

Останні відвідувачі 0 користувачів онлайн

Жодного зареєстрованого користувача не переглядає цієї сторінки