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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как в TreeView получить перечень всех дочерних, ветвей от выбранной ветви 
:(
    Опции темы
Paranoik65
Дата 9.5.2004, 21:06 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Как в TreeView получить перечень всех дочерних
ветвей от выбранной ветви
  Вверх
Alex
Дата 9.5.2004, 23:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

Репутация: 80
Всего: 162



Код
function GetTVPath(Node: TTreeNode; Separator: Char): String;
// Возвращает полный путь к элементу в TreeView
// Separator - разделитель
begin
 Result:= '';
 if Node = nil then exit;
 while Node <> nil do begin
   Result:= Node.Text + Separator + Result;
   Node:= Node.Parent;
 end;
 if Length(Result) <> 0 then Delete(Result, Length(Result), 1);
end;



--------------------
Написать можно все - главное четко представлять, что ты хочешь получить в конце. 
PM Skype   Вверх
Paranoik65
Дата 9.5.2004, 23:44 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











2 alex-co
Ты вопрос читал, я вообще про_это не спрашивал!
  Вверх
x77
Дата 9.5.2004, 23:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

Репутация: 19
Всего: 22



TTreeNode.GetFirstChild, TTreeNode.GetNextChild


--------------------
Я никогда не сопротивлялся искушению, поскольку узнал: что мне
не нравится, то меня не искушает.
© Джордж Бернард Шоу (Ирландия)
PM MAIL ICQ   Вверх
Medved
Дата 10.5.2004, 00:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 7209
Регистрация: 15.9.2002
Где: Kazakhstan, Astan a

Репутация: 14
Всего: 154



рекурсией батенька, рекурсией.


--------------------
http://extreme.sport-express.ru/
...и неважно сколько падал, важно сколько ты вставал...
PM MAIL WWW ICQ Skype GTalk   Вверх
Alex
Дата 10.5.2004, 10:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

Репутация: 80
Всего: 162



Цитата(Paranoik65 @ 10.5.2004, 00:44)
2 alex-co
Ты вопрос читал, я вообще про_это не спрашивал!

Упс rolleyes.gif


--------------------
Написать можно все - главное четко представлять, что ты хочешь получить в конце. 
PM Skype   Вверх
Paranoik65
Дата 10.5.2004, 15:57 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Цитата(Pegas @ 10.5.2004, 00:14)
рекурсией батенька, рекурсией.

Дык так и делаю батеньки, только вот Access Violation Вылетает.
МнеБ Примерчик аля сорс код! smile.gif

И еще почемуто GeTNextChild не определяет Дорние ветки Дорней ветви.
Во всяком случаи у меня sad.gif
  Вверх
Alex
  Дата 10.5.2004, 16:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

Репутация: 80
Всего: 162



Ну рас ошибся пришлось писать: smile.gif
Код
procedure GetListTVNode(SelNode: TTreeNode; List: tStrings; Separator: Char);

 procedure ScanNodes(Node: TTreeNode; path: String);
 begin
   Node := Node.GetFirstChild;
   while  Node <> nil  do begin
     if  Node.HasChildren  then
       ScanNodes(Node, path + Separator + Node.Text)
     else
       List.Add(       path + Separator + Node.Text);
     Node := Node.getNextSibling;
   end;
 end;

begin
 List.BeginUpdate;
 try
   List.Clear;

   if SelNode = nil then Exit;

   if  SelNode.HasChildren  then
     ScanNodes(SelNode, SelNode.Text)
   else
     List.Add(SelNode.Text);

 finally
   List.EndUpdate;
 end;
end;


Это сообщение отредактировал(а) alex-co - 10.5.2004, 17:01


--------------------
Написать можно все - главное четко представлять, что ты хочешь получить в конце. 
PM Skype   Вверх
Paranoik65
Дата 10.5.2004, 17:51 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











alex-co спасибо но немного не то.

Народ мне нужно чтоб проиходил перебор
от самой Молодой ветки до самой старой
тоесть результат должен быть такой: "a7,a6,a5,a8,a4,a3,a2,a1"


|
-[a1]
|
-[a2]
|
-[a3]
| |
| -[a4]
| |
| -[a8]
-[a5]
| |
| -[a6]
|
|-[a7]
  Вверх
Paranoik65
Дата 10.5.2004, 18:00 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Так красивее

Код

|
-[a1]
 |
 -[a2]
   |
   -[a3]
   |  |
   |  -[a4]
   |  |
   |  -[a8]
   -[a5]
   | |
   | -[a6]
   |
   |-[a7]

  Вверх
Alex
Дата 10.5.2004, 18:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

Репутация: 80
Всего: 162



А, что такой вариант не работает?
Код
var
 i: Integer;
begin
 for i:= TreeView1.Items.Count-1 downto 0 do
   Label1.Caption:= Label1.Caption + ',' + TreeView1.Items[i].Text;



--------------------
Написать можно все - главное четко представлять, что ты хочешь получить в конце. 
PM Skype   Вверх
Paranoik65
Дата 10.5.2004, 19:35 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Цитата
А, что такой вариант не работает?

Дык повторяю нужно для одного Определённого нода а не всех ветвей TreeView
  Вверх
x77
Дата 10.5.2004, 19:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

Репутация: 19
Всего: 22



так тебе нужны родительские ветви, а не дочерние.

Код
function GetNode (Node: TTreeNode): string;
begin
 Result := '';
 while Node.Level >= 0 do begin
   if Result <> '' then
     Result := Result + ',';
   Result := Result + Node.Text;
   Node:= Node.Parent;
 end;
end;



--------------------
Я никогда не сопротивлялся искушению, поскольку узнал: что мне
не нравится, то меня не искушает.
© Джордж Бернард Шоу (Ирландия)
PM MAIL ICQ   Вверх
Paranoik65
Дата 10.5.2004, 20:33 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Цитата(x77 @ 10.5.2004, 19:41)
так тебе нужны родительские ветви, а не дочерние.

Код
function GetNode (Node: TTreeNode): string;
begin
 Result := '';
 while Node.Level >= 0 do begin
   if Result <> '' then
     Result := Result + ',';
   Result := Result + Node.Text;
   Node:= Node.Parent;
 end;
end;

Да нет, дочерние мне нужны но в обратном порядке. От дочерней до родителя.

  Вверх
x77
Дата 10.5.2004, 20:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

Репутация: 19
Всего: 22



а если в варианте alex-co немного изменить:

Код
for i:= TreeView1.Selected.Index downto 0 do



--------------------
Я никогда не сопротивлялся искушению, поскольку узнал: что мне
не нравится, то меня не искушает.
© Джордж Бернард Шоу (Ирландия)
PM MAIL ICQ   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

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

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

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

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


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

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


 




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


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

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