powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Как задать поиск вкомпоненте TTreeView
16 сообщений из 16, страница 1 из 1
Как задать поиск вкомпоненте TTreeView
    #32203995
Цук
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Голову сломал, но так и не нашел решения,как задать поиск вкомпоненте TTreeView. Делаю запрос к базе, строю динамическую таблицу в памяти и с помощью указателя вытаскиваю инфу в компонент...
У меня всего то два узла. К примеру " КОД " ->
22
234
300
500
Кликая курсором в дереве по № кода, выходит инфа о коде.
У каждого кода есть свой ID (номер), к которому я могу обратиться в проге..
Так вот зная ID, зня сам код, как передать фокус на нужный код в дереве..
Надо чтобы user набил код который его интересует, вывелась инфа (это я могу сделать) и передался фокус на нужный код (а вот етого не могу)...
Буду очень признателен, кто подскажет решение по моему наболевшему вопросу.
...
Рейтинг: 0 / 0
Как задать поиск вкомпоненте TTreeView
    #32204023
Speaker
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Клади всю инфу об элементе в TreeNode.Data.
Сделай функцию поиска в дереве по
твоим данным, а потом соответственно
TreeView.Selected / Focused := <найденый узел>
...
Рейтинг: 0 / 0
Как задать поиск вкомпоненте TTreeView
    #32204105
Фотография eNose
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
[не активирован]
[не одобрен]
TTreeView отличается чрезвычайно тормозным поиском

Лучше создать StringList, загнать в него индексы TreeNode и данные для поиска.
...
Рейтинг: 0 / 0
Как задать поиск вкомпоненте TTreeView
    #32204123
Speaker
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TreeView вообще не быстр
Лучше его просто не использовать :)
...
Рейтинг: 0 / 0
Как задать поиск вкомпоненте TTreeView
    #32204142
Voha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Speaker
зря ты так, нужно просто правильно подойти к решению задачи

2Цук
нужно иногда пользоваться поском в форуме, обсуждалась эта тема уже неоднократно
http://www.delphikingdom.com/helloworld/dbtreeview.htm][вот тебе инфа по работе с БД через дерево]
а поск сам придумаешь как сделать, подсказка: используй рекурсию (так помоему оно называется)
...
Рейтинг: 0 / 0
Как задать поиск вкомпоненте TTreeView
    #32204161
Speaker
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>зря ты так, нужно просто правильно подойти к решению задачи
правильно подойти к решению задачи - это использовать
компонент, который работает в несколько раз быстрее.
это пройдено и проверено на личном опыте

>используй рекурсию (так помоему оно называется)
зачем?
for i:=0 to TreeView.Items.Count-1 do begin ... end;
...
Рейтинг: 0 / 0
Как задать поиск вкомпоненте TTreeView
    #32204169
Memento
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
При построении дерева заодно заполнять THashTable (ID, Pointer(TTreeNode)),
затем в этой таблице брать нужный узел дерева по нужному ID.
...
Рейтинг: 0 / 0
Как задать поиск вкомпоненте TTreeView
    #32204185
Voha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
да если заганять весь набор данных в дерево то и получишь тормаза.
если почитаешь статей по той ссылке что я дал то балалайку у тя выйдет поск через for i:=0 to TreeView.Items.Count-1 do begin ... end; (а я смотрю что ты любитель в дерево загонять весь набор данных)
...
Рейтинг: 0 / 0
Как задать поиск вкомпоненте TTreeView
    #32204202
Speaker
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>да если заганять весь набор данных в дерево то и получишь тормаза.
это где я это сказал? стандартный способ - обрабатывать OnExpand.
дерево-то бывает разным :) если в нем 5 позиций - проще прочитать
его все. Опять же БД бывает разной, в Oracle можно прочитать
все дерево одним запросом. А по поводу тормозов я уже
говорил, что TreeView & ListVoew довольно медленно работают,
я от них отказался имено в силу этого.
...
Рейтинг: 0 / 0
Как задать поиск вкомпоненте TTreeView
    #32204340
Цук
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
За все советы огромное спасибо.По поводу тормозов. База Оракловская, к тому же находится в 40-ка км. от места где работают с моей прогой и никаких тормозов, деревце то простое хоть и не маленькое но все в окурат в одном небольшом запросе...
Все ссылочки предложения просмотрю...
Если есть еще какие мнения просьба отписать.
...
Рейтинг: 0 / 0
Как задать поиск вкомпоненте TTreeView
    #32204391
Speaker
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Цук
посмотри сюда
...
Рейтинг: 0 / 0
Как задать поиск вкомпоненте TTreeView
    #32204431
Цук
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Speaker' у.. Интересная "херня"...:-)
А есть прямой пример у Кого-нить с поиском В TTreeView, А ??? Ну чтоб нагляднее было и быстрее...
...
Рейтинг: 0 / 0
Как задать поиск вкомпоненте TTreeView
    #32204469
Цук
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
p.s
Speaker' у....
В смысле неплохо...
Кстати ТЫ отписал TreeView.Selected / Focused := <найденый узел>. Что ты подрузумевал под <найденый узел>? И ты отписал сделай функцию поиска,
как ? Поиск по файлу с данными могу, а по компоненту НЕИЗВЕСТНО...?
Пойду пока по Oracl-у пройдусь на форуме...
...
Рейтинг: 0 / 0
Как задать поиск вкомпоненте TTreeView
    #32204509
Speaker
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хорошо, по порядку:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
type

TObjectType = ( objRoot, objFolder, objEntity1, objEntity2, ... );
class TMyObject = class(TObject)
public
  obj_id : Integer;
  obj_type : TObjectType;
end;

в данном случае
obj_id = PK из базы,
obj_type = тип объекта
эта пара значений уникально определяет объект в дереве.
При заполнении дерева в эти два поля пихаем нужные значения.
Из Оракла это удобно, так как можно получить одним запросом
все дерево, без всяких рекурсий и т.д. и т.п.

Далее, простейший поиск в дереве:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
function FindTreeNode( obj_id : Integer; obj_type : TObjectType; Parent : TTreeNode ) : TTreeNode;
var i : Integer;
begin
    Result := nil;
    try
      for i:= 0  to Parent.Count- 1  do
        if (TMyObject(Parent.Item[i].Data).obj_id=obj_id) and
           (TMyObject(Parent.Item[i].Data).obj_type=obj_type)
        then Result := Parent.Item[i];
    except end;
end;


соответственно из формы делаем примерно так:
Код: plaintext
1.
2.
3.
...
TreeView.Selected := FindTreeNode( .... );
if Assigned(TreeView.Selected) then TreeView.Selected.Focused := True;
...


Если дерево не очень велико, то будет работать нормально,
но вообще, как я уже говорил, лучше использовать другое.
Я когда-то замерял - разница в скорости примерно в 3-4 раза.

При необходимости можно делать производные классы от TMyObject
для разных сущностей.
...
Рейтинг: 0 / 0
Как задать поиск вкомпоненте TTreeView
    #32204585
Цук
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Speaker' у
Сенк's... Кажись усек...Буду пробывать, пока свежо на памяти...
ВСЕМ..
Форум отличная штука, в разведку бы пошел с тем кто его ПОПРИДУМЫВАЛ ...
Спасибо что откликнулись... ;-)
...
Рейтинг: 0 / 0
Как задать поиск вкомпоненте TTreeView
    #32205111
Сапог
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Компоненты для облегчения работы с типовыми операциями поиска, выбора и фильтрации данных

Там есть компонент отображения дерева и поиска в нем. Может поможет.
...
Рейтинг: 0 / 0
16 сообщений из 16, страница 1 из 1
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Как задать поиск вкомпоненте TTreeView
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]