Когда я писал этот код, у меня была цель по индексу TOutlineNode (который
являлся результатом поиска) раскрыть его путь (т.е. раскрыть дочерние узлы,
ведующие к нему), не затрагивая при это остальные узлы.
Следующая процедура в качестве параметра принимает индекс, после чего
раскрывает путь к элементу с этим индексом.
Процедура подразумевает работу с объектом TOutline, имеющим имя Outline.
var
Outline: TOutline;
procedure TSearchDlg.ExpandPathToFoundItem(const FoundItemIndex: Longint);
{----------------------------------------------------------------------------
Открываем путь к данному элементу (элемент определяется номером индекса).
До корневого элемента необходимо раскрывать только родителей.
----------------------------------------------------------------------------}var
ItemIndex: Longint;
Found: Boolean;
LastCh: Longint;
Path: string;
ItemText: string;
SepPos: Integer;
OldSep: string;
begin{Сохраняем старый ItemSpearator}
OldSep := Outline.ItemSeparator;
{Устанавливаем новый ItemSeparator}
Outline.ItemSeparator := "\";
{Получаем полный путь к TOutlineNode и добавляем "\".
Это делается для упрощения последующего алгоритма}
Path := Outline.Items[FoundItemIndex].FullPath + "\";
{Зацикливаемся до тех пор, пока не будет достигнут конец пути}while Length(Path) > 0 dobegin{Определяем в пути позицию первого "\"}
SepPos := Pos("\", Path);
{Изолируем элемент TOutlineNode}
ItemText := Copy(Path, 1, SepPos - 1);
{Определяем индекс TOutlineNode}
ItemIndex := Outline.GetTextItem(ItemText);
{Раскрываем его}
Outline.Items[ItemIndex].Expand;
{Вырезаем из строки раскрытый TOutlineNode}
Path := Copy(Path, SepPos + 1, Length(Path) - SepPos + 1);
end;
{Восстанавливаем оригинальный ItemSeparator}
Outline.ItemSeparator := OldSep;
end;
Детали
Давайте присвоим элементу желаемый путь:
"My Computer\Hardware\SoundCard\Base Adress"
На первом шаге
возвращается приведенный выше путь. Затем изолируется подстрока "My Computer".
Затем с помощью метода "GetTextItem" определяется индекс TOutlineNode "My
Computer". Метод "Expand" раскрывает это дерево. Впоследствие "My Computer"
вырезается из пути, и новым путем становится "Hardware\SoundCard\Base Adress".
Затем определяется индекс "Hardware", раскрывается, и снова выразается.
Данная процедура повторяется до тех пор, пока не останется пути, который можно
раскрыть. После чего полностью раскрывается путь передаваемой TOutlineNode.
Если Вас заинтересовала или понравилась информация по разработке на Delph - "Раскрытие пути к элементу TOutline по его индексу", Вы можете поставить закладку в социальной сети или в своём блоге на данную страницу: Так же Вы можете задать вопрос по работе этого модуля или примера через форму обратной связи, в сообщение обязательно указывайте название или ссылку на статью!