Модераторы: Poseidon, Snowy, bems, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Создание PathToNode, компонент TTreeview 
:(
    Опции темы
Akella
Дата 14.5.2003, 13:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 36
Всего: 329



Нужна функция для того чтобы из строковой переменной создать ветку в компоненте TTreeview
Пример:

Var
vP: String;
...
vP:='C:\MyFolder\Folder1\Folder2';

А Теперь из этого пути нужно создать дерево каталогов
PM MAIL   Вверх
<Spawn>
Дата 14.5.2003, 14:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Око кары:)
****


Профиль
Группа: Экс. модератор
Сообщений: 2776
Регистрация: 29.1.2003
Где: Екатеринбург

Репутация: 44
Всего: 64



Ну дак сам реализуй, например, так(Конечно не самый лучший вариант, но я делал на скорую руку smile.gif ):

Код
procedure PathToNodes(Path:string);
var
i,SavedIndex:integer;
ParentNode:TTreeNode;
begin
SavedIndex:=0;
for i:=0 to Length(Path)-1 do
 if Path[i]='\' then  begin
  if SavedIndex=0 then
   begin
    ParentNode:=Form1.TreeView1.Items.Add(nil,Copy(Path,1,i-1));
    SavedIndex:=i;
   end
  else
   begin
    ParentNode:=Form1.TreeView1.Items.AddChild(ParentNode,Copy(Path,SavedIndex+1,(i-1)-SavedIndex));
    SavedIndex:=i;
   end;
  end;
end



--------------------
"Для некоторых людей программирование является такой же внутренней потребностью, подобно тому, как коровы дают молоко, или писатели стремятся писать" - Николай Безруков.
PM MAIL ICQ   Вверх
<Spawn>
Дата 14.5.2003, 14:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Око кары:)
****


Профиль
Группа: Экс. модератор
Сообщений: 2776
Регистрация: 29.1.2003
Где: Екатеринбург

Репутация: 44
Всего: 64



Только эта фукция не добавляет посоеднего файла, но можно маленько подредактировать, например, добавив проверку на конец всей строки:

Код
if i=Length(Path)-1  then
  ParentNode:=Form1.TreeView1.Items.AddChild(ParentNode,Copy(Path,SavedIndex+1,(i-1)-SavedIndex));


Т.е. полностью это будет выгядеть так:
Код
procedure PathToNodes(Path:string);
var
i,SavedIndex:integer;
ParentNode:TTreeNode;
begin
SavedIndex:=0;
for i:=0 to Length(Path)-1 do
begin
 if Path[i]='\' then
   if SavedIndex=0 then
    begin
     ParentNode:=Form1.TreeView1.Items.Add(nil,Copy(Path,1,i-1));
     SavedIndex:=i;
    end
   else
    begin
     ParentNode:=Form1.TreeView1.Items.AddChild(ParentNode,Copy(Path,SavedIndex+1,(i-1)-SavedIndex));
     SavedIndex:=i;
    end;
 if i=Length(Path)-1  then
  ParentNode:=Form1.TreeView1.Items.AddChild(ParentNode,Copy(Path,SavedIndex+1,(i-1)-SavedIndex));
end;
end;




--------------------
"Для некоторых людей программирование является такой же внутренней потребностью, подобно тому, как коровы дают молоко, или писатели стремятся писать" - Николай Безруков.
PM MAIL ICQ   Вверх
Akella
Дата 21.5.2003, 10:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 36
Всего: 329



Код работает без ошибок, но у последней ветки обрезается текст, т.е из пути "C:\Windows\System\" получается
-C:
|---Windows
|---Syste

PM MAIL   Вверх
<Spawn>
Дата 21.5.2003, 13:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Око кары:)
****


Профиль
Группа: Экс. модератор
Сообщений: 2776
Регистрация: 29.1.2003
Где: Екатеринбург

Репутация: 44
Всего: 64



Ну дак говорю же поставь проверку на конец обрабатываемой строки -
Код
if i=Length(Path)-1  then
 ParentNode:=Form1.TreeView1.Items.AddChild(ParentNode,Copy(Path,SavedIndex+1,(i-1)-SavedIndex));
У меня все ок было(Положил на форму OpenDialog и пробовал с различными путями).


--------------------
"Для некоторых людей программирование является такой же внутренней потребностью, подобно тому, как коровы дают молоко, или писатели стремятся писать" - Николай Безруков.
PM MAIL ICQ   Вверх
<Spawn>
Дата 21.5.2003, 13:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Око кары:)
****


Профиль
Группа: Экс. модератор
Сообщений: 2776
Регистрация: 29.1.2003
Где: Екатеринбург

Репутация: 44
Всего: 64



Кстати, ее можно зделать независящую от конкретного обьекта TTreeView. Т.е., например,можно оформить ввиде функции, возвращающей TTreeNodes.


--------------------
"Для некоторых людей программирование является такой же внутренней потребностью, подобно тому, как коровы дают молоко, или писатели стремятся писать" - Николай Безруков.
PM MAIL ICQ   Вверх
Akella
Дата 22.5.2003, 08:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 36
Всего: 329



Да в компонентах третьих фирм (таких как Rz) есть функция Path FromNode и NodeFromPath, но я не пойму как они работают, а тем более они возвращают не TTreeNodes, а TTreeNode
PM MAIL   Вверх
SmaLL_guest
Дата 22.5.2003, 16:29 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











TreeNode содержит свойство с TreeNodes
  Вверх
<Spawn>
Дата 23.5.2003, 12:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Око кары:)
****


Профиль
Группа: Экс. модератор
Сообщений: 2776
Регистрация: 29.1.2003
Где: Екатеринбург

Репутация: 44
Всего: 64



Цитата(SmaLL_guest @ 22.5.2003, 08:29)
TreeNode содержит свойство с TreeNodes

А может наоборот? smile.gif


--------------------
"Для некоторых людей программирование является такой же внутренней потребностью, подобно тому, как коровы дают молоко, или писатели стремятся писать" - Николай Безруков.
PM MAIL ICQ   Вверх
SmaLL
Дата 28.5.2003, 08:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник Клуба
Сообщений: 557
Регистрация: 17.12.2002
Где: Voronezh

Репутация: 1
Всего: 2



Согласен, как всегда спешка до добра не доводит! wink.gif



--------------------
Что ни делается - всЁ к лучшему! SmallWeb
Мой адрес не дом и не улица, мой адрес родной пивзавод!
PM MAIL WWW ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0506 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.