Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 17.05.2013, 17:40
StormMan StormMan вне форума
Прохожий
 
Регистрация: 14.05.2013
Сообщения: 3
Версия Delphi: Delphi 7
Репутация: 10
Вопрос treeview заполнение и автонумерация

Добрый день уважаемые программисты. На форме есть компонент Treeview, два Edit (1 для родителя, 2 для дочерней ветки) и три Button (Добавить родителя, добавить дочернюю ветвь, третья удалить выделенный узел).
Как сделать так чтобы при добавлении узлов дерева Родителям и дочерним ветками присваивалась сквозная нумерация вот так:

1. Цвет
1. Красный
2. Синий
3. Зеленый
....
N. Фиолетовый
2. Фигура
1. Квадрат
2. Круг
3. Узел
1. Узел
2. Узел
И при удалении узла (либо родителя либо дочерней) к пример "Красный" и "Фигура" , получится так:

1. Цвет
1. Синий
2. Зеленый
....
N. Фиолетовый
2. Узел
1. Узел
2. Узел
Ответить с цитированием
  #2  
Старый 18.05.2013, 07:26
Аватар для Alegun
Alegun Alegun вне форума
LMD-DML
 
Регистрация: 12.07.2009
Адрес: Богородское
Сообщения: 3,025
Версия Delphi: D7E
Репутация: 1834
По умолчанию

Цитата:
Сообщение от StormMan
...Как сделать так чтобы при добавлении узлов дерева Родителям и дочерним ветками присваивалась сквозная нумерация...
Наверное нужно было перебирать используя HasChildren высчитывая индексы, но для упрощения сборки появилось всё таки это
Код:
function NumStr(ds: string; vs: integer): string;
begin
 Result:= IntToStr(vs) + Copy(ds, Pos('.', ds), Length(ds));
end;

procedure TMainForm.Button1Click(Sender: TObject);
var
 i, b : integer;
 tn, Child: TTreeNode;
begin
  // на примере удаления
  TreeView1.Items.Delete(TreeView1.Selected);
  // или add
{............}

  i:= 1;
 if TreeView1.Items[0] <> nil then
  begin
   tn:= TreeView1.Items[0]; // Переименование корневых узлов
    repeat
     tn.Text:= NumStr(tn.Text, i);
      b:=0;
     Child:= tn.GetFirstChild; // Детишек корня
      repeat
       inc(b);
       Child.Text:= NumStr(Child.Text, b);
       Child := tn.GetNextChild(Child);
      until Child = nil;

     tn:= tn.GetNextSibling;
     inc(i);
    until tn = nil;
  end;
end;
перебираются все узлы и их потомки (для увеличения глубины нужно ещё циклы repeat вкладывать), поэтому, если их будет много, то...
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 17:15.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter