Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Поиск узла по TreeView / 15 сообщений из 15, страница 1 из 1
25.12.2002, 11:50
    #32084003
Voha
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск узла по TreeView
Привет всем!
Вот возникла такая проблемка. Пишу прогу для диспетчерсой службы нашего предприятия. Там есть база подразделений предприятия, на основе которой строиться TreeView. Затем для каждого оперативного документа создаю,чтото типа шаблона (какие подразделения участвуют, какие данные к подразделению привязывать и тп). Так вот, уже ближе к вопросу, в форме этого шаблона есть два TreeView_а, первый с исходной иерархией подразделений предприятия, второй с подразделенирями входящих в шаблон этого документа. При добавлении нового подразделения в шаблон, мне нужно в TreeView шаблона добавить непосредственно выбранное подразделение и все подразделения стоящие по иерархии над ним. Но может возникнуть ситуация, что подразделения стоящие выше по иерархии уже есть в этом TreeView_е. Как проверить есть они в TreeView_е или нет.
Вопрос: есть ли возможность поиска узла дерева (TreeNode), по дескриптору узла (TreeNode.Data),или еще по какому нибудь признаку, кроме перебирания каждого узла по индексу и проверки его дескриптора "если - то". Вот. Вродибы все!
За ранее благодарен.
P.S.
Прошу прощения за грамматические, терминалогические и др. ошибки.
...
Рейтинг: 0 / 0
25.12.2002, 11:58
    #32084012
tygra
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск узла по TreeView
А данные то где хранятся? С .dbf чтоли работаешь?

По дереву - только перебором
...
Рейтинг: 0 / 0
25.12.2002, 12:12
    #32084025
Voha
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск узла по TreeView
нет, раньше дело имел с DBF и DB, а что сильно заметно?
А это моя первая попытка на InterBase6.

база подразделений имеет поля:
поинт корневого объекта, уровень в дереве, поинт родительского объекта, код данного ообъекта, название объекта. Эти же поля есть и в базе шаблонов.
Но проверить наличие подразделения в базе, труда не состовляет. Меня лично интересовал вопрос проверки наличия объекта в дереве только не перебором.

спасибо за ответ, если будет еще,я буду толь рад, и благодарен.
...
Рейтинг: 0 / 0
25.12.2002, 12:21
    #32084030
tygra
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск узла по TreeView
Дык если БД есть - зачем на клиенте проверять? :)
...
Рейтинг: 0 / 0
25.12.2002, 13:14
    #32084063
Voha
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск узла по TreeView
чет последнее не понял. наверное мне еще чет надо почитать по ИБ почитать.

а можно последнее по подробнее.
ееще раз извеняюся
...
Рейтинг: 0 / 0
25.12.2002, 13:29
    #32084071
Shark
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск узла по TreeView
В VG библиотеке есть DBTReeView. Наверное- то что нужно для вашей задачи.
Ищите узел прямо в базе.
...
Рейтинг: 0 / 0
25.12.2002, 14:14
    #32084094
KirillovA
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск узла по TreeView
Храни блин в нодах или итемах указатель на свой набор данных - проверяй скока влезет.
...
Рейтинг: 0 / 0
25.12.2002, 14:35
    #32084113
Voha
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск узла по TreeView
KirillovA

а я как храню ссылку на набор данных, точно так как ты и сказал, но смысл вопроса поиск узла в дереве опираясь на БД, а не поиск данных в БД опираясь на дерево.

но всеравно спасибо за совет.
...
Рейтинг: 0 / 0
25.12.2002, 15:31
    #32084190
KirillovA
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск узла по TreeView
Ну тогда - фор ту - если то не это - - пройди свои итемы!
...
Рейтинг: 0 / 0
25.12.2002, 15:49
    #32084218
Voha
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск узла по TreeView
KirillovA

такя интересовался дрругим каким нибудь способом, кроме перебора всех элементов дерева, ну как я понял, такового наверное не существует.

всем спасибо.
...
Рейтинг: 0 / 0
25.12.2002, 16:10
    #32084240
KirillovA
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск узла по TreeView
Да блин - для такой траблемы - купи себе 285 комп - и работай )))
...
Рейтинг: 0 / 0
25.12.2002, 17:39
    #32084322
KirillovA
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск узла по TreeView
Есть еще вариант - при заполнении итемов - сохрани два указателя - на итем и данные - и потом обращайся через поинтер - мгновенно будет.
...
Рейтинг: 0 / 0
26.12.2002, 11:48
    #32084607
Voha
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск узла по TreeView
KirillovA

Да блин, вся проблема в том что итемы создаются динамически, в зсвисимости куда по какой ветке пойдешь, и если я правильно понял создавать массив поитеров, время тоже+поиск по массиву поинтеров. Так что делаю как не хотел это делать ПЕРЕБОРОМ.

всем спасибо за участие в решении проблемы.

а на счет 285 компа я подумаю :)
...
Рейтинг: 0 / 0
31.12.2002, 10:41
    #32085860
LekSyS
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск узла по TreeView
//поиск в дереве структуры подстанций
procedure TFrm_evday_data.TBtnFind_tree_struClick(Sender: TObject);
var
var _node:TTreeNode;
var ItemsList:TList;
var Noddy:TTreeNode; //для процедуры поиска в дереве статей бюджета
var Searching :Boolean; //для процедуры поиска в дереве статей бюджета
var SearchTarget:string; //для процедуры поиска в дереве статей бюджета
var FIND_ITEMS:integer; //для процедуры поиска в дереве статей бюджета

begin
if (Ed_find_stru.Text='') then begin
MessageDlg('Нет значения для поиска!', mtWarning,[mbOk], 0);
end;
try
SearchTarget:= Ed_find_stru.Text;//присвоить переменной значение для поиска
Noddy := Tree_ps.Items[0]; //в дереве стать на 0 уровень
Searching := true; //включить поиск
while (Searching) and (Noddy <> nil) do
begin
if StrPos(PChar(Noddy. Text), PChar(SearchTarget))<> nil then
begin
Searching := False;
Tree_ps.Selected := Noddy;
Tree_ps.SetFocus;
FIND_ITEMS:= Tree_ps.Selected.AbsoluteIndex+1;
end else
begin
Noddy := Noddy.GetNext;
end;
end;
except
MessageDLG('Ошибка открытия запроса(DM.Query_stru_ps).Вызовите программиста!',mtError,[mbOk],0);
end;
end;

//дальнейший поиск в дереве структуры подстанций
procedure TFrm_evday_data.TBtnFindNext_tree_struClick(Sender: TObject);
begin
if (Ed_find_stru.Text='') then begin
MessageDlg('Нет значения для поиска!', mtWarning,[mbOk], 0);
end;
try
SearchTarget:= Ed_find_stru.Text;
Noddy:=Tree_ps.Items[FIND_ITEMS];
Searching := true;
while (Searching) and (Noddy <> nil) do
begin
if StrPos(PChar(Noddy. Text), PChar(SearchTarget))<> nil then
begin
Searching := False;
Tree_ps.Selected := Noddy;
Tree_ps.SetFocus;
FIND_ITEMS:= Tree_ps.Selected.AbsoluteIndex+1;
end else
begin
Noddy := Noddy.GetNext;
end;
end;
except
MessageDLG('Поиск завершен.',mtInformation,[mbOk],0);
end;
end;
//------------------------------------------------------------------------------
У меня работает. Потом при поиске можно вытянуть полный путь к узлу на котором стоишь.

//определение пути
function TFrm_evday_data.GetFullPath(t:TTreeNode):String ;
begin
If t.Parent<>Nil then
Result:=GetFullPath(t.Parent)+'\'+t.Text
else Result :=Result+t.Text+'\';
end;
...
Рейтинг: 0 / 0
04.01.2003, 15:01
    #32086443
Voha
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск узла по TreeView
У меня приблизительно тоже самое и получилось.
Спасибо
...
Рейтинг: 0 / 0
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Поиск узла по TreeView / 15 сообщений из 15, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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