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

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

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

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

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

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

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

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

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

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

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

а на счет 285 компа я подумаю :)
...
Рейтинг: 0 / 0
Поиск узла по TreeView
    #32085860
LekSyS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
//поиск в дереве структуры подстанций
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
Поиск узла по TreeView
    #32086443
Voha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У меня приблизительно тоже самое и получилось.
Спасибо
...
Рейтинг: 0 / 0
15 сообщений из 15, страница 1 из 1
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Поиск узла по TreeView
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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