Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 15.06.2010, 14:58   #1
Sensizu
Otsukitakitte
Форумчанин
 
Аватар для Sensizu
 
Регистрация: 01.10.2009
Сообщений: 126
По умолчанию Работа с TreeView

Есть алгоритм:
Код:
 RzBox.ApplyFilePath(OD.FileName);
  dr.Directory:=OD.FileName;

  FindIt(rzBox.Directory,'*.*',ListBox);

  stree.Items.AddFirst(nil,rzBox.Directory);
  stree.Items.Item[0].ImageIndex:=1;
  stree.Items.Item[0].SelectedIndex:=1;
  rzBox.ItemIndex:=0;

  // ADDING EXTRA FOLDERS TO THE LIST
  dr.Parent.FindChildControl(dr.Directory);
  dr.ItemIndex:=dr.ItemIndex+1;
  for i:=1 to dr.Count-dr.ItemIndex do
    begin
    stree.Items.AddChild(stree.Items[0],dr.Items[dr.ItemIndex]);
      if i=1 then begin stree.Items.Item[1].ImageIndex:=1; stree.Items.Item[1].SelectedIndex:=1; end;
    stree.Items.Item[stree.Items.GetFirstNode.Index+i].ImageIndex:=1;
    stree.Items.Item[stree.Items.GetFirstNode.Index+i].SelectedIndex:=1;

    rzBox.ApplyFilePath(dr.Directory+'/'+dr.Items[dr.ItemIndex]);
     if rzBox.Items.Count<>0 then
      begin
        for ii:=1 to rzBox.Items.Count-1 do
        begin
        stree.Items.AddChildFirst(stree.Items[stree.Items.GetFirstNode.Index+i], rzBox.Items[rzBox.ItemIndex]);
        rzBox.ItemIndex:=rzBox.ItemIndex+1;
        end;
      end else Refresh;
    dr.ItemIndex:=dr.ItemIndex+1;
  end;

  RzBox.Refresh; rzBox.Update;
  RzBox.ApplyFilePath(OD.FileName);
  for i:=1 to rzBox.Items.Count do
  begin
  stree.Items.AddChild(stree.Items[0],rzBox.Items[rzBox.ItemIndex]);
  stree.Items.Item[stree.Items.GetFirstNode.Index+1].ImageIndex:=0;
  rzBox.ItemIndex:=rzBox.ItemIndex+1;
  end;
  end else Refresh;
Где rzBox - FileListBox, dr - Directory List, stree - TreeView. Это функция кода кнопки "Открыть". При нажатии на неё, пользователь выбирает директорию и конкретный файл, который хочет открыть. Сначала, rzBox загружает директорию OD.FileName (OD - OpenDialog) и проверяет есть ли в ней файлы подходящего формата (форматы записаны в параметре самого rzBox). Если есть файлы - добавляет их в начало списка stree (а перед этим, создаёт главную папку с названием OD.FileName). После этого, dr (DirectoryList) открывает тот же путь, но его задача - узнать сколько в папке OD.FileName дочерних папок. По цыклу считывания добавляю дочерние папки как Child элементы в главный Item под именем OD.FileName. Теперь, когда у нас добавлены файлы которые лежат непосредственно в открытой директории, и отображаются все дочерние папки, снова в дело вступает rzBox. Циклом он подключается к каждой дочерней папке и проверят наличее файлов в ней. Если файл(ы) имеются - добавляет их именно в дочернюю папку. Пример:
Открываем C:\Folder\. В нём лежит файл cpu.txt, index.html. Структура нашего дерева такова:
» C:\Folder\
__» index.html
__» cpu.txt
Теперь мы алгоритмом узнаём, что в папке C:\Folder\ имеется вложеная папка "Архив", а в ней файлы arch.txt, new.txt. И структура должна принять вид:
» C:\Folder\
__» Архив
_____» arch.txt
_____» new.txt
__» index.html
__» cpu.txt
Моя проблема в том, что я не могу программно получить индекс айтима "Архив" (если смотреть по примеру). Не могу получить вот этот индекс:

Пытаюсь получить в строчке:
Код:
stree.Items.AddChildFirst(stree.Items[stree.Items.GetFirstNode.Index+i], rzBox.Items[rzBox.ItemIndex]);
Но получаю ошибку о том: List out of bound (-1). Неправильный индекс. Помогите пожалуйста исправить правильно эту строку.
Помог - ставь плюс.
$("question").onAnswer(function() { $(this).getItWright(true); });

Последний раз редактировалось Sensizu; 15.06.2010 в 15:01.
Sensizu вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
работа с treeview street-walker Общие вопросы Delphi 4 10.05.2010 19:13
Работа с TreeView orkus Общие вопросы Delphi 4 06.04.2010 13:56
Работа с деревом TreeView и директория каталогов SERGOFF Общие вопросы Delphi 6 28.03.2010 20:39
Работа с TreeView zotox Общие вопросы Delphi 2 18.09.2009 23:00
Работа с TreeView Demien Общие вопросы Delphi 3 02.07.2009 16:57