Советы по Delphi

         

Раскрытие пути к элементу TOutline по его индексу


Когда я писал этот код, у меня была цель по индексу 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 do begin {Определяем в пути позицию первого '\'} 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. [001517]



Содержание раздела