TTreeView Как да маркирате програмно елемент в TreeView - TTreeView - Fire Monkey от А до Я
slava_d2000 0
slava_d2000 0
- Новак
- Потребители
- 0
- 7 публикации
Моля да подканя програмно да изберете елемент от дърво.
Споделете съобщение
Линк към съобщение
Споделете с други сайтове
1 отговор на този въпрос
Представени публикации
Свързано съдържание
Може би някой ще дойде по-удобно. Малко съм объркан, защото във FMX почти всеки визуален компонент може да бъде контейнер за друг компонент.
Работен код. функция GetPathFromNode(AItem: TTreeViewItem): низ; start if AItem = nil then exit('нищо избрано'); докато Assigned(AItem) и (AItem е TTreeViewItem) започват Result := AItem.Text + '/' + Result; AItem := TTreeViewItem(AItem.ParentItem); край; Изтриване (Резултат, Дължина (Резултат), 1); край; Имах проблем с AItem.Parent и правилно - AItem.ParentItem
Защо този цикъл "вижда" само първото ниво на дървото? Тогава как правилно да организираме търсенето на желания TreeViewItem във всички възли, в цялото дърво?
функция TfmTree.FindItemByIndex(id_parent: Integer): TTreeViewItem; var i: Цяло число; начало Резултат := нула; for i:= 0 to Pred(TreeView1.Count) do if TreeView1.Items[i].Tag = id_parent then begin Result := TreeView1.Items[i]; прекъсване; край; край;
Експериментирах и намерих най-простия случай - възел и две листа в него. Алгоритъмът е както следва (опростен) всеки лист показва двойка ключ=стойност когато щракнете върху възел, остава само ключ= и се показва като лист с селекция на стойност. След това получаваме приблизително ключ=нова стойност (макар и не е задължително) След такава операция определено ще получите тези 2 листасменят местата
Нищо не се случва с възела нито програмно, нито реално
При по-сложни случаи се наблюдава и движение, но не съм го изследвал подробно
Трябва динамично да добавям и премахвам дървовидни елементи. И за да разбера по-добре как да работя с FMX.TreeView.TTreeView, написах прост тестов случай, който не мога да накарам да работя. Приложението обикновено се срива. Можете ли да ми кажете къде греша?
Описание на тестов случай Необходимо е, когато потребителят разшири (разшири) дървовидни елементи, искам да премахна всички дъщерни елементи, след това да добавя нови дъщерни елементи и след това да оставя родителския TreeViewItem да се разшири (Разшири), за да покаже нови дъщерни елементи.
За да емулирам OnExpand и OnCollapse, използвам метода, описан тук: Как мога да внедря събитията OnExpand и OnCollapse в TTreeView?
Тестов случай Достатъчно е да създадете коренен елемент, Добавете дъщерен елемент към него След това разширете коренния елемент. И приложението се срива. Когато възникне грешка Добавяте коренния елемент на дървото, след това дъщерен елемент в него. Опитвате се да разширите (Expand) основния елемент (като щракнете върху знака плюс) и приложението се срива.
Тестови проект: Test_Tree.zip
Такава задача. Искам да създам дърво във формата: Root -child -child Root -child -child -child Root -child -child -child и да запиша тази структура в базата данни (FB). И след това в обратната посока - от данните към базата данни, програмно създайте същата структура. Но както във VCL, не намерих възли и absoluteindex. Така че да кажем, че няма на какво да разчитаме в цифровото представяне. Опитах да използвам Globalindex - неуспешно, дава "правилния" резултат, т.е. какво е числото само когато всички клоновенапълно разкрити. Мисля, че е добре, ако имате нужда всички клонове да бъдат разширени, оставете ги, реших да използвам ExpandetALL и след това да намеря Globalindex, но уви, отново, грешка, той просто не разширява клоновете (указателите променят местоположението си) и данните все още са свити. Щраквате върху произволен клон и данните се разгръщат. Но кодът вече е работил и е дал грешен индекс (като например при свити клонове).
Проблемът е как да представяме обекти? Бих искал да е числово по уникален идентификатор Как мога да ги намеря?
Последни посетители 0 потребители онлайн
Няма регистриран потребител, който разглежда тази страница