Недавно добавленные исходники

•  DeLiKaTeS Tetris (Тетрис)  4 140

•  TDictionary Custom Sort  6 209

•  Fast Watermark Sources  6 009

•  3D Designer  8 904

•  Sik Screen Capture  6 347

•  Patch Maker  6 765

•  Айболит (remote control)  6 747

•  ListBox Drag & Drop  5 620

•  Доска для игры Реверси  96 163

•  Графические эффекты  6 966

•  Рисование по маске  6 235

•  Перетаскивание изображений  5 137

•  Canvas Drawing  5 503

•  Рисование Луны  5 209

•  Поворот изображения  4 756

•  Рисование стержней  3 362

•  Paint on Shape  2 614

•  Генератор кроссвордов  3 506

•  Головоломка Paletto  2 797

•  Теорема Монжа об окружностях  3 606

•  Пазл Numbrix  2 365

•  Заборы и коммивояжеры  3 046

•  Игра HIP  1 999

•  Игра Go (Го)  1 926

•  Симулятор лифта  2 282

•  Программа укладки плитки  1 984

•  Генератор лабиринта  2 440

•  Проверка числового ввода  2 121

•  HEX View  2 456

•  Физический маятник  2 077

 
скрыть

  Форум  

Delphi FAQ - Часто задаваемые вопросы

| Базы данных | Графика и Игры | Интернет и Сети | Компоненты и Классы | Мультимедиа |
| ОС и Железо | Программа и Интерфейс | Рабочий стол | Синтаксис | Технологии | Файловая система |



Delphi Sources

Раскрытие пути к элементу 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.





Похожие по теме исходники

A Star (нахождение кратчайшего пути)

Нахождение кратчайшего пути

Дейкстра: поиск кратчайшего пути

Облако тегов

 



Copyright © 2004-2025 "Delphi Sources" by BrokenByte Software. Delphi World FAQ

Группа ВКонтакте