На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! ПРАВИЛА РАЗДЕЛА · FAQ раздела Delphi · Книги по Delphi
Пожалуйста, выделяйте текст программы тегом [сode=pas] ... [/сode]. Для этого используйте кнопку [code=pas] в форме ответа или комбобокс, если нужно вставить код на языке, отличном от Дельфи/Паскаля.
Следующие вопросы задаются очень часто, подробно разобраны в FAQ и, поэтому, будут безжалостно удаляться:
1. Преобразовать переменную типа String в тип PChar (PAnsiChar)
2. Как "свернуть" программу в трей.
3. Как "скрыться" от Ctrl + Alt + Del (заблокировать их и т.п.)
4. Как прочитать список файлов, поддиректорий в директории?
5. Как запустить программу/файл?
... (продолжение следует) ...

Вопросы, подробно описанные во встроенной справочной системе Delphi, не несут полезной тематической нагрузки, поэтому будут удаляться.
Запрещается создавать темы с просьбой выполнить какую-то работу за автора темы. Форум является средством общения и общего поиска решения. Вашу работу за Вас никто выполнять не будет.


Внимание
Попытки открытия обсуждений реализации вредоносного ПО, включая различные интерпретации спам-ботов, наказывается предупреждением на 30 дней.
Повторная попытка - 60 дней. Последующие попытки бан.
Мат в разделе - бан на три месяца...
Модераторы: jack128, D[u]fa, Shaggy, Rouse_
  
> Как добавить дочерний элемент threeview?
    Мне нужно добавить дочерний элемент в список. Перепробовала много вариантов.
    Вот простой код (потом я собираюсь добавлять элементы через цикл).
    ExpandedWrap disabled
      //РОДИТЕЛЬСКИЕ ЭЛЕМЕНТЫ
      TreeView1.Items.Add(Node, 'Data[1]');
        TreeView1.Items.Add(Node, 'Data[2]');
        TreeView1.Items.Add(Node, 'Data[3]');
        TreeView1.Items.Add(Node, 'Data[4]');
        TreeView1.Items.Add(Node, 'Data[5]');
        TreeView1.Items.Add(Node, 'Data[6]');
       
         if TreeView1.Items.Item[0].Level = 0 then
         begin
           item := TreeView1.Items.Item[0];
           TreeView1.Items.AddChild(item, 'Item1');
           TreeView1.Items.AddChild(item, 'Item2');
         end;
       
         if TreeView1.Items.Item[1].Level = 0 then
         begin
           item := TreeView1.Items.Item[1];
           TreeView1.Items.AddChild(item, 'Item1');
           TreeView1.Items.AddChild(item, 'Item2');
         end;


    Нужно добавлять в первый и второй родительский элемент, но добавляется почему-то только первый, если убрать первое условие, где проверка осуществляется на уровень первого элемента, то добавляется во второй родительский элемент, стоит вернуть первое условие, то добавление происходит в первый родительский элемент. Как сделать добавление в первое и второй родительский элемент? Потом я буду это выводить в цикле. Также мне важно знать как добавить в дочерний элементы (созданные в родительских элементах) еще одни дочернии элементы. Пример на картинке.

    Прикреплённый файлПрикреплённый файлscreen4.jpg (11,22 Кбайт, скачиваний: 9)
    Сообщение отредактировано: Katerina1993 -
      ExpandedWrap disabled
        procedure TForm1.Button1Click(Sender: TObject);
        var
          Node: TTreeNode;
        begin
          Node := TreeView1.Items.Add(nil, 'Data[1]');
          TreeView1.Items.AddChild(Node, 'Item1'); // Data[1] -> Item1
          Node := TreeView1.Items.AddChild(Node, 'Item2'); // Data[1] -> Item2
          TreeView1.Items.AddChild(Node, 'Item1'); // Data[2] -> Item2 -> Item1
          TreeView1.Items.AddChild(Node, 'Item2'); // Data[2] -> Item2 -> Item2
          TreeView1.Items.AddChild(Node, 'Item3'); // Data[2] -> Item2 -> Item3
          TreeView1.Items.AddChild(Node, 'Item4'); // Data[2] -> Item2 -> Item4
          Node := TreeView1.Items.Add(nil, 'Data[2]');
          TreeView1.Items.AddChild(Node, 'Item1'); // Data[2] -> Item1
          TreeView1.Items.AddChild(Node, 'Item2'); // Data[2] -> Item2
          TreeView1.Items.Add(nil, 'Data[3]');
          TreeView1.Items.AddChild(Node, 'Item3'); // Data[2] -> Item3
          TreeView1.Items.AddChild(Node, 'Item4'); // Data[2] -> Item4
          Node := TreeView1.Items.Add(nil, 'Data[4]');
          TreeView1.Items.Add(nil, 'Data[5]');
          TreeView1.Items.AddChild(Node, 'Item1'); // Data[4] -> Item1
          TreeView1.Items.AddChild(Node, 'Item2'); // Data[4] -> Item2
          TreeView1.Items.Add(nil, 'Data[6]');
          TreeView1.Items.AddChild(Node, 'Item3'); // Data[4] -> Item3
          TreeView1.Items.AddChild(Node, 'Item4'); // Data[4] -> Item4
        end;
      Вот так получится то, что вам надо. Вот так выглядит.
      Прикреплённый файлПрикреплённый файлTTreeView.png (20,74 Кбайт, скачиваний: 60)
      Сообщение отредактировано: macomics -
        macomics, спасибо после вашего примера я сразу поняла как выводить через цикл.
          Вот так можно перечислить Node одного уровня без проверки Level
          ExpandedWrap disabled
            Node := Node.GetNextChild(Node);
          При инициализации Node как
          ExpandedWrap disabled
            Node := TreeView1.Itemsю.GetFirstNode;
            repeat
            // Действия над текущим Node
              Node := Node.GetNextChild(Node);
            until Node = nil;
          будут перечислены элементы Data[1], Data[2], Data[3], Data[4], Data[5] Data[6].
            Как поменять данные в дереве изменив только один Index. Допустим у меня данные однотипные и структура выглядит как массив, соответственно в каждом родителе содержатся одинаковы набор данных. Мне нужно изменить скажем во втором родителе, один текст. Я пыталась сделать это вот так.
            ExpandedWrap disabled
              TreeView1.Items[1].Item[2].Item[0].Text:='ok';
               //Где Items[1] - массив Data1
               //Item[2] - массив Status
               //Item[0] - текст

            В итоге я получаю ошибку.
            Цитата
            List Index out of bounds (1)

            Как мне изменить данные, поменяв только один Index, допустим вот здесь.

            Прикреплённый файлПрикреплённый файлscreen5.jpg (20,93 Кбайт, скачиваний: 58)
              Это все потому, что вы обращаетесь со TreeView как с массивом. Хотя элементы в Items и индексируются линейно, но они организованы в древовидную структуру и не привязаны к индексам в Items строго. Для работы с элементами описанной мной ранее структуры попробуйте сделать так.
              ExpandedWrap disabled
                Node := TreeView1.Items.GetFirstNode; // Data[1]
                //                ^-- В этом Items элементы индексируются линейно вне зависимости от уровня вложенности. GetFirstNode вернет старший корневой элемент.
                Caption := Node.Item[1].Item[2].Text; // Data[1] -> Item2 -> Item3

              А вот элементы в объекте Node.Item уже представляют из себя массив дочерних элементов без вложений.
              Сообщение отредактировано: macomics -
                У Node нет свойства Items (список на картинке).
                Прикреплённый файлПрикреплённый файлscreen6.jpg (14,65 Кбайт, скачиваний: 53)
                  ExpandedWrap disabled
                    TreeView1.TopItem.getNextSibling.Item[2].Item[0].text:='ok';
                    Цитата
                    TreeView1.TopItem.getNextSibling.Item[2].Item[0].text:='ok';

                    Поменять параметры "индекса" не получается при попытке выдает ошибку:
                    Цитата
                    List Index out of bounds (1)

                    Это фиксированные параметры индекса, которые не меняются. Моя цель, чтобы в таймере каждую секунду проходился про древовидному списку и менял значение на ok, разумеется через таймер. Количество данных практически одинаковое.
                    Дерево на картинке:
                    Прикреплённый файлПрикреплённый файлscreen7.jpg (33,89 Кбайт, скачиваний: 63)
                    Сообщение отредактировано: Katerina1993 -
                      Да да. В браузере набирал. Лишняя буква s в конце у Node.Item. Возможно в Lazarus свойства чуть отличаются. Как вы определяете Node? У меня вот так вот работает
                      ExpandedWrap disabled
                        unit unit1;
                         
                        {$mode objfpc}{$H+}
                         
                        interface
                         
                        uses
                          Classes, SysUtils, LResources, Forms, Controls, Graphics, Dialogs, ComCtrls,
                          ExtCtrls;
                         
                        type
                         
                          { TForm1 }
                         
                          TForm1 = class(TForm)
                            Timer1: TTimer;
                            TreeView1: TTreeView;
                            procedure FormCreate(Sender: TObject);
                            procedure Timer1Timer(Sender: TObject);
                          private
                         
                          public
                            Node: TTreeNode;
                          end;
                         
                        var
                          Form1: TForm1;
                         
                        implementation
                         
                        { TForm1 }
                         
                        procedure TForm1.FormCreate(Sender: TObject);
                        var
                          i: LongInt;
                        begin
                          with TreeView1.Items do begin
                            Node := Add(nil, 'Data[1]');
                            AddChild(Node, 'Title1');
                            AddChild(Node, 'Text1');
                            Node := AddChild(Node, 'Status');
                            AddChild(Node, 'wait');
                         
                            Node := Add(nil, 'Data[2]');
                            AddChild(Node, 'Title1');
                            AddChild(Node, 'Text1');
                            Node := AddChild(Node, 'Status');
                            AddChild(Node, 'wait');
                         
                            Node := Add(nil, 'Data[3]');
                            AddChild(Node, 'Title1');
                            AddChild(Node, 'Text1');
                            Node := AddChild(Node, 'Status');
                            AddChild(Node, 'wait');
                         
                            Node := Add(nil, 'Data[4]');
                            AddChild(Node, 'Title1');
                            AddChild(Node, 'Text1');
                            Node := AddChild(Node, 'Status');
                            AddChild(Node, 'wait');
                         
                            Node := Add(nil, 'Data[5]');
                            AddChild(Node, 'Title1');
                            AddChild(Node, 'Text1');
                            Node := AddChild(Node, 'Status');
                            AddChild(Node, 'wait');
                         
                            Node := Add(nil, 'Data[6]');
                            AddChild(Node, 'Title1');
                            AddChild(Node, 'Text1');
                            Node := AddChild(Node, 'Status');
                            AddChild(Node, 'wait');
                         
                            Node := GetFirstNode;
                          end;
                          TreeView1.FullExpand;
                        end;
                         
                        procedure TForm1.Timer1Timer(Sender: TObject);
                        begin
                          Node.Items[2].Items[0].Text := 'ok';
                          Node := Node.GetNextChild(Node);
                          if Node = nil then Timer1.Enabled := False;
                        end;
                         
                        initialization
                          {$I unit3.lrs}
                         
                        end.

                      Прикреплённый файлПрикреплённый файлTreeView1.png (16,96 Кбайт, скачиваний: 49)
                      Сообщение отредактировано: macomics -
                        macomics, ваш пример заработал, Node я определяю также:
                        Цитата
                        Node: TTreeNode;

                        Единственное отличие свойство Items нужно заменить на Item. Вот так:
                        Цитата
                        Node.Item[2].Item[0].Text := 'ok';

                        Так как у меня не Lazarus, а Delphi7.
                        Сообщение отредактировано: Katerina1993 -
                          Действительно отличаются. Откопал свою старую книгу, по которой начинал изучать Delphi 7 и там у TTreeNode описан массив Item, а в Lazarus под Linux Items. Но это не страшно.
                          Цитата Katerina1993 @
                          Цитата
                          Node.Item[2].Item[0].Text := 'ok';

                          Так как у меня не Lazarus, а Delphi7.

                          Вот поэтому то я и упомянул Lazarus. Я знаю, что у вас Delphi 7.
                          Сообщение отредактировано: macomics -
                            Создала еще вложенный дочерний элемент под название img, в нем будет содержаться данные о некоторых картинках, ключевое слово big(будет еще small, т.е. два варианта). Количество big в Data[0..9] означает количество изображений. Пример на картинке.
                            Прикреплённый файлПрикреплённый файлscreen8.jpg (32,53 Кбайт, скачиваний: 59)
                            У big есть два параметра type1 и wait. Wait – это что-то вроде status, у родительского элемента data. Здесь он будет принимать два параметра wait и ok. Мне нужно запустить дополнительные цикл, который будет проходить по всем изображением внутри всех родительских элементов Data[0..9] и ставить ok. Только это процедура должна проходить соблюдая чередность, сначала везде проставиться ok у картинок Data[0], закончив устанавливать параметр у картинок Data[0], переходить к Data[1] и т.д. Интервал прохождения одна секунда, если 5 изображений то время затрачено 5 секунд.

                            На счет статуса (status) Data, он будет принимать три параметра ok, wait и current. Большинство из них параметр wait, как на скриншоте.
                            Прикреплённый файлПрикреплённый файлscreen9.jpg (36,86 Кбайт, скачиваний: 54)
                            После завершения прохода одного из родительского элемента ему автоматически присваивается status ok.

                            При переходе на следующий уровень Data[1] или Data[2] им присваивается статус– current (текущий), он может быть один в дереве, пока идет процесс текущего родительского объекта. Это можно увидеть на картинке ниже.
                            Прикреплённый файлПрикреплённый файлscreen10.jpg (36,69 Кбайт, скачиваний: 50)
                            После прохождения по картинкам, статус меняется на “ok”, т.е. процесс завершен. Разумеется само дерево было сделано для наглядности, в основном все переменные я собираюсь хранить в массиве (record). Как мне примерно сделать такие проходы много-уровневые с изменением статуса?
                            Вот мой код:

                            ExpandedWrap disabled
                              unit Unit1;
                               
                              interface
                               
                              uses
                                Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
                                Dialogs, StdCtrls, ComCtrls, ExtCtrls;
                               
                              type
                                TForm1 = class(TForm)
                                  Timer1: TTimer;
                                  TreeView1: TTreeView;
                                  Label1: TLabel;
                                
                                  procedure FormShow(Sender: TObject);
                                  procedure FormCreate(Sender: TObject);
                                  procedure Timer1Timer(Sender: TObject);
                                private
                                  { Private declarations }
                                public
                                  { Public declarations }
                                  vetka,text,data1,item1,Node,Node3: TTreeNode;
                                end;
                               
                               
                                TText=record
                                    description: String;
                                end;
                               
                                TItem=record
                                    text: TText;
                                end;
                                TSmall=record
                                   status:String;
                                   width:Integer;
                                   height:Integer;
                                   type1:String;
                                end;
                                TBig=record
                                   status:String;
                                   width:Integer;
                                   height:Integer;
                                   type1:String;
                                end;
                                TImage=record
                                    big:TBig;
                                    small:TSmall;
                                end;
                                TIndex=record
                                       title : String;
                                       text: String;
                                       status : String;
                                       item:TItem;
                                       img:array of TImage;
                                    end;
                                type
                                  TData = array of TIndex;
                               
                              var
                                Form1: TForm1;
                                Data: TData;
                               
                                st: String;
                                t:Integer = 0;
                                Index:Integer = 0;
                                MaxSet:Integer=0;
                              implementation
                               
                              {$R *.dfm}
                               
                               
                              //Пример записи в массив
                              procedure TForm1.FormShow(Sender: TObject);
                              var i,j: Integer;
                              vetka,text,data1,item1,Node,Node1,Node2: TTreeNode;
                              begin
                                for I := Low(Data) to High(Data) do
                                begin
                                   data1:=TreeView1.Items.Add(nil,'Data['+IntToStr(i)+']');
                               
                                   Node:=TreeView1.Items.AddChild(data1,'Title'+IntToStr(i+1));
                                   Node:=TreeView1.Items.AddChild(Node,Data[i].title);
                               
                               
                                   Node:=TreeView1.Items.AddChild(data1,'Text'+IntToStr(i+1));
                                   Node:=TreeView1.Items.AddChild(Node,Data[i].text);
                               
                                   Node:=TreeView1.Items.AddChild(data1,'Status'+IntToStr(i+1));
                                   Node:=TreeView1.Items.AddChild(Node,Data[i].status);
                               
                                   Node:=TreeView1.Items.AddChild(data1,'item0');
                                   Node:=TreeView1.Items.AddChild(Node,'Text');
                                   Node:=TreeView1.Items.AddChild(Node, 'Description');
                                   Node:=TreeView1.Items.AddChild(Node,Data[i].item.text.description);
                               
                               
                                    Node1:=TreeView1.Items.AddChild(data1,'img');
                               
                                   for J := Low(Data[i].img) to High(Data[i].img) do
                                   begin
                                     Node2:=TreeView1.Items.AddChild(Node1,'big');
                                     Node:=TreeView1.Items.AddChild(Node2,Data[i].img[j].big.status);
                                     Node:=TreeView1.Items.AddChild(Node2,Data[i].img[j].big.type1);
                                   end;
                               
                                end;
                                Node3 := TreeView1.Items.GetFirstNode;
                                
                              end;
                               
                              procedure TForm1.FormCreate(Sender: TObject);
                              begin
                              //В ДОКУМЕНТЕ МАССИВ СОСТОИТ ИЗ 10 ЭЛЕМЕНТОВ, устанавливаем SetLength.
                              SetLength(Data,9);
                               
                              //Резервируем место для нового массива где будут хранится дополнительные данные
                              //ДОПОЛНИТЕЛЬНЫЕ ДАННЫЕ ПОМЕЧЕНЫ КОММЕНТАРИИ НИЖЕ
                              SetLength(Data[0].img,5);
                              SetLength(Data[1].img,3);
                              SetLength(Data[2].img,4);
                              SetLength(Data[3].img,2);
                              SetLength(Data[4].img,7);
                              SetLength(Data[5].img,3);
                              SetLength(Data[6].img,4);
                              SetLength(Data[7].img,8);
                              SetLength(Data[8].img,3);
                              SetLength(Data[9].img,4);
                               
                               
                              Data[0].title:='Название';
                              Data[0].text:='Мой текст';
                              Data[0].status:='current';
                               
                              Data[0].item.text.description:='Описание 1';
                              //Data[0] --> img[0..4] ********************************************************
                              Data[0].img[0].big.type1:='test1';
                              Data[0].img[1].big.type1:='test2';
                              Data[0].img[2].big.type1:='test3';
                              Data[0].img[3].big.type1:='test4';
                              Data[0].img[4].big.type1:='test5';
                               
                              Data[0].img[0].big.status:='wait';
                              Data[0].img[1].big.status:='wait';
                              Data[0].img[2].big.status:='wait';
                              Data[0].img[3].big.status:='wait';
                              Data[0].img[4].big.status:='wait';
                              //END DATA[0] --> img[0..4]*****************************************************
                              Data[1].title:='Название 1';
                              Data[1].text:='Мой текст 1';
                              Data[1].status:='wait';
                              Data[1].item.text.description:='Описание 2';
                              //Data[1] --> img[0..2] ********************************************************
                              Data[1].img[0].big.type1:='test1';
                              Data[1].img[1].big.type1:='test2';
                              Data[1].img[2].big.type1:='test3';
                               
                               
                              Data[1].img[0].big.status:='wait';
                              Data[1].img[1].big.status:='wait';
                              Data[1].img[2].big.status:='wait';
                              //END DATA[1] --> img[0..2] ****************************************************
                               
                               
                              Data[2].title:='Название 2';
                              Data[2].text:='Мой текст 2';
                              Data[2].status:='wait';
                              Data[2].item.text.description:='Описание 3';
                              //Data[2] --> img[0..3] ********************************************************
                              Data[2].img[0].big.type1:='test1';
                              Data[2].img[1].big.type1:='test2';
                              Data[2].img[2].big.type1:='test3';
                              Data[2].img[3].big.type1:='test4';
                               
                              Data[2].img[0].big.status:='wait';
                              Data[2].img[1].big.status:='wait';
                              Data[2].img[2].big.status:='wait';
                              Data[2].img[3].big.status:='wait';
                              //END DATA[2] --> img[0..3] ****************************************************
                              Data[3].title:='Название 3';
                              Data[3].text:='Мой текст 3';
                              Data[3].status:='wait';
                              Data[3].item.text.description:='Описание 4';
                               
                               
                              //Data[3] --> img[0..1] ********************************************************
                              Data[3].img[0].big.type1:='test1';
                              Data[3].img[1].big.type1:='test2';
                               
                               
                              Data[3].img[0].big.status:='wait';
                              Data[3].img[1].big.status:='wait';
                              //END DATA[3] --> img[0..1] ****************************************************
                               
                              Data[4].title:='Название 4';
                              Data[4].text:='Мой текст 4';
                              Data[4].status:='wait';
                              Data[4].item.text.description:='Описание 5';
                              //Data[4] --> img[0..6] ********************************************************
                              Data[4].img[0].big.type1:='test1';
                              Data[4].img[1].big.type1:='test2';
                              Data[4].img[2].big.type1:='test3';
                              Data[4].img[3].big.type1:='test4';
                              Data[4].img[4].big.type1:='test5';
                              Data[4].img[5].big.type1:='test6';
                              Data[4].img[6].big.type1:='test7';
                               
                               
                              Data[4].img[0].big.status:='wait';
                              Data[4].img[1].big.status:='wait';
                              Data[4].img[2].big.status:='wait';
                              Data[4].img[3].big.status:='wait';
                              Data[4].img[4].big.status:='wait';
                              Data[4].img[5].big.status:='wait';
                              Data[4].img[6].big.status:='wait';
                              //END DATA[4] --> img[0..6] ****************************************************
                               
                              Data[5].title:='Название 5';
                              Data[5].text:='Мой текст 5';
                              Data[5].status:='wait';
                              Data[5].item.text.description:='Описание 6';
                              //Data[5] --> img[0..2] ********************************************************
                              Data[5].img[0].big.type1:='test1';
                              Data[5].img[1].big.type1:='test2';
                              Data[5].img[2].big.type1:='test3';
                               
                              Data[5].img[0].big.status:='wait';
                              Data[5].img[1].big.status:='wait';
                              Data[5].img[2].big.status:='wait';
                              //END DATA[5] --> img[0..2] ****************************************************
                               
                              Data[6].title:='Название 6';
                              Data[6].text:='Мой текст 6';
                              Data[6].status:='wait';
                              Data[6].item.text.description:='Описание 7';
                              //Data[6] --> img[0..3] ********************************************************
                              Data[6].img[0].big.type1:='test1';
                              Data[6].img[1].big.type1:='test2';
                              Data[6].img[2].big.type1:='test3';
                              Data[6].img[3].big.type1:='test4';
                               
                               
                              Data[6].img[0].big.status:='wait';
                              Data[6].img[1].big.status:='wait';
                              Data[6].img[2].big.status:='wait';
                              Data[6].img[3].big.status:='wait';
                              //END DATA[6] --> img[0..3] ****************************************************
                               
                              Data[7].title:='Название 7';
                              Data[7].text:='Мой текст 7';
                              Data[7].status:='wait';
                              Data[7].item.text.description:='Описание 8';
                               
                              //Data[7] --> img[0..7] ********************************************************
                              Data[7].img[0].big.type1:='test1';
                              Data[7].img[1].big.type1:='test1';
                              Data[7].img[2].big.type1:='test1';
                              Data[7].img[3].big.type1:='test1';
                              Data[7].img[4].big.type1:='test1';
                              Data[7].img[5].big.type1:='test1';
                              Data[7].img[6].big.type1:='test1';
                              Data[7].img[7].big.type1:='test1';
                               
                               
                               
                              Data[7].img[0].big.status:='wait';
                              Data[7].img[1].big.status:='wait';
                              Data[7].img[2].big.status:='wait';
                              Data[7].img[3].big.status:='wait';
                              Data[7].img[4].big.status:='wait';
                              Data[7].img[5].big.status:='wait';
                              Data[7].img[6].big.status:='wait';
                              Data[7].img[7].big.status:='wait';
                              //END DATA[7] --> img[0..7] ****************************************************
                               
                              Data[8].title:='Название 8';
                              Data[8].text:='Мой текст 8';
                              Data[8].status:='wait';
                              Data[8].item.text.description:='Описание 9';
                               
                              //Data[8] --> img[0..2] ********************************************************
                              Data[8].img[0].big.type1:='test1';
                              Data[8].img[1].big.type1:='test1';
                              Data[8].img[2].big.type1:='test1';
                               
                               
                              Data[8].img[0].big.status:='wait';
                              Data[8].img[1].big.status:='wait';
                              Data[8].img[2].big.status:='wait';
                               
                              MaxSet:=5;
                               
                              Label1.Caption:='Макс '+IntToStr(MaxSet)+' сек: '+IntToStr(t);
                               
                              //END DATA[8] --> img[0..2] ****************************************************
                               
                              //Data[9].img[0].big.type1:='test1';
                              //Data[9].img[1].big.type1:='test1';
                              //Data[9].img[2].big.type1:='test1';
                              //Data[9].img[3].big.type1:='test1';
                               
                              //Data[9].img[0].big.status:='wait';
                              //Data[9].img[1].big.status:='wait';
                              //Data[9].img[2].big.status:='wait';
                              //Data[9].img[3].big.status:='wait';
                              //********************************************************
                              end;
                               
                              procedure TForm1.Timer1Timer(Sender: TObject);
                              begin
                              inc(t);
                              if t>MaxSet then
                              begin
                                inc(Index);
                                t:=1;
                                Node3.Item[2].Item[0].text:='ok';
                                Node3 := Node3.GetNextChild(Node3);
                              end;
                               
                              Label1.Caption:='Макс '+IntToStr(MaxSet)+' сек: '+IntToStr(t);
                               
                              if Node3 = nil then Timer1.Enabled := False;
                               
                               
                              end;
                               
                              end.
                            Сообщение отредактировано: Katerina1993 -
                              Так в чем собственно проблема. Вместе с Node определяете переменную Index типа Integer и в ней осуществляете проход по картинкам.
                              ExpandedWrap disabled
                                procedure TForm1.Timer1Timer(Sender: TObject);
                                begin
                                  with Node.Item[3] do begin
                                    if Index < Count then
                                      Item[Index].Item[1].Text := 'ok'; // Data[Node] -> Img -> Big[Index] -> Status
                                    inc(Index);
                                    if Index >= Count then
                                      repeat
                                        with Node.Item[2] do begin
                                          Text := 'ok'; // Data[Node] -> Status
                                          Node := Node.GetNextChild(Node); // Data[Node++] -- Переходим к следующей
                                          Text := 'current'; // Data[Node] -> Status
                                          Index := Low(Node.Item);
                                        end;
                                      until Count > 0; // Пройти все Data[Node], у которых нет картинок, без задержки.
                                // Чтобы на каждой Data[Node] Без картинок задержаться на 1 интервал таймера просто
                                // уберите цикл repeat ... until Count > 0 оставив внутреннее содержимое без цикла.
                                  end;
                                end;
                              Перед запуском таймера надо сделать так
                              ExpandedWrap disabled
                                Node := TreeView1.Items.GetFirstNode;
                                Node.Item[2].Text := 'current';
                                Index := Low(Node.Item);
                                Timer1.Enabled := True; // Запустили таймер
                              Сообщение отредактировано: macomics -
                                Цитата
                                Low(Node.Item)

                                Не работает, я уже создала новый проект, чтобы протестировать отдельно эту функцию.
                                ExpandedWrap disabled
                                  unit Unit1;
                                   
                                  interface
                                   
                                  uses
                                    Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
                                    Dialogs, ComCtrls, StdCtrls;
                                   
                                  type
                                    TForm1 = class(TForm)
                                      TreeView1: TTreeView;
                                      Button1: TButton;
                                      procedure FormShow(Sender: TObject);
                                      procedure Button1Click(Sender: TObject);
                                    private
                                      { Private declarations }
                                    public
                                      { Public declarations }
                                    end;
                                  var
                                    Form1: TForm1;
                                    Node1:TTreeNode;
                                  implementation
                                   
                                  {$R *.dfm}
                                   
                                   
                                   
                                  procedure TForm1.FormShow(Sender: TObject);
                                  begin
                                    Node1 := TreeView1.Items.GetFirstNode;
                                  end;
                                   
                                  procedure TForm1.Button1Click(Sender: TObject);
                                  begin
                                  ShowMessage(IntToStr(Low(Node1.Item)));
                                  ShowMessage(Node1.Item[1].text);
                                  Node1 := Node1.GetNextChild(Node1);
                                  if Node1 = nil then Button1.Enabled := False;
                                  end;
                                   
                                  end.

                                Получаю сообщение об ошибке.
                                Цитата

                                [Error] Unit1.pas(36): '[' expected but ')' found
                                  Тогда просто присваивайте 0 вместо Low(Node.Item).
                                    Почти получилось, пришлось переделать индексы под свой вариант иначе выдовало ошибку, однако при прохожде картинок когда завершается цикл и происходи переход на следующую data, все равно статус у предыдущего элемента (родителя) остается current, хотя автоматически должен быть ok.

                                    Однако если убрать эту строчку (она указана стрелкой в коде), то программа присваивает предыдущему значению ok. Хотя последовательность действий нужно сделать так сначала wait, потом когда дойдет очередь до элемента (родителя) current и только после прохождения всех итераций в родительском элементе сделать статус ok. Я не знаю может следует добавить еще какое-нибудь условие?

                                    ExpandedWrap disabled
                                      with Node3.Item[4] do begin
                                          if Index1 < Count then
                                            Item[Index1].Item[0].text:='ok';
                                           //Item[Index1].Item[1].Text := 'ok'; // Data[Node] -> Img -> Big[Index] -> Status
                                           inc(Index1);
                                           if Index1 >= Count then repeat with Node3.Item[2] do begin
                                            Item[0].Text := 'ok'; // Data[Node] -> Status
                                            Node3 := Node3.GetNextChild(Node3); // Data[Node++] -- Переходим к следующей
                                            Item[0].Text := 'current'; <--- ВОТ ЭТУ СТРОЧКУ
                                            Index1 := Low(0);
                                          end until Count > 0;
                                        end;
                                    Сообщение отредактировано: Katerina1993 -
                                      Добавьте к коду запуска таймера следующий фрагмент.
                                      ExpandedWrap disabled
                                            Node := TreeView1.Items.GetFirstNode;
                                            if Node3 <> nil then Node3.Item[2].Text := 'current'; // Установить у Data[0] -> Status = current
                                            Node3 := Node3.GetNextChild(Node3);
                                            while Node3 <> nil do begin
                                              Node3.Item[0].Text := 'wait'; // У все последующих сбросить статус в wait
                                              for Index1 := 0 to Node3.Item[4].Item[Index1].Item[0].Text := 'wait'; // Всем картинкам тоже установить статус wait
                                              Node3 := Node3.GetNextChild(Node3);
                                            end;
                                            Index1 := 0; // Установить начальные значения индексных переменных
                                            Node3 := TreeView1.Items.GetFirstNode;
                                            if Node3 <> nil then
                                              Timer1.Enabled := True; // Запустить таймер
                                      А в функции таймера все статусы будут последовательно переписаны на ok
                                      ExpandedWrap disabled
                                            procedure TForm1.Timer1Timer(Sender: TObject);
                                            begin
                                              with Node3.Item[4] do begin
                                                if Index < Count then
                                                  Item[Index1].Item[0].Text := 'ok'; // Data[Node] -> Img -> Big[Index] -> Status
                                                inc(Index1);
                                                if Index1 >= Count then
                                                  with Node3.Item[2] do begin
                                                    Text := 'ok'; // У этой Data все картинки закончились. Изменяем статус Data c current на ok одновременно с установкой статуса у последней картинки в ok
                                                    Node3 := Node3.GetNextChild(Node3); // -- Переходим к следующей
                                                    Text := 'current'; // У следующей Data изменяем статус из wait в current одновременно с изменением статуса у последней картинки у предыдущей Data и изменением статуса предыдущей Data из current на ok
                                                    Index1 := 0; // Сброс счетчика картинок
                                                  end;
                                              end;
                                            end;
                                      А так можно сделать, если надо чтобы между изменениями статуса последней картинки, изменением статуса Data и изменением статуса следующей Data тоже были задержки
                                      ExpandedWrap disabled
                                            Node := TreeView1.Items.GetFirstNode;
                                            if Node3 <> nil then Node3.Item[2].Text := 'current'; // Установить у Data[0] -> Status = current
                                            Node3 := Node3.GetNextChild(Node3);
                                            while Node3 <> nil do begin
                                              Node3.Item[0].Text := 'wait'; // У все последующих сбросить статус в wait
                                              for Index1 := 0 to Node3.Item[4].Item[Index1].Item[0].Text := 'wait'; // Всем картинкам тоже установить статус wait
                                              Node3 := Node3.GetNextChild(Node3);
                                            end;
                                            Index1 := -1; // Установить начальные значения индексных переменных
                                            Node3 := TreeView1.Items.GetFirstNode;
                                            if Node3 <> nil then
                                              Timer1.Enabled := True; // Запустить таймер
                                         
                                        // ...
                                         
                                            procedure TForm1.Timer1Timer(Sender: TObject);
                                            begin
                                              case Index1 of
                                                -2: begin
                                                      Node3.Item[2].Text := 'ok';
                                                      Node3 := Node3.GetNextChild(Node3);
                                                      if Node3 = nil then Timer1.Enabled := False;
                                                end;
                                                -1: Node3.Item[2].Text := 'ok';
                                              else
                                                with Node3.Item[4] do begin
                                                  if Index < Count then
                                                    Item[Index1].Item[0].Text := 'ok';
                                                if Index1 >= Count then Index1 := -3; // Потом все равно будет inc(Index1) и значение станет -2. Как раз первый вариант case Index1 of
                                              end;
                                              inc(Index1);
                                            end;
                                      Сообщение отредактировано: macomics -
                                        Я сейчас посмотрел несколько сайтов по конструкции FOR почитала документацию и не нашла пример такой конструкции.
                                        ExpandedWrap disabled
                                          for Index1 := 0 to Node3.Item[4].Item[Index1].Item[0].Text := 'wait';

                                        Вы уверены, что здесь нет ошибки. Может такая конструкция используется в более поздней версии Delphi но у меня выдает ошибку.
                                        Цитата
                                        [Error] Unit1.pas(115): Incompatible types: 'Integer' and 'procedure, untyped pointer or untyped parameter'
                                        Сообщение отредактировано: Katerina1993 -
                                          Это все из-за сонного состояния. Набирал в браузере. Естественно не допечатал кусок.
                                          ExpandedWrap disabled
                                            for Index1 := 0 to Node3.Count - 1 do Node3.Item[4].Item[Index1].Item[0].Text := 'wait';
                                            Вроде получилось, в коде есть некоторая проблема, например в Timer когда проходит итерация, вы используете with Node3.Item[2] do begin, при этом вызываете в дальнейшем text, это понятно так как with присоединяет компонент к свойствам. Однако из-за этого почему-то предыдущий элемент не заменяется на ok, а по прежнему остается current, но если вместо этого:
                                            ExpandedWrap disabled
                                              with Node3.Item[2] do begin
                                                          Text := 'ok'; // У этой Data все картинки закончились. Изменяем статус Data c current на ok одновременно с установкой статуса у последней картинки в ok
                                                          Node3 := Node3.GetNextChild(Node3); // -- Переходим к следующей
                                                          Text := 'current'; // У следующей Data изменяем статус из wait в current одновременно с изменением статуса у последней картинки у предыдущей Data и изменением статуса предыдущей Data из current на ok
                                                          Index1 := 0; // Сброс счетчика картинок
                                                        end;

                                            Заменить на это, то все работает:
                                            ExpandedWrap disabled
                                               with Node3.Item[2] do begin
                                                      //Изменила некоторые параметры, так как у меня другой уровень вложенности дерева
                                                          Node3.Item[2].Item[0].Text := 'ok';
                                                          Node3 := Node3.GetNextChild(Node3);
                                                          Node3.Item[2].Item[0].Text := 'current';
                                                          Index1 := 0;
                                                        end;


                                            В FormShow у меня другой уровень вложенности, поэтому я код изменила.
                                            ExpandedWrap disabled
                                                   while Node3 <> nil do begin
                                                      Node3.Item[2].Item[0].Text := 'wait'; // У все последующих сбросить статус в wait
                                                     for Index1 := 0 to Node3.Item[4].Count - 1 do Node3.Item[4].Item[Index1].Item[0].Text := 'wait';
                                                     Node3 := Node3.GetNextChild(Node3);
                                                  end;
                                                  Index1 := 0; // Установить начальные значения индексных переменных
                                                  Node3 := TreeView1.Items.GetFirstNode;
                                                  if Node3 <> nil then
                                                    Timer1.Enabled := True; // Запустить таймер


                                            Добавлено
                                            Я проверила еще раз на самом деле первоначальный вариант, через repeat ... until был более правильный, потому что без него итерация над картинками происходит только Data[0], потом процесс останавливается. repeat...util, нужно только слегка изменить на основе предыдущего фрагмента кода.
                                            ExpandedWrap disabled
                                              procedure TForm1.Timer1Timer(Sender: TObject);
                                                  begin
                                                  //ShowMessage(IntToStr(Node3.Item[4].Count));
                                                   with Node3.Item[4] do begin
                                                  if Index1 < Count then
                                                    Item[Index1].Item[0].text:='ok';
                                                   //Item[Index1].Item[1].Text := 'ok'; // Data[Node] -> Img -> Big[Index] -> Status
                                                   inc(Index1);
                                                   if Index1 >= Count then repeat with Node3.Item[2] do begin
                                                    Node3.Item[2].Item[0].Text := 'ok'; // Data[Node] -> Status
                                                    Node3 := Node3.GetNextChild(Node3); // Data[Node++] -- Переходим к следующей
                                                    Node3.Item[2].Item[0].Text := 'current';
                                                    Index1 := Low(0);
                                                  end until Count > 0;
                                                end;
                                                  end;
                                            Сообщение отредактировано: Katerina1993 -
                                              Проверила полностью, ошибка правда в конце появляется, по завершению всех процессов.
                                              Прикреплённый файлПрикреплённый файлscreen11.jpg (43,26 Кбайт, скачиваний: 49)
                                              Сообщение отредактировано: Katerina1993 -
                                                Таймер надо останавливать, когда переход к следующему Data не удался (конец списка)
                                                ExpandedWrap disabled
                                                  if Node3 = nil then
                                                    Timer1.Enabled := False
                                                  else
                                                    Node3.Item[2].Item[0].Text := 'current';
                                                А после repeat блок with Node3.Item[2] do begin можно убрать. Он был добавлен только ради сокращения текста.
                                                Но раз не работает, тогда его тоже убирайте.
                                                ExpandedWrap disabled
                                                  procedure TForm1.Timer1Timer(Sender: TObject);
                                                  begin
                                                     //ShowMessage(IntToStr(Node3.Item[4].Count));
                                                     with Node3.Item[4] do begin
                                                     if Index1 < Count then
                                                        Item[Index1].Item[0].text:='ok';
                                                        //Item[Index1].Item[1].Text := 'ok'; // Data[Node] -> Img -> Big[Index] -> Status
                                                        inc(Index1);
                                                        if Index1 >= Count then repeat
                                                           Node3.Item[2].Item[0].Text := 'ok'; // Data[Node] -> Status
                                                           Node3 := Node3.GetNextChild(Node3); // Data[Node++] -- Переходим к следующей
                                                           if Node3 = nil then begin
                                                              Timer1.Enabled := False;
                                                              break;
                                                           end else begin
                                                              Node3.Item[2].Item[0].Text := 'current';
                                                              Index1 := 0;
                                                           end;
                                                        until Node3.Item[4].Count > 0;
                                                     end;
                                                  end;
                                                Сообщение отредактировано: macomics -
                                                  Я сейчас разбираю вот этот код.
                                                  ExpandedWrap disabled
                                                    case Index1 of
                                                            -2: begin
                                                                  Node3.Item[2].Text := 'ok';
                                                                  Node3 := Node3.GetNextChild(Node3);
                                                                  if Node3 = nil then Timer1.Enabled := False;
                                                            end;
                                                            -1: Node3.Item[2].Text := 'ok';
                                                          else
                                                            with Node3.Item[4] do begin
                                                              if Index < Count then
                                                                Item[Index1].Item[0].Text := 'ok';
                                                            //ShowMessage(IntToStr(Index1));
                                                            if Index1 >= Count then
                                                            begin
                                                            
                                                            Index1 := -3; // Потом все равно будет inc(Index1) и значение станет -2. Как раз первый вариант case Index1 of
                                                            end;
                                                          end;
                                                          inc(Index1);

                                                  В процедуре FormShow, добавлен Index1 := -1;, это значит что Timer прибавит единицу и продолжит с нуля и если например количество картинок у меня 5, то проход по всем картинкам завершится на цифре 4.
                                                  Значит вот это условие, никогда не сработает.

                                                  ExpandedWrap disabled
                                                    if Index1 >= Count then
                                                            begin
                                                            
                                                            Index1 := -3; // Потом все равно будет inc(Index1) и значение станет -2. Как раз первый вариант case Index1 of
                                                            end;

                                                  В итоге Index1 продолжает увеличения и сейчас я постоянно получаю ошибку выхода из диапазона.
                                                  Цитата
                                                  List index out of bounds (0)
                                                  Сообщение отредактировано: Katerina1993 -
                                                    else пропустил. Там все нормально должно быть вот так
                                                    ExpandedWrap disabled
                                                         Node := TreeView1.Items.GetFirstNode;
                                                         if Node3 <> nil then Node3.Item[2].Text := 'current'; // Установить у Data[0] -> Status = current
                                                         Node3 := Node3.GetNextChild(Node3);
                                                         while Node3 <> nil do begin
                                                            Node3.Item[2].Text := 'wait'; // У все последующих сбросить статус в wait
                                                            for Index1 := 0 to
                                                               Node3.Item[4].Item[Index1].Item[0].Text := 'wait'; // Всем картинкам тоже установить статус wait
                                                            Node3 := Node3.GetNextChild(Node3);
                                                         end;
                                                         Index1 := -1; // Установить начальные значения индексных переменных
                                                         Node3 := TreeView1.Items.GetFirstNode;
                                                         if Node3 <> nil then
                                                            Timer1.Enabled := True; // Запустить таймер
                                                       
                                                      // ...
                                                       
                                                      procedure TForm1.Timer1Timer(Sender: TObject);
                                                      begin
                                                         case Index1 of
                                                         -1: Node3.Item[2].Text := 'current';
                                                         else
                                                            with Node3.Item[4] do // Так лучше, чтобы не было лишней задержки.
                                                               if Index1 >= Count then begin
                                                                  Node3.Item[2].Text := 'ok';
                                                                  Node3 := Node3.GetNextChild(Node3);
                                                                  if Node3 = nil then Timer1.Enabled := False;
                                                                  Index1 := -2; // Потом все равно будет inc(Index1) и значение станет -1. Как раз первый вариант case Index1 of
                                                               end else
                                                                  Item[Index1].Item[0].Text := 'ok';
                                                         end;
                                                         inc(Index1);
                                                      end;
                                                    Сообщение отредактировано: macomics -
                                                      Я опять изменила свой код в соотвествии со своим уровнем вложенности.
                                                      Вот пример, без задержки между переходами родительских элементов.
                                                      ExpandedWrap disabled
                                                        with Node3.Item[4] do begin
                                                           if Index1 < Count then
                                                              Item[Index1].Item[0].text:='ok';
                                                              //Item[Index1].Item[1].Text := 'ok'; // Data[Node] -> Img -> Big[Index] -> Status
                                                              inc(Index1);
                                                              if Index1 >= Count then repeat
                                                                 Node3.Item[2].Item[0].Text := 'ok'; // Data[Node] -> Status
                                                                 Node3 := Node3.GetNextChild(Node3); // Data[Node++] -- Переходим к следующей
                                                                 if Node3 = nil then begin
                                                                    Timer1.Enabled := False;
                                                                    break;
                                                                 end else begin
                                                                    Node3.Item[2].Item[0].Text := 'current';
                                                                    Index1 := 0;
                                                                 end;
                                                              until Node3.Item[4].Count > 0;
                                                           end;


                                                      С задержкой между переходами родительских элементов.
                                                      ExpandedWrap disabled
                                                         case Index1 of
                                                           -1: Node3.Item[2].Item[0].Text := 'current';
                                                          
                                                           else
                                                              with Node3.Item[4] do begin // Так лучше, чтобы не было лишней задержки.
                                                                 if Index1 >= Count then begin
                                                                    Node3.Item[2].Item[0].Text := 'ok';
                                                                    Node3 := Node3.GetNextChild(Node3);
                                                                    if Node3 = nil then Timer1.Enabled := False;
                                                                    Index1 := -2; // Потом все равно будет inc(Index1) и значение станет -1. Как раз первый вариант case Index1 of
                                                                    
                                                                 end else
                                                                    Item[Index1].Item[0].Text := 'ok';
                                                           end;
                                                           end;
                                                           inc(Index1);
                                                        ExpandedWrap disabled
                                                          unit unit3;
                                                           
                                                          {$mode objfpc}{$H+}
                                                           
                                                          interface
                                                           
                                                          uses
                                                            Classes, SysUtils, LResources, Forms, Controls, Graphics, Dialogs, ComCtrls,
                                                            ExtCtrls;
                                                           
                                                          type
                                                           
                                                            { TForm1 }
                                                           
                                                            TForm1 = class(TForm)
                                                              Timer1: TTimer;
                                                              TreeView1: TTreeView;
                                                              procedure FormCreate(Sender: TObject);
                                                              procedure Timer1Timer(Sender: TObject);
                                                            private
                                                           
                                                            public
                                                              Node3: TTreeNode;
                                                              Index1: LongInt;
                                                            end;
                                                           
                                                          var
                                                            Form1: TForm1;
                                                           
                                                          implementation
                                                           
                                                          { TForm1 }
                                                           
                                                          procedure TForm1.FormCreate(Sender: TObject);
                                                          var
                                                            i: LongInt;
                                                            m, n: TTreeNode;
                                                          begin
                                                            with TreeView1.Items do begin
                                                              n := Add(nil, 'Data[1]');
                                                              AddChild(n, 'Title1');
                                                              AddChild(n, 'Text1');
                                                              m := AddChild(n, 'Status');
                                                              AddChild(m, '');
                                                              AddChild(n, 'Other');
                                                              n := AddChild(n, 'img');
                                                              m := AddChild(n, 'index[0]');
                                                              AddChild(m, '');
                                                              m := AddChild(n, 'index[1]');
                                                              AddChild(m, '');
                                                              m := AddChild(n, 'index[2]');
                                                              AddChild(m, '');
                                                              m := AddChild(n, 'index[3]');
                                                              AddChild(m, '');
                                                           
                                                              n := Add(nil, 'Data[2]');
                                                              AddChild(n, 'Title1');
                                                              AddChild(n, 'Text1');
                                                              m := AddChild(n, 'Status');
                                                              AddChild(m, '');
                                                              AddChild(n, 'Other');
                                                              n := AddChild(n, 'img');
                                                              m := AddChild(n, 'index[0]');
                                                              AddChild(m, '');
                                                              m := AddChild(n, 'index[1]');
                                                              AddChild(m, '');
                                                              m := AddChild(n, 'index[2]');
                                                              AddChild(m, '');
                                                              m := AddChild(n, 'index[3]');
                                                              AddChild(m, '');
                                                              m := AddChild(n, 'index[4]');
                                                              AddChild(m, '');
                                                              m := AddChild(n, 'index[5]');
                                                              AddChild(m, '');
                                                              m := AddChild(n, 'index[6]');
                                                              AddChild(m, '');
                                                           
                                                              n := Add(nil, 'Data[3]');
                                                              AddChild(n, 'Title1');
                                                              AddChild(n, 'Text1');
                                                              m := AddChild(n, 'Status');
                                                              AddChild(m, '');
                                                              AddChild(n, 'Other');
                                                              n := AddChild(n, 'img');
                                                              m := AddChild(n, 'index[0]');
                                                              AddChild(m, '');
                                                              m := AddChild(n, 'index[1]');
                                                              AddChild(m, '');
                                                           
                                                              n := Add(nil, 'Data[4]');
                                                              AddChild(n, 'Title1');
                                                              AddChild(n, 'Text1');
                                                              m := AddChild(n, 'Status');
                                                              AddChild(m, '');
                                                              AddChild(n, 'Other');
                                                              m := AddChild(n, 'img');
                                                           
                                                              n := Add(nil, 'Data[5]');
                                                              AddChild(n, 'Title1');
                                                              AddChild(n, 'Text1');
                                                              m := AddChild(n, 'Status');
                                                              AddChild(m, '');
                                                              AddChild(n, 'Other');
                                                              n := AddChild(n, 'img');
                                                              m := AddChild(n, 'index[0]');
                                                              AddChild(m, '');
                                                              m := AddChild(n, 'index[1]');
                                                              AddChild(m, '');
                                                              m := AddChild(n, 'index[2]');
                                                              AddChild(m, '');
                                                              m := AddChild(n, 'index[3]');
                                                              AddChild(m, '');
                                                              m := AddChild(n, 'index[4]');
                                                              AddChild(m, '');
                                                              m := AddChild(n, 'index[5]');
                                                              AddChild(m, '');
                                                           
                                                              n := Add(nil, 'Data[6]');
                                                              AddChild(n, 'Title1');
                                                              AddChild(n, 'Text1');
                                                              m := AddChild(n, 'Status');
                                                              AddChild(m, '');
                                                              AddChild(n, 'Other');
                                                              n := AddChild(n, 'img');
                                                              m := AddChild(n, 'index[0]');
                                                              AddChild(m, '');
                                                              m := AddChild(n, 'index[1]');
                                                              AddChild(m, '');
                                                              m := AddChild(n, 'index[2]');
                                                              AddChild(m, '');
                                                              m := AddChild(n, 'index[3]');
                                                              AddChild(m, '');
                                                              m := AddChild(n, 'index[4]');
                                                              AddChild(m, '');
                                                            end;
                                                            TreeView1.FullExpand;
                                                           
                                                            Node3 := TreeView1.Items.GetFirstNode;
                                                            if Node3 <> nil then Node3.Items[2].Text := 'current'; // Установить у Data[0] -> Status = current
                                                            for i := 0 to Node3.Items[4].Count - 1 do
                                                              Node3.Items[4].Items[i].Items[0].Text := 'wait'; // Всем картинкам тоже установить статус wait
                                                            Node3 := Node3.GetNextChild(Node3);
                                                            while Node3 <> nil do begin
                                                              Node3.Items[2].Items[0].Text := 'wait'; // У все последующих сбросить статус в wait
                                                              for i := 0 to Node3.Items[4].Count - 1 do
                                                                Node3.Items[4].Items[i].Items[0].Text := 'wait'; // Всем картинкам тоже установить статус wait
                                                              Node3 := Node3.GetNextChild(Node3);
                                                            end;
                                                            Index1 := -1; // Установить начальные значения индексных переменных
                                                            Node3 := TreeView1.Items.GetFirstNode;
                                                            if Node3 <> nil then
                                                              Timer1.Enabled := True; // Запустить таймер
                                                          end;
                                                           
                                                          procedure TForm1.Timer1Timer(Sender: TObject);
                                                          begin
                                                            case Index1 of
                                                            -1: Node3.Items[2].Items[0].Text := 'current';
                                                            else
                                                               with Node3.Items[4] do // Так лучше, чтобы не было лишней задержки.
                                                                  if Index1 >= Count then begin
                                                                     Node3.Items[2].Items[0].Text := 'ok';
                                                                     Node3 := Node3.GetNextChild(Node3);
                                                                     if Node3 = nil then Timer1.Enabled := False;
                                                                     Index1 := -2; // Потом все равно будет inc(Index1) и значение станет -1. Как раз первый вариант case Index1 of
                                                                  end else
                                                                     Items[Index1].Items[0].Text := 'ok';
                                                            end;
                                                            inc(Index1);
                                                          end;
                                                           
                                                          initialization
                                                            {$I unit3.lrs}
                                                           
                                                          end.
                                                        Вот это у меня точно работает без ошибок. Только не забудьте поправить имя Items на Item.
                                                          Спасибо, вот мой вариант под Delphi7.
                                                          ExpandedWrap disabled
                                                            unit Unit1;
                                                             
                                                            interface
                                                             
                                                            uses
                                                              Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
                                                              Dialogs, StdCtrls, ComCtrls, ExtCtrls;
                                                             
                                                            type
                                                              TForm1 = class(TForm)
                                                                Timer1: TTimer;
                                                                TreeView1: TTreeView;
                                                                Label1: TLabel;
                                                                Button1: TButton;
                                                              
                                                                procedure FormShow(Sender: TObject);
                                                                procedure FormCreate(Sender: TObject);
                                                                procedure Timer1Timer(Sender: TObject);
                                                              private
                                                                { Private declarations }
                                                              public
                                                                { Public declarations }
                                                                vetka,text,data1,item1,Node,Node3: TTreeNode;
                                                              end;
                                                             
                                                             
                                                              TText=record
                                                                  description: String;
                                                              end;
                                                             
                                                              TItem=record
                                                                  text: TText;
                                                              end;
                                                              TSmall=record
                                                                 status:String;
                                                                 width:Integer;
                                                                 height:Integer;
                                                                 type1:String;
                                                              end;
                                                              TBig=record
                                                                 status:String;
                                                                 width:Integer;
                                                                 height:Integer;
                                                                 type1:String;
                                                              end;
                                                              TImage=record
                                                                  big:TBig;
                                                                  small:TSmall;
                                                              end;
                                                              TIndex=record
                                                                     title : String;
                                                                     text: String;
                                                                     status : String;
                                                                     item:TItem;
                                                                     img:array of TImage;
                                                                  end;
                                                              type
                                                                TData = array of TIndex;
                                                             
                                                            var
                                                              Form1: TForm1;
                                                              Data: TData;
                                                             
                                                              st: String;
                                                              t:Integer = 0;
                                                              Index1:Integer = 0;
                                                              MaxSet:Integer=0;
                                                              FullView:Boolean;
                                                            implementation
                                                             
                                                            {$R *.dfm}
                                                             
                                                             
                                                            //Пример записи в массив
                                                            procedure TForm1.FormShow(Sender: TObject);
                                                            var i,j,Index1: Integer;
                                                            vetka,text,data1,item1,Node,Node1,Node2: TTreeNode;
                                                            begin
                                                              for I := Low(Data) to High(Data) do
                                                              begin
                                                                 data1:=TreeView1.Items.Add(nil,'Data['+IntToStr(i)+']');
                                                             
                                                                 Node:=TreeView1.Items.AddChild(data1,'Title'+IntToStr(i));
                                                                 Node:=TreeView1.Items.AddChild(Node,Data[i].title);
                                                             
                                                             
                                                                 Node:=TreeView1.Items.AddChild(data1,'Text['+IntToStr(i)+']');
                                                                 Node:=TreeView1.Items.AddChild(Node,Data[i].text);
                                                             
                                                                 Node:=TreeView1.Items.AddChild(data1,'Status['+IntToStr(i)+']');
                                                                 Node:=TreeView1.Items.AddChild(Node,Data[i].status);
                                                             
                                                                 Node:=TreeView1.Items.AddChild(data1,'item['+IntToStr(i)+']');
                                                                 Node:=TreeView1.Items.AddChild(Node,'Text'+IntToStr(i));
                                                                 Node:=TreeView1.Items.AddChild(Node, 'Description'+IntToStr(i));
                                                                 Node:=TreeView1.Items.AddChild(Node,Data[i].item.text.description);
                                                             
                                                             
                                                                  Node1:=TreeView1.Items.AddChild(data1,'img['+IntToStr(i)+']');
                                                             
                                                                 for J := Low(Data[i].img) to High(Data[i].img) do
                                                                 begin
                                                                   Node2:=TreeView1.Items.AddChild(Node1,'big');
                                                                   Node:=TreeView1.Items.AddChild(Node2,Data[i].img[j].big.status);
                                                                   Node:=TreeView1.Items.AddChild(Node2,Data[i].img[j].big.type1);
                                                                 end;
                                                             
                                                              end;
                                                              Node3 := TreeView1.Items.GetFirstNode;
                                                              if Node3 <> nil then Node3.Item[2].Item[0].Text := 'current'; // Установить у Data[0] -> Status = current
                                                             
                                                              Node3 := Node3.GetNextChild(Node3);
                                                              
                                                             
                                                             
                                                             
                                                                 while Node3 <> nil do begin
                                                                    Node3.Item[2].Item[0].Text := 'wait'; // У все последующих сбросить статус в wait
                                                                   for Index1 := 0 to Node3.Item[4].Count - 1 do Node3.Item[4].Item[Index1].Item[0].Text := 'wait';
                                                                   Node3 := Node3.GetNextChild(Node3);
                                                                end;
                                                                Index1 := 0; // Установить начальные значения индексных переменных
                                                                Node3 := TreeView1.Items.GetFirstNode;
                                                                if Node3 <> nil then
                                                                  Timer1.Enabled := True; // Запустить таймер
                                                             
                                                                FullView:=True;
                                                             
                                                             
                                                            end;
                                                             
                                                            procedure TForm1.FormCreate(Sender: TObject);
                                                            begin
                                                            //В ДОКУМЕНТЕ МАССИВ СОСТОИТ ИЗ 10 ЭЛЕМЕНТОВ, устанавливаем SetLength.
                                                            SetLength(Data,9);
                                                             
                                                             
                                                            SetLength(Data[0].img,5);
                                                            SetLength(Data[1].img,3);
                                                            SetLength(Data[2].img,4);
                                                            SetLength(Data[3].img,2);
                                                            SetLength(Data[4].img,7);
                                                            SetLength(Data[5].img,3);
                                                            SetLength(Data[6].img,4);
                                                            SetLength(Data[7].img,8);
                                                            SetLength(Data[8].img,3);
                                                            SetLength(Data[9].img,4);
                                                             
                                                             
                                                            Data[0].title:='Название';
                                                            Data[0].text:='Мой текст';
                                                            Data[0].status:='current';
                                                             
                                                            Data[0].item.text.description:='Описание 1';
                                                            //Data[0] --> img[0..4] ********************************************************
                                                            Data[0].img[0].big.type1:='test1';
                                                            Data[0].img[1].big.type1:='test2';
                                                            Data[0].img[2].big.type1:='test3';
                                                            Data[0].img[3].big.type1:='test4';
                                                            Data[0].img[4].big.type1:='test5';
                                                             
                                                            Data[0].img[0].big.status:='wait';
                                                            Data[0].img[1].big.status:='wait';
                                                            Data[0].img[2].big.status:='wait';
                                                            Data[0].img[3].big.status:='wait';
                                                            Data[0].img[4].big.status:='wait';
                                                            //END DATA[0] --> img[0..4]*****************************************************
                                                            Data[1].title:='Название 1';
                                                            Data[1].text:='Мой текст 1';
                                                            Data[1].status:='wait';
                                                            Data[1].item.text.description:='Описание 2';
                                                            //Data[1] --> img[0..2] ********************************************************
                                                            Data[1].img[0].big.type1:='test1';
                                                            Data[1].img[1].big.type1:='test2';
                                                            Data[1].img[2].big.type1:='test3';
                                                             
                                                             
                                                            Data[1].img[0].big.status:='wait';
                                                            Data[1].img[1].big.status:='wait';
                                                            Data[1].img[2].big.status:='wait';
                                                            //END DATA[1] --> img[0..2] ****************************************************
                                                             
                                                             
                                                            Data[2].title:='Название 2';
                                                            Data[2].text:='Мой текст 2';
                                                            Data[2].status:='wait';
                                                            Data[2].item.text.description:='Описание 3';
                                                            //Data[2] --> img[0..3] ********************************************************
                                                            Data[2].img[0].big.type1:='test1';
                                                            Data[2].img[1].big.type1:='test2';
                                                            Data[2].img[2].big.type1:='test3';
                                                            Data[2].img[3].big.type1:='test4';
                                                             
                                                            Data[2].img[0].big.status:='wait';
                                                            Data[2].img[1].big.status:='wait';
                                                            Data[2].img[2].big.status:='wait';
                                                            Data[2].img[3].big.status:='wait';
                                                            //END DATA[2] --> img[0..3] ****************************************************
                                                            Data[3].title:='Название 3';
                                                            Data[3].text:='Мой текст 3';
                                                            Data[3].status:='wait';
                                                            Data[3].item.text.description:='Описание 4';
                                                             
                                                             
                                                            //Data[3] --> img[0..1] ********************************************************
                                                            Data[3].img[0].big.type1:='test1';
                                                            Data[3].img[1].big.type1:='test2';
                                                             
                                                             
                                                            Data[3].img[0].big.status:='wait';
                                                            Data[3].img[1].big.status:='wait';
                                                            //END DATA[3] --> img[0..1] ****************************************************
                                                             
                                                            Data[4].title:='Название 4';
                                                            Data[4].text:='Мой текст 4';
                                                            Data[4].status:='wait';
                                                            Data[4].item.text.description:='Описание 5';
                                                            //Data[4] --> img[0..6] ********************************************************
                                                            Data[4].img[0].big.type1:='test1';
                                                            Data[4].img[1].big.type1:='test2';
                                                            Data[4].img[2].big.type1:='test3';
                                                            Data[4].img[3].big.type1:='test4';
                                                            Data[4].img[4].big.type1:='test5';
                                                            Data[4].img[5].big.type1:='test6';
                                                            Data[4].img[6].big.type1:='test7';
                                                             
                                                             
                                                            Data[4].img[0].big.status:='wait';
                                                            Data[4].img[1].big.status:='wait';
                                                            Data[4].img[2].big.status:='wait';
                                                            Data[4].img[3].big.status:='wait';
                                                            Data[4].img[4].big.status:='wait';
                                                            Data[4].img[5].big.status:='wait';
                                                            Data[4].img[6].big.status:='wait';
                                                            //END DATA[4] --> img[0..6] ****************************************************
                                                             
                                                            Data[5].title:='Название 5';
                                                            Data[5].text:='Мой текст 5';
                                                            Data[5].status:='wait';
                                                            Data[5].item.text.description:='Описание 6';
                                                            //Data[5] --> img[0..2] ********************************************************
                                                            Data[5].img[0].big.type1:='test1';
                                                            Data[5].img[1].big.type1:='test2';
                                                            Data[5].img[2].big.type1:='test3';
                                                             
                                                            Data[5].img[0].big.status:='wait';
                                                            Data[5].img[1].big.status:='wait';
                                                            Data[5].img[2].big.status:='wait';
                                                            //END DATA[5] --> img[0..2] ****************************************************
                                                             
                                                            Data[6].title:='Название 6';
                                                            Data[6].text:='Мой текст 6';
                                                            Data[6].status:='wait';
                                                            Data[6].item.text.description:='Описание 7';
                                                            //Data[6] --> img[0..3] ********************************************************
                                                            Data[6].img[0].big.type1:='test1';
                                                            Data[6].img[1].big.type1:='test2';
                                                            Data[6].img[2].big.type1:='test3';
                                                            Data[6].img[3].big.type1:='test4';
                                                             
                                                             
                                                            Data[6].img[0].big.status:='wait';
                                                            Data[6].img[1].big.status:='wait';
                                                            Data[6].img[2].big.status:='wait';
                                                            Data[6].img[3].big.status:='wait';
                                                            //END DATA[6] --> img[0..3] ****************************************************
                                                             
                                                            Data[7].title:='Название 7';
                                                            Data[7].text:='Мой текст 7';
                                                            Data[7].status:='wait';
                                                            Data[7].item.text.description:='Описание 8';
                                                             
                                                            //Data[7] --> img[0..7] ********************************************************
                                                            Data[7].img[0].big.type1:='test1';
                                                            Data[7].img[1].big.type1:='test1';
                                                            Data[7].img[2].big.type1:='test1';
                                                            Data[7].img[3].big.type1:='test1';
                                                            Data[7].img[4].big.type1:='test1';
                                                            Data[7].img[5].big.type1:='test1';
                                                            Data[7].img[6].big.type1:='test1';
                                                            Data[7].img[7].big.type1:='test1';
                                                             
                                                             
                                                             
                                                            Data[7].img[0].big.status:='wait';
                                                            Data[7].img[1].big.status:='wait';
                                                            Data[7].img[2].big.status:='wait';
                                                            Data[7].img[3].big.status:='wait';
                                                            Data[7].img[4].big.status:='wait';
                                                            Data[7].img[5].big.status:='wait';
                                                            Data[7].img[6].big.status:='wait';
                                                            Data[7].img[7].big.status:='wait';
                                                            //END DATA[7] --> img[0..7] ****************************************************
                                                             
                                                            Data[8].title:='Название 8';
                                                            Data[8].text:='Мой текст 8';
                                                            Data[8].status:='wait';
                                                            Data[8].item.text.description:='Описание 9';
                                                             
                                                            //Data[8] --> img[0..2] ********************************************************
                                                            Data[8].img[0].big.type1:='test1';
                                                            Data[8].img[1].big.type1:='test1';
                                                            Data[8].img[2].big.type1:='test1';
                                                             
                                                             
                                                            Data[8].img[0].big.status:='wait';
                                                            Data[8].img[1].big.status:='wait';
                                                            Data[8].img[2].big.status:='wait';
                                                             
                                                            MaxSet:=5;
                                                             
                                                            Label1.Caption:='Макс '+IntToStr(MaxSet)+' сек: '+IntToStr(t);
                                                             
                                                            //END DATA[8] --> img[0..2] ****************************************************
                                                             
                                                            //Data[9].img[0].big.type1:='test1';
                                                            //Data[9].img[1].big.type1:='test1';
                                                            //Data[9].img[2].big.type1:='test1';
                                                            //Data[9].img[3].big.type1:='test1';
                                                             
                                                            //Data[9].img[0].big.status:='wait';
                                                            //Data[9].img[1].big.status:='wait';
                                                            //Data[9].img[2].big.status:='wait';
                                                            //Data[9].img[3].big.status:='wait';
                                                            //********************************************************
                                                            end;
                                                             
                                                            procedure TForm1.Timer1Timer(Sender: TObject);
                                                            begin
                                                            //*****************************
                                                            //*1 Вариант
                                                            //*****************************
                                                               //ShowMessage(IntToStr(Node3.Item[4].Count));
                                                              with Node3.Item[4] do begin
                                                               if Index1 < Count then
                                                                  Item[Index1].Item[0].text:='ok';
                                                                  //Item[Index1].Item[1].Text := 'ok'; // Data[Node] -> Img -> Big[Index] -> Status
                                                                  inc(Index1);
                                                                  if Index1 >= Count then repeat
                                                                     Node3.Item[2].Item[0].Text := 'ok'; // Data[Node] -> Status
                                                                     Node3 := Node3.GetNextChild(Node3); // Data[Node++] -- Переходим к следующей
                                                                     if Node3 = nil then begin
                                                                        Timer1.Enabled := False;
                                                                        break;
                                                                     end else begin
                                                                        Node3.Item[2].Item[0].Text := 'current';
                                                                        Index1 := 0;
                                                                     end;
                                                                  until Node3.Item[4].Count > 0;
                                                               end;
                                                            //*****************************
                                                            //*2 Вариант
                                                            //*****************************
                                                            {case Index1 of
                                                               -1: Node3.Item[2].Item[0].Text := 'current';
                                                              
                                                               else
                                                                  with Node3.Item[4] do begin // Так лучше, чтобы не было лишней задержки.
                                                                     if Index1 >= Count then begin
                                                                        Node3.Item[2].Item[0].Text := 'ok';
                                                                        Node3 := Node3.GetNextChild(Node3);
                                                                        if Node3 = nil then Timer1.Enabled := False;
                                                                        Index1 := -2; // Потом все равно будет inc(Index1) и значение станет -1. Как раз первый вариант case Index1 of
                                                                        
                                                                     end else
                                                                        Item[Index1].Item[0].Text := 'ok';
                                                               end;
                                                               end;
                                                               inc(Index1);}
                                                            //*****************************************************
                                                             
                                                             
                                                             
                                                               if FullView then
                                                               begin
                                                                TreeView1.FullExpand;
                                                                FullView:=False;
                                                               end;
                                                            end;
                                                            end.
                                                          Сообщение отредактировано: Katerina1993 -
                                                            Цитата Katerina1993 @
                                                            Спасибо, вот мой вариант под Delphi7.

                                                            В
                                                            Цитата Katerina1993 @
                                                            procedure TForm1.FormCreate(Sender: TObject);

                                                            строка 147
                                                            ExpandedWrap disabled
                                                              SetLength(Data[9].img,4);

                                                            Не закомментировано, поэтому даст access violation.
                                                            Скрытый текст
                                                            First chance exception at $768FC3A2. Exception class EAccessViolation with message 'Access violation at address 004055A9 in module 'Project1.exe'. Read of address 6572436A'. Process Project1.exe (3916)

                                                            У Вас "Data[8]" используется +, а "Data[9]" -> уже закомментировано ниже по коду, не используется.
                                                            Сообщение отредактировано: RusSun -
                                                              Цитата RusSun @
                                                              В
                                                              Цитата Katerina1993 @ Вчера, 16:40
                                                              procedure TForm1.FormCreate(Sender: TObject);

                                                              строка 147
                                                              CollapsedWrap disabledLine numbers on

                                                              SetLength(Data[9].img,4);


                                                              Не закомментировано, поэтому даст access violation.

                                                              Скорее надо на 135 строке
                                                              ExpandedWrap disabled
                                                                //В ДОКУМЕНТЕ МАССИВ СОСТОИТ ИЗ 10 ЭЛЕМЕНТОВ, устанавливаем SetLength.
                                                                SetLength(Data,9);
                                                              исправить 9 на 10, как и написано в комментарии выше
                                                                RusSun, я понимаю, что массив у меня не совсем правильно реализован. Просто я пока еще не знаю как составить массив из записей, при условии когда в одну запись record, вложен еще один массив, например с картинками и как правильно установить setLength, когда изначально количество картинок неизвестно, например их может быть 2,3 или 5, поэтому нужно как-то сделать массив динамическим, а setLength чтобы мог работать с заранее неизвестным количеством изображений. Единственное что приходит на ум это в главном record где содержится массив с картинками добавить еще одну переменную, например countImg и присваивать ей значение количество картинок, потом использовать эту переменную в setLength вот так.
                                                                ExpandedWrap disabled
                                                                  TImage=record
                                                                        big:TBig;
                                                                        small:TSmall;
                                                                        countImg:Integer; //<-- количество картинок
                                                                    end;
                                                                Сообщение отредактировано: Katerina1993 -
                                                                  ExpandedWrap disabled
                                                                    TImagePixel = packed record
                                                                      case Byte of
                                                                      0: (
                                                                        Blue:  Byte;
                                                                        Green: Byte;
                                                                        Red:   Byte;
                                                                        Alpha: Byte;
                                                                      );
                                                                      1: (
                                                                        color: TColor;
                                                                      );
                                                                    end;
                                                                    TImageData = packed record
                                                                      Width:  LongInt;
                                                                      Height: LongInt;
                                                                      Pixels: array of array of TImagePixel;
                                                                    end;
                                                                    TBig   = array of TImageData;
                                                                    TSmall = array of TImageData;
                                                                    TImage = packed record
                                                                      big:      TBig;
                                                                      small:    TSmall;
                                                                      countImg: Integer;
                                                                    end;
                                                                    TSize = packed record
                                                                      Width:  LongInt;
                                                                      Height: LongInt;
                                                                    end;
                                                                     
                                                                    function GetTSize(aWidth: LongInt; aHeight: LongInt): TSize; inline;
                                                                    begin
                                                                      with Result do begin
                                                                        Width  := aWidth;
                                                                        Height := aHeight;
                                                                      end;
                                                                    end;
                                                                     
                                                                    function NewTImage(count: LongInt; smallImg: TSize; bigImg: TSize): TImage; inline;
                                                                    var
                                                                      i: LongInt;
                                                                    begin
                                                                      with Result do begin
                                                                        countImg := count;
                                                                        SetLength(big, count);
                                                                        SetLength(small, count);
                                                                        for i := Low(small) to High(small) do with small[i] do begin
                                                                          Width  := smallImg.Width;
                                                                          Height := smallImg.Height;
                                                                          SetLength(Pixels, smallImg.Width, smallImg.Height);
                                                                        end;
                                                                        for i := Low(big)   to High(big)   do with   big[i] do begin
                                                                          Width  :=   bigImg.Width;
                                                                          Height :=   bigImg.Height;
                                                                          SetLength(  Pixels,   bigImg.Width,   bigImg.Height);
                                                                        end;
                                                                      end;
                                                                    end;
                                                                     
                                                                    procedure TForm1Create(Sender: TObject);
                                                                    var
                                                                      Image: TImage;
                                                                    begin
                                                                      Image := NewTImage(10, GetTSize(16, 16), GetTSize(256, 256)); // Выделит 10 маленьких изображений и 10 больших изображений. Общий объем выделенной памяти:
                                                                    // sizeof(Image.big)      = 4
                                                                    // sizeof(Image.small)    = 4
                                                                    // sizeof(Image.countImg) = 4
                                                                    // i in [0 .. 9] x {
                                                                    //   sizeof(Image.big[i].Width)  = 4
                                                                    //   sizeof(Image.big[i].Height) = 4
                                                                    //   sizeof(Image.big[i].Pixels) = 4
                                                                    //   j in [0 .. 255] * k in [0 .. 255] x {
                                                                    //     sizeof(Image.big[i].Pixels[j,k].color) = 4
                                                                    //   }
                                                                    //   sizeof(Image.small[i].Width)  = 4
                                                                    //   sizeof(Image.small[i].Height) = 4
                                                                    //   sizeof(Image.small[i].Pixels) = 4
                                                                    //   j in [0 .. 15] * k in [0 .. 15] x {
                                                                    //     sizeof(Image.small[i].Pixels[j,k].color) = 4
                                                                    //   }
                                                                    // }
                                                                    // Итого = 12 + 10 * (12 + 256 * 256 * 4 + 12 + 16 * 16 * 4) = 2640372 = 2 Mb + 530 kb + 212 bytes
                                                                    end;

                                                                    macomics,

                                                                    Добавила функцию для создания массива и переделала код под себя. Столкнулась с такой проблемой, что в дереве у картинок status не выводится. Протестировала и присвоила любое значение status в функции NewTImage оно выводится, но стоит записать вот так:
                                                                    Цитата
                                                                    status:=big[i].status;,

                                                                    то значение пустое, хотя я обращаюсь к записи
                                                                    Цитата
                                                                    TImageData = packed record
                                                                    куда отправляется значение статуса картинки. Вот мой код полностью.
                                                                    ExpandedWrap disabled
                                                                      unit Unit1;
                                                                       
                                                                      interface
                                                                       
                                                                      uses
                                                                        Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
                                                                        Dialogs, StdCtrls, ComCtrls;
                                                                       
                                                                      type
                                                                        TForm1 = class(TForm)
                                                                          Button1: TButton;
                                                                          TreeView1: TTreeView;
                                                                          procedure FormCreate(Sender: TObject);
                                                                          procedure FormShow(Sender: TObject);
                                                                          procedure Button1Click(Sender: TObject);
                                                                        private
                                                                          { Private declarations }
                                                                        public
                                                                          { Public declarations }
                                                                        end;
                                                                       
                                                                      TImagePixel = packed record
                                                                        case Byte of
                                                                        0: (
                                                                          Blue:  Byte;
                                                                          Green: Byte;
                                                                          Red:   Byte;
                                                                          Alpha: Byte;
                                                                        );
                                                                        1: (
                                                                          color: TColor;
                                                                        );
                                                                      end;
                                                                      TImageData = packed record
                                                                        Width:  LongInt;
                                                                        Height: LongInt;
                                                                        status:String;
                                                                        type1:String;
                                                                        Pixels: array of array of TImagePixel;
                                                                      end;
                                                                      TBig   = array of TImageData;
                                                                      TSmall = array of TImageData;
                                                                       
                                                                      TText=record
                                                                            description: String;
                                                                        end;
                                                                       
                                                                        TItem=record
                                                                            text: TText;
                                                                        end;
                                                                       
                                                                       
                                                                      TImage = packed record
                                                                        big:      TBig;
                                                                        small:    TSmall;
                                                                        countImg: Integer;
                                                                        //status: String;
                                                                      end;
                                                                       
                                                                      TSize = packed record
                                                                        Width:  LongInt;
                                                                        Height: LongInt;
                                                                        Big1 : array of TBig;
                                                                      end;
                                                                       
                                                                      TData = class
                                                                        private
                                                                          sLength : Integer;
                                                                          title : String;
                                                                          text: String;
                                                                          smallImg: TSize;
                                                                          bigImg: TSize;
                                                                          status:String;
                                                                          item:TItem;
                                                                        public
                                                                       
                                                                          constructor Create(_Length:Integer; _smallImg: TSize; _bigImg: TSize);
                                                                          function NewTImage(): TImage;
                                                                       
                                                                        end;
                                                                       
                                                                      var
                                                                        Form1: TForm1;
                                                                        Data : Array Of TData;
                                                                       
                                                                       
                                                                      implementation
                                                                       
                                                                      {$R *.dfm}
                                                                       
                                                                       constructor TData.Create(_Length:Integer;_smallImg: TSize; _bigImg: TSize);
                                                                       begin
                                                                         inherited Create;
                                                                         sLength:=_Length;
                                                                         smallImg:=_smallImg;
                                                                         smallImg:=_bigImg;
                                                                       end;
                                                                       
                                                                      function TData.NewTImage(): TImage;
                                                                      var
                                                                        i: LongInt;
                                                                      begin
                                                                       
                                                                        with Result do begin
                                                                          countImg := sLength;
                                                                       
                                                                          SetLength(big, sLength);
                                                                          SetLength(small, sLength);
                                                                          for i := Low(small) to High(small) do with small[i] do begin
                                                                            Width  := smallImg.Width;
                                                                            Height := smallImg.Height;
                                                                            
                                                                            status:=small[i].status;
                                                                            type1:=small[i].type1;
                                                                            SetLength(Pixels, smallImg.Width, smallImg.Height);
                                                                          end;
                                                                          for i := Low(big)   to High(big)   do with big[i] do begin
                                                                            Width  :=   bigImg.Width;
                                                                            Height :=   bigImg.Height;
                                                                            status:=big[i].status;
                                                                            type1:=big[i].type1;
                                                                            SetLength(  Pixels,   bigImg.Width,   bigImg.Height);
                                                                          end;
                                                                        end;
                                                                      end;
                                                                       
                                                                      function GetTSize(aWidth: LongInt; aHeight: LongInt): TSize;
                                                                      begin
                                                                        with Result do begin
                                                                          Width  := aWidth;
                                                                          Height := aHeight;
                                                                        end;
                                                                      end;
                                                                       
                                                                      procedure TForm1.FormCreate(Sender: TObject);
                                                                       
                                                                      begin
                                                                      setLength(Data,10);
                                                                      Data[0]:=TData.Create(5, GetTSize(16, 16), GetTSize(256, 256));
                                                                      Data[0].title:='Название';
                                                                      Data[0].text:='Мой текст';
                                                                      Data[0].status:='current';
                                                                       
                                                                      Data[0].item.text.description:='Описание 1';
                                                                       
                                                                      Data[0].NewTImage.big[0].status:='wait';
                                                                      Data[0].NewTImage.big[1].status:='wait';
                                                                      Data[0].NewTImage.big[2].status:='wait';
                                                                      Data[0].NewTImage.big[3].status:='wait';
                                                                      Data[0].NewTImage.big[4].status:='wait';
                                                                       
                                                                      Data[0].NewTImage.big[0].status:='test1';
                                                                      Data[0].NewTImage.big[1].status:='test2';
                                                                      Data[0].NewTImage.big[2].status:='test2';
                                                                      Data[0].NewTImage.big[3].status:='test3';
                                                                      Data[0].NewTImage.big[4].status:='test4';
                                                                       
                                                                       
                                                                       
                                                                       
                                                                      Data[1]:=TData.Create(3, GetTSize(16, 16), GetTSize(256, 256));
                                                                      Data[1].title:='Название 1';
                                                                      Data[1].text:='Мой текст 1';
                                                                      Data[1].status:='wait';
                                                                      Data[1].item.text.description:='Описание 2';
                                                                       
                                                                      Data[1].NewTImage.big[0].type1:='test1';
                                                                      Data[1].NewTImage.big[1].type1:='test2';
                                                                      Data[1].NewTImage.big[2].type1:='test3';
                                                                       
                                                                      Data[1].NewTImage.big[0].status:='wait';
                                                                      Data[1].NewTImage.big[1].status:='wait';
                                                                      Data[1].NewTImage.big[2].status:='wait';
                                                                       
                                                                       
                                                                       
                                                                      Data[2]:=TData.Create(4, GetTSize(16, 16), GetTSize(256, 256));
                                                                      Data[2].title:='test';
                                                                       
                                                                      Data[2].title:='Название 2';
                                                                      Data[2].text:='Мой текст 2';
                                                                      Data[2].status:='wait';
                                                                      Data[2].item.text.description:='Описание 3';
                                                                      //Data[2] --> img[0..3] ********************************************************
                                                                      Data[2].NewTImage.big[0].type1:='test1';
                                                                      Data[2].NewTImage.big[1].type1:='test2';
                                                                      Data[2].NewTImage.big[2].type1:='test3';
                                                                      Data[2].NewTImage.big[3].type1:='test4';
                                                                       
                                                                      Data[2].NewTImage.big[0].status:='wait';
                                                                      Data[2].NewTImage.big[1].status:='wait';
                                                                      Data[2].NewTImage.big[2].status:='wait';
                                                                      Data[2].NewTImage.big[3].status:='wait';
                                                                       
                                                                       
                                                                       
                                                                       
                                                                      Data[3]:=TData.Create(2, GetTSize(16, 16), GetTSize(256, 256));
                                                                      Data[3].title:='Название 3';
                                                                      Data[3].text:='Мой текст 3';
                                                                      Data[3].status:='wait';
                                                                      Data[3].item.text.description:='Описание 4';
                                                                       
                                                                       
                                                                      //Data[3] --> img[0..1] ********************************************************
                                                                      Data[3].NewTImage.big[0].type1:='test1';
                                                                      Data[3].NewTImage.big[1].type1:='test2';
                                                                       
                                                                      Data[3].NewTImage.big[0].status:='wait';
                                                                      Data[3].NewTImage.big[1].status:='wait';
                                                                       
                                                                      Data[4]:=TData.Create(7, GetTSize(16, 16), GetTSize(256, 256));
                                                                       
                                                                      Data[4].title:='Название 4';
                                                                      Data[4].text:='Мой текст 4';
                                                                      Data[4].status:='wait';
                                                                      Data[4].item.text.description:='Описание 5';
                                                                      //Data[4] --> img[0..6] ********************************************************
                                                                      Data[4].NewTImage.big[0].type1:='test1';
                                                                      Data[4].NewTImage.big[1].type1:='test2';
                                                                      Data[4].NewTImage.big[2].type1:='test3';
                                                                      Data[4].NewTImage.big[3].type1:='test4';
                                                                      Data[4].NewTImage.big[4].type1:='test5';
                                                                      Data[4].NewTImage.big[5].type1:='test6';
                                                                      Data[4].NewTImage.big[6].type1:='test7';
                                                                       
                                                                       
                                                                      Data[4].NewTImage.big[0].status:='wait';
                                                                      Data[4].NewTImage.big[1].status:='wait';
                                                                      Data[4].NewTImage.big[2].status:='wait';
                                                                      Data[4].NewTImage.big[3].status:='wait';
                                                                      Data[4].NewTImage.big[4].status:='wait';
                                                                      Data[4].NewTImage.big[5].status:='wait';
                                                                      Data[4].NewTImage.big[6].status:='wait';
                                                                       
                                                                       
                                                                      Data[5]:=TData.Create(3, GetTSize(16, 16), GetTSize(256, 256));
                                                                       
                                                                      Data[5].title:='Название 5';
                                                                      Data[5].text:='Мой текст 5';
                                                                      Data[5].status:='wait';
                                                                      Data[5].item.text.description:='Описание 6';
                                                                      //Data[5] --> img[0..2] ********************************************************
                                                                      Data[5].NewTImage.big[0].type1:='test1';
                                                                      Data[5].NewTImage.big[1].type1:='test2';
                                                                      Data[5].NewTImage.big[2].type1:='test3';
                                                                       
                                                                      Data[5].NewTImage.big[0].status:='wait';
                                                                      Data[5].NewTImage.big[1].status:='wait';
                                                                      Data[5].NewTImage.big[2].status:='wait';
                                                                       
                                                                       
                                                                       
                                                                      Data[6]:=TData.Create(4, GetTSize(16, 16), GetTSize(256, 256));
                                                                      Data[6].title:='Название 6';
                                                                      Data[6].text:='Мой текст 6';
                                                                      Data[6].status:='wait';
                                                                      Data[6].item.text.description:='Описание 7';
                                                                      //Data[6] --> img[0..3] ********************************************************
                                                                      Data[6].NewTImage.big[0].type1:='test1';
                                                                      Data[6].NewTImage.big[1].type1:='test2';
                                                                      Data[6].NewTImage.big[2].type1:='test3';
                                                                      Data[6].NewTImage.big[3].type1:='test4';
                                                                       
                                                                       
                                                                      Data[6].NewTImage.big[0].status:='wait';
                                                                      Data[6].NewTImage.big[1].status:='wait';
                                                                      Data[6].NewTImage.big[2].status:='wait';
                                                                      Data[6].NewTImage.big[3].status:='wait';
                                                                       
                                                                       
                                                                      Data[7]:=TData.Create(8, GetTSize(16, 16), GetTSize(256, 256));
                                                                      Data[7].title:='Название 7';
                                                                      Data[7].text:='Мой текст 7';
                                                                      Data[7].status:='wait';
                                                                      Data[7].item.text.description:='Описание 8';
                                                                       
                                                                      //Data[7] --> img[0..7] ********************************************************
                                                                      Data[7].NewTImage.big[0].type1:='test1';
                                                                      Data[7].NewTImage.big[1].type1:='test1';
                                                                      Data[7].NewTImage.big[2].type1:='test1';
                                                                      Data[7].NewTImage.big[3].type1:='test1';
                                                                      Data[7].NewTImage.big[4].type1:='test1';
                                                                      Data[7].NewTImage.big[5].type1:='test1';
                                                                      Data[7].NewTImage.big[6].type1:='test1';
                                                                      Data[7].NewTImage.big[7].type1:='test1';
                                                                       
                                                                       
                                                                       
                                                                      Data[7].NewTImage.big[0].status:='wait';
                                                                      Data[7].NewTImage.big[1].status:='wait';
                                                                      Data[7].NewTImage.big[2].status:='wait';
                                                                      Data[7].NewTImage.big[3].status:='wait';
                                                                      Data[7].NewTImage.big[4].status:='wait';
                                                                      Data[7].NewTImage.big[5].status:='wait';
                                                                      Data[7].NewTImage.big[6].status:='wait';
                                                                      Data[7].NewTImage.big[7].status:='wait';
                                                                       
                                                                       
                                                                      Data[8]:=TData.Create(3, GetTSize(16, 16), GetTSize(256, 256));
                                                                      Data[8].title:='Название 8';
                                                                      Data[8].text:='Мой текст 8';
                                                                      Data[8].status:='wait';
                                                                      Data[8].item.text.description:='Описание 8';
                                                                       
                                                                      //Data[8] --> img[0..2] ********************************************************
                                                                      Data[8].NewTImage.big[0].type1:='test1';
                                                                      Data[8].NewTImage.big[1].type1:='test1';
                                                                      Data[8].NewTImage.big[2].type1:='test1';
                                                                       
                                                                       
                                                                      Data[8].NewTImage.big[0].status:='wait';
                                                                      Data[8].NewTImage.big[1].status:='wait';
                                                                      Data[8].NewTImage.big[2].status:='wait';
                                                                       
                                                                       
                                                                      Data[9]:=TData.Create(4, GetTSize(16, 16), GetTSize(256, 256));
                                                                      Data[9].title:='Название 9';
                                                                      Data[9].text:='Мой текст 9';
                                                                      Data[9].status:='wait';
                                                                      Data[9].item.text.description:='Описание 9';
                                                                       
                                                                      //Data[9] --> img[0..3] ********************************************************
                                                                      Data[9].NewTImage.big[0].type1:='test1';
                                                                      Data[9].NewTImage.big[1].type1:='test1';
                                                                      Data[9].NewTImage.big[2].type1:='test1';
                                                                      Data[9].NewTImage.big[3].type1:='test1';
                                                                       
                                                                      Data[9].NewTImage.big[0].status:='wait';
                                                                      Data[9].NewTImage.big[1].status:='wait';
                                                                      Data[9].NewTImage.big[2].status:='wait';
                                                                      Data[9].NewTImage.big[3].status:='wait';
                                                                       
                                                                      end;
                                                                       
                                                                      procedure TForm1.FormShow(Sender: TObject);
                                                                      var i,j,Index1: Integer;
                                                                      vetka,text,data1,item1,Node,Node1,Node2: TTreeNode;
                                                                      begin
                                                                        for I := Low(Data) to High(Data) do
                                                                        begin
                                                                           data1:=TreeView1.Items.Add(nil,'Data['+IntToStr(i)+']');
                                                                       
                                                                           Node:=TreeView1.Items.AddChild(data1,'Title'+IntToStr(i));
                                                                           Node:=TreeView1.Items.AddChild(Node,Data[i].title);
                                                                       
                                                                       
                                                                           Node:=TreeView1.Items.AddChild(data1,'Text['+IntToStr(i)+']');
                                                                           Node:=TreeView1.Items.AddChild(Node,Data[i].text);
                                                                       
                                                                           Node:=TreeView1.Items.AddChild(data1,'Status['+IntToStr(i)+']');
                                                                           Node:=TreeView1.Items.AddChild(Node,Data[i].status);
                                                                       
                                                                           Node:=TreeView1.Items.AddChild(data1,'item['+IntToStr(i)+']');
                                                                           Node:=TreeView1.Items.AddChild(Node,'Text'+IntToStr(i));
                                                                           Node:=TreeView1.Items.AddChild(Node, 'Description'+IntToStr(i));
                                                                           Node:=TreeView1.Items.AddChild(Node,Data[i].item.text.description);
                                                                       
                                                                       
                                                                            Node1:=TreeView1.Items.AddChild(data1,'img['+IntToStr(i)+']');
                                                                        
                                                                           for J := Low(Data[i].NewTImage.big) to High(Data[i].NewTImage.big) do
                                                                           begin
                                                                            //  ShowMessage(Data[i].NewTImage.big[j].status);
                                                                             Node2:=TreeView1.Items.AddChild(Node1,'big');
                                                                             Node:=TreeView1.Items.AddChild(Node2,Data[i].NewTImage.big[j].status); //ЗНАЧЕНИЕ ПУСТОЕ
                                                                             Node:=TreeView1.Items.AddChild(Node2,Data[i].NewTImage.big[j].type1);  //ЗДЕСЬ ТОЖЕ ЗНАЧЕНИЕ ПУСТОЕ
                                                                           end;
                                                                        end;
                                                                      end;
                                                                       
                                                                      procedure TForm1.Button1Click(Sender: TObject);
                                                                      begin
                                                                      ShowMessage(Data[0].NewTImage.big[0].status); //ПРОВЕРКА ПУСТОЕ ЗНАЧЕНИЕ
                                                                      end;
                                                                       
                                                                      end.
                                                                      На 96 строке скорее всего надо написать так
                                                                      ExpandedWrap disabled
                                                                        bigImg:=_bigImg;

                                                                      Функция NewTImage это и есть конструктор. Зачем вы добавили дополнительный конструктор. Функция NewTImage должна вызываться в конструкторе и больше ни где! Она выделяет память и инициализирует некоторые значения в полях получившейся структуры. После этого вы можете обращаться к полям структуры без вызова этой функции.
                                                                      ExpandedWrap disabled
                                                                        ShowMessage(Data[0].big[0].status);
                                                                      Сообщение отредактировано: macomics -
                                                                        Цитата
                                                                        Зачем вы добавили дополнительный конструктор.

                                                                        Я не до конца поняла как конструктор работает. Он устанавливает значение для определенного количества изображений, но здесь также следует учитывать, что картинки вложены в массив data. Это значит что массив многомерный. Как с этим быть?
                                                                        Например
                                                                        Data[0].img[0..9] <--выбор картинки.
                                                                          Вот такую структуру данных создает функция NewTImage в моем исходном варианте
                                                                          ExpandedWrap disabled
                                                                            Data[0] := NewTImage(10, GetTSize(16, 16), GetTSize(256, 256));
                                                                            // Data[0].countImg - количество катринок в массивах big и small (это же значение можно получить через
                                                                            // Length(big) или Length(small) - его можно и не сохранять, но в исходной структуре оно было).
                                                                            // После функции NewTImage равно значению из первого параметра т.е. 10.
                                                                             
                                                                            // Data[0].big[индекс картинки].Width и Data[0].big[индекс картинки].Height - размеры большой картинки
                                                                            // После функции NewTImage равно значению третьего параметра, т.е. Width = 256 и Height = 256
                                                                             
                                                                            // Data[0].big[индекс картинки].Pixels[Номер строки, Номер столбца].color - цвет пикселя изображения
                                                                            // размером 256 на 256, т.е. Номер строки изменяется в пределах от 0 до 255 и в таких же пределах
                                                                            // изменяется Номер столбца. Значение не инициализировано, но место зарезервировано для загрузки картинки
                                                                             
                                                                            // Data[0].small[индекс картинки].Width и Data[0].small[индекс картинки].Height - размеры малой картинки
                                                                            // После функции NewTImage равно значению второго параметра, т.е. Width = 16 и Height = 16
                                                                             
                                                                            // Data[0].small[индекс картинки].Pixels[Номер строки, Номер столбца].color - цвет пикселя изображения
                                                                            // размером 16 на 16, т.е. Номер строки изменяется в пределах от 0 до 15 и в таких же пределах
                                                                            // изменяется Номер столбца. Значение не инициализировано, но место зарезервировано для загрузки картинки

                                                                          В вашем случае это будет такая структура
                                                                          ExpandedWrap disabled
                                                                            Data[0] := TData.Create(5, GetTSize(16, 16), GetTSize(256, 256));
                                                                            // Data[0].sLength = 4 <- Вы инициализируете это значение в конструкторе
                                                                            // Data[0].title = ??? <- Это значение не инициализировано
                                                                            // Data[0].text = ??? <- Это значение не инициализировано
                                                                            // Data[0].smallImg.Width = 16 <- Вы инициализируете это значение в конструкторе
                                                                            // Data[0].smallImg.Height = 16 <- Вы инициализируете это значение в конструкторе
                                                                            // Data[0].bigImg.Width = 256 <- Вы инициализируете это значение в конструкторе
                                                                            // Data[0].bigImg.Height = 256 <- Вы инициализируете это значение в конструкторе
                                                                            // Data[0].status = ??? <- Это значение не инициализировано
                                                                            // Data[0].item.text = ??? <- Это значение не инициализировано
                                                                          В моей исходной структуре данных только значения в массивах для хранения картинок не инициализируются. Но в вашей структуре остается очень много незаполненных значений, которые вы вручную заполняете после.
                                                                          Для того, чтобы не печатать лишний текст используйте для заполнения структуры конструкцию
                                                                          ExpandedWrap disabled
                                                                            with Data[0] do begin
                                                                            //  Далее к полям Data[0] можно обращаться напрямую
                                                                              sLength := 5;
                                                                            end;


                                                                          Добавлено
                                                                          Попробую кратко объяснить что делает эта строка
                                                                          ExpandedWrap disabled
                                                                            Data[0].NewTImage.big[0].status:='wait';
                                                                          Она создает мою структуру вызывая конструктор NewTImage. Далее вы обращаетесь к полю этой новой структуры big и выбираете из массива элемент с нулевым индексом. В этом элементе обращаетесь к полю status устанавливая его значение в 'wait'. Но после этого моя конструкция ни где не сохраняется и следующая строка
                                                                          ExpandedWrap disabled
                                                                            Data[0].NewTImage.big[1].status:='wait';
                                                                          Выделяет новую структуру, с которой происходит тоже самое, что и с первой. И вторая структура тоже ни где не сохраняется. и т. д. для каждой из похожих на эти строчек.

                                                                          Посмотрите мой пример еще раз. На 63 строке я приводил строчку, которая использует мою функцию правильно. Вы потеряли Image :=
                                                                          Сообщение отредактировано: macomics -
                                                                            Все разобралась, теперь работает.
                                                                            ExpandedWrap disabled
                                                                              unit Unit1;
                                                                               
                                                                              interface
                                                                               
                                                                              uses
                                                                                Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
                                                                                Dialogs, ComCtrls, ExtCtrls;
                                                                               
                                                                              type
                                                                                TForm1 = class(TForm)
                                                                                  TreeView1: TTreeView;
                                                                                  Timer1: TTimer;
                                                                                  procedure FormCreate(Sender: TObject);
                                                                                  procedure FormShow(Sender: TObject);
                                                                                  procedure Timer1Timer(Sender: TObject);
                                                                                private
                                                                                  { Private declarations }
                                                                                public
                                                                                  { Public declarations }
                                                                                  vetka,text,data1,item1,Node,Node3,Node1,Node2: TTreeNode;
                                                                                end;
                                                                                TImagePixel = packed record
                                                                                case Byte of
                                                                                0: (
                                                                                  Blue:  Byte;
                                                                                  Green: Byte;
                                                                                  Red:   Byte;
                                                                                  Alpha: Byte;
                                                                                );
                                                                                1: (
                                                                                  color: TColor;
                                                                                );
                                                                              end;
                                                                               
                                                                              TImageData = packed record
                                                                                Width:  LongInt;
                                                                                Height: LongInt;
                                                                                status: String;
                                                                                type1: String;
                                                                                Pixels: array of array of TImagePixel;
                                                                              end;
                                                                              TText=record
                                                                                    description: String;
                                                                                end;
                                                                               
                                                                                TItem=record
                                                                                    text: TText;
                                                                                end;
                                                                               
                                                                               
                                                                              TBig   = array of TImageData;
                                                                              TSmall = array of TImageData;
                                                                              TImage = packed record
                                                                                title: String;
                                                                                text: String;
                                                                                status: String;
                                                                                big:      TBig;
                                                                                small:    TSmall;
                                                                                countImg: Integer;
                                                                                item:TItem;
                                                                              end;
                                                                              TSize = packed record
                                                                                Width:  LongInt;
                                                                                Height: LongInt;
                                                                              end;
                                                                               
                                                                              var
                                                                                Form1: TForm1;
                                                                                Image : Array Of TImage;
                                                                                Index1:Integer;
                                                                              implementation
                                                                               
                                                                              {$R *.dfm}
                                                                               
                                                                              function GetTSize(aWidth: LongInt; aHeight: LongInt): TSize;
                                                                              begin
                                                                                with Result do begin
                                                                                  Width  := aWidth;
                                                                                  Height := aHeight;
                                                                                end;
                                                                              end;
                                                                               
                                                                              function NewTImage(count: LongInt; smallImg: TSize; bigImg: TSize): TImage;
                                                                              var
                                                                                i: LongInt;
                                                                              begin
                                                                               
                                                                                with Result do begin
                                                                                  countImg := count;
                                                                                  SetLength(big, count);
                                                                                  SetLength(small, count);
                                                                                  for i := Low(small) to High(small) do with small[i] do begin
                                                                                    Width  := smallImg.Width;
                                                                                    Height := smallImg.Height;
                                                                                    SetLength(Pixels, smallImg.Width, smallImg.Height);
                                                                                  end;
                                                                                  for i := Low(big)   to High(big)   do with   big[i] do begin
                                                                                    Width  :=   bigImg.Width;
                                                                                    Height :=   bigImg.Height;
                                                                                    SetLength(  Pixels,   bigImg.Width,   bigImg.Height);
                                                                                  end;
                                                                                end;
                                                                              end;
                                                                               
                                                                              procedure TForm1.FormCreate(Sender: TObject);
                                                                               
                                                                                //Image: TImage;
                                                                              begin
                                                                                setLength(Image,10);
                                                                                Image[0] := NewTImage(4, GetTSize(16, 16), GetTSize(256, 256)); // Выделит 10 маленьких изображений и 10 больших изображений. Общий объем выделенной памяти:
                                                                               // Image[0].countImg := 4; //<- Вы инициализируете это значение в конструкторе
                                                                                Image[0].title := 'Название';
                                                                                Image[0].text:='Мой текст';
                                                                               
                                                                                Image[0].status:='current';
                                                                                Image[0].item.text.description:='Описание 3';
                                                                               
                                                                                Image[0].big[0].status:='wait';
                                                                                Image[0].big[1].status:='wait';
                                                                                Image[0].big[2].status:='wait';
                                                                                Image[0].big[3].status:='wait';
                                                                               
                                                                                Image[0].big[0].type1:='test1';
                                                                                Image[0].big[1].type1:='test2';
                                                                                Image[0].big[2].type1:='test2';
                                                                                Image[0].big[3].type1:='test3';
                                                                               
                                                                                Image[1]:=NewTImage(3, GetTSize(16, 16), GetTSize(256, 256));
                                                                                Image[1].title:='Название 1';
                                                                                Image[1].text:='Мой текст 1';
                                                                                Image[1].status:='wait';
                                                                                Image[1].item.text.description:='Описание 2';
                                                                               
                                                                                Image[1].big[0].type1:='test1';
                                                                                Image[1].big[1].type1:='test2';
                                                                                Image[1].big[2].type1:='test3';
                                                                               
                                                                                Image[1].big[0].status:='wait';
                                                                                Image[1].big[1].status:='wait';
                                                                                Image[1].big[2].status:='wait';
                                                                               
                                                                                Image[2]:=NewTImage(4, GetTSize(16, 16), GetTSize(256, 256));
                                                                                Image[2].title:='test';
                                                                               
                                                                                Image[2].title:='Название 2';
                                                                                Image[2].text:='Мой текст 2';
                                                                                Image[2].status:='wait';
                                                                                Image[2].item.text.description:='Описание 3';
                                                                              //Image[2] --> img[0..3] ********************************************************
                                                                                Image[2].big[0].type1:='test1';
                                                                                Image[2].big[1].type1:='test2';
                                                                                Image[2].big[2].type1:='test3';
                                                                                Image[2].big[3].type1:='test4';
                                                                               
                                                                                Image[2].big[0].status:='wait';
                                                                                Image[2].big[1].status:='wait';
                                                                                Image[2].big[2].status:='wait';
                                                                                Image[2].big[3].status:='wait';
                                                                               
                                                                               
                                                                                Image[3]:=NewTImage(2, GetTSize(16, 16), GetTSize(256, 256));
                                                                                Image[3].title:='Название 3';
                                                                                Image[3].text:='Мой текст 3';
                                                                                Image[3].status:='wait';
                                                                                Image[3].item.text.description:='Описание 4';
                                                                               
                                                                               
                                                                              //Image[3] --> img[0..1] ********************************************************
                                                                                Image[3].big[0].type1:='test1';
                                                                                Image[3].big[1].type1:='test2';
                                                                               
                                                                                Image[3].big[0].status:='wait';
                                                                                Image[3].big[1].status:='wait';
                                                                                
                                                                               
                                                                                Image[4]:=NewTImage(7, GetTSize(16, 16), GetTSize(256, 256));
                                                                               
                                                                                Image[4].title:='Название 4';
                                                                                Image[4].text:='Мой текст 4';
                                                                                Image[4].status:='wait';
                                                                                Image[4].item.text.description:='Описание 5';
                                                                              //Image[4] --> img[0..6] ********************************************************
                                                                                Image[4].big[0].type1:='test1';
                                                                                Image[4].big[1].type1:='test2';
                                                                                Image[4].big[2].type1:='test3';
                                                                                Image[4].big[3].type1:='test4';
                                                                                Image[4].big[4].type1:='test5';
                                                                                Image[4].big[5].type1:='test6';
                                                                                Image[4].big[6].type1:='test7';
                                                                               
                                                                               
                                                                                Image[4].big[0].status:='wait';
                                                                                Image[4].big[1].status:='wait';
                                                                                Image[4].big[2].status:='wait';
                                                                                Image[4].big[3].status:='wait';
                                                                                Image[4].big[4].status:='wait';
                                                                                Image[4].big[5].status:='wait';
                                                                                Image[4].big[6].status:='wait';
                                                                               
                                                                               
                                                                                Image[5]:=NewTImage(3, GetTSize(16, 16), GetTSize(256, 256));
                                                                               
                                                                              Image[5].title:='Название 5';
                                                                              Image[5].text:='Мой текст 5';
                                                                              Image[5].status:='wait';
                                                                              Image[5].item.text.description:='Описание 6';
                                                                              //Image[5] --> img[0..2] ********************************************************
                                                                              Image[5].big[0].type1:='test1';
                                                                              Image[5].big[1].type1:='test2';
                                                                              Image[5].big[2].type1:='test3';
                                                                               
                                                                              Image[5].big[0].status:='wait';
                                                                              Image[5].big[1].status:='wait';
                                                                              Image[5].big[2].status:='wait';
                                                                               
                                                                              Image[6]:=NewTImage(4, GetTSize(16, 16), GetTSize(256, 256));
                                                                              Image[6].title:='Название 6';
                                                                              Image[6].text:='Мой текст 6';
                                                                              Image[6].status:='wait';
                                                                              Image[6].item.text.description:='Описание 7';
                                                                              //Image[6] --> img[0..3] ********************************************************
                                                                              Image[6].big[0].type1:='test1';
                                                                              Image[6].big[1].type1:='test2';
                                                                              Image[6].big[2].type1:='test3';
                                                                              Image[6].big[3].type1:='test4';
                                                                               
                                                                               
                                                                              Image[6].big[0].status:='wait';
                                                                              Image[6].big[1].status:='wait';
                                                                              Image[6].big[2].status:='wait';
                                                                              Image[6].big[3].status:='wait';
                                                                               
                                                                              Image[7]:=NewTImage(8, GetTSize(16, 16), GetTSize(256, 256));
                                                                              Image[7].title:='Название 7';
                                                                              Image[7].text:='Мой текст 7';
                                                                              Image[7].status:='wait';
                                                                              Image[7].item.text.description:='Описание 8';
                                                                               
                                                                              //Image[7] --> img[0..7] ********************************************************
                                                                              Image[7].big[0].type1:='test1';
                                                                              Image[7].big[1].type1:='test1';
                                                                              Image[7].big[2].type1:='test1';
                                                                              Image[7].big[3].type1:='test1';
                                                                              Image[7].big[4].type1:='test1';
                                                                              Image[7].big[5].type1:='test1';
                                                                              Image[7].big[6].type1:='test1';
                                                                              Image[7].big[7].type1:='test1';
                                                                               
                                                                               
                                                                               
                                                                              Image[7].big[0].status:='wait';
                                                                              Image[7].big[1].status:='wait';
                                                                              Image[7].big[2].status:='wait';
                                                                              Image[7].big[3].status:='wait';
                                                                              Image[7].big[4].status:='wait';
                                                                              Image[7].big[5].status:='wait';
                                                                              Image[7].big[6].status:='wait';
                                                                              Image[7].big[7].status:='wait';
                                                                               
                                                                              Image[8]:=NewTImage(3, GetTSize(16, 16), GetTSize(256, 256));
                                                                              Image[8].title:='Название 8';
                                                                              Image[8].text:='Мой текст 8';
                                                                              Image[8].status:='wait';
                                                                              Image[8].item.text.description:='Описание 8';
                                                                               
                                                                              //Image[8] --> img[0..2] ********************************************************
                                                                              Image[8].big[0].type1:='test1';
                                                                              Image[8].big[1].type1:='test1';
                                                                              Image[8].big[2].type1:='test1';
                                                                               
                                                                               
                                                                              Image[8].big[0].status:='wait';
                                                                              Image[8].big[1].status:='wait';
                                                                              Image[8].big[2].status:='wait';
                                                                               
                                                                              Image[9]:=NewTImage(4, GetTSize(16, 16), GetTSize(256, 256));
                                                                              Image[9].title:='Название 9';
                                                                              Image[9].text:='Мой текст 9';
                                                                              Image[9].status:='wait';
                                                                              Image[9].item.text.description:='Описание 9';
                                                                               
                                                                              //Image[9] --> img[0..3] ********************************************************
                                                                              Image[9].big[0].type1:='test1';
                                                                              Image[9].big[1].type1:='test1';
                                                                              Image[9].big[2].type1:='test1';
                                                                              Image[9].big[3].type1:='test1';
                                                                               
                                                                              Image[9].big[0].status:='wait';
                                                                              Image[9].big[1].status:='wait';
                                                                              Image[9].big[2].status:='wait';
                                                                              Image[9].big[3].status:='wait';
                                                                               
                                                                              end;
                                                                               
                                                                              procedure TForm1.FormShow(Sender: TObject);
                                                                              var i,j,Index1: Integer;
                                                                              //vetka,text,data1,item1,Node: TTreeNode;
                                                                              begin
                                                                                for I := Low(Image) to High(Image) do
                                                                                begin
                                                                                   data1:=TreeView1.Items.Add(nil,'Data['+IntToStr(i)+']');
                                                                               
                                                                                   Node:=TreeView1.Items.AddChild(data1,'Title'+IntToStr(i));
                                                                                   Node:=TreeView1.Items.AddChild(Node,Image[i].title);
                                                                               
                                                                               
                                                                                   Node:=TreeView1.Items.AddChild(data1,'Text['+IntToStr(i)+']');
                                                                                   Node:=TreeView1.Items.AddChild(Node,Image[i].text);
                                                                               
                                                                                   Node:=TreeView1.Items.AddChild(data1,'Status['+IntToStr(i)+']');
                                                                                   Node:=TreeView1.Items.AddChild(Node,Image[i].status);
                                                                               
                                                                                   Node:=TreeView1.Items.AddChild(data1,'item['+IntToStr(i)+']');
                                                                                   Node:=TreeView1.Items.AddChild(Node,'Text'+IntToStr(i));
                                                                                   Node:=TreeView1.Items.AddChild(Node, 'Description'+IntToStr(i));
                                                                                   Node:=TreeView1.Items.AddChild(Node,Image[i].item.text.description);
                                                                               
                                                                               
                                                                                    Node1:=TreeView1.Items.AddChild(data1,'img['+IntToStr(i)+']');
                                                                               
                                                                                   for J := Low(Image[i].big) to High(Image[i].big) do
                                                                                   begin
                                                                                    //  ShowMessage(Data[i].NewTImage.big[j].status);
                                                                                     Node2:=TreeView1.Items.AddChild(Node1,'big');
                                                                                     Node:=TreeView1.Items.AddChild(Node2,Image[i].big[j].status);
                                                                                     Node:=TreeView1.Items.AddChild(Node2,Image[i].big[j].type1);
                                                                                   end;
                                                                                end;
                                                                                TreeView1.FullExpand;
                                                                               
                                                                                 Node3 := TreeView1.Items.GetFirstNode;
                                                                                if Node3 <> nil then Node3.Item[2].Item[0].Text := 'current'; // Установить у Image[0] -> Status = current
                                                                               
                                                                                Node3 := Node3.GetNextChild(Node3);
                                                                               
                                                                               
                                                                                  while Node3 <> nil do begin
                                                                                      Node3.Item[2].Item[0].Text := 'wait'; // У все последующих сбросить статус в wait
                                                                                     for Index1 := 0 to Node3.Item[4].Count - 1 do Node3.Item[4].Item[Index1].Item[0].Text := 'wait';
                                                                                     Node3 := Node3.GetNextChild(Node3);
                                                                                  end;
                                                                                  Index1 := 0; // Установить начальные значения индексных переменных
                                                                                  Node3 := TreeView1.Items.GetFirstNode;
                                                                                  if Node3 <> nil then
                                                                                    Timer1.Enabled := True; // Запустить таймер
                                                                               
                                                                              end;
                                                                               
                                                                              procedure TForm1.Timer1Timer(Sender: TObject);
                                                                              begin
                                                                              //*****************************
                                                                              //*1 Вариант
                                                                              //*****************************
                                                                              {}with Node3.Item[4] do begin
                                                                                 if Index1 < Count then
                                                                                    Item[Index1].Item[0].text:='ok';
                                                                                    //Item[Index1].Item[1].Text := 'ok'; // Image[Node] -> Img -> Big[Index] -> Status
                                                                                    inc(Index1);
                                                                                    if Index1 >= Count then repeat
                                                                                       Node3.Item[2].Item[0].Text := 'ok'; // Image[Node] -> Status
                                                                                       Node3 := Node3.GetNextChild(Node3); // Image[Node++] -- Переходим к следующей
                                                                                       if Node3 = nil then begin
                                                                                          Timer1.Enabled := False;
                                                                                          break;
                                                                                       end else begin
                                                                                          Node3.Item[2].Item[0].Text := 'current';
                                                                                          Index1 := 0;
                                                                                       end;
                                                                                    until Node3.Item[4].Count > 0;
                                                                                 end;
                                                                               
                                                                              //*****************************
                                                                              //*2 Вариант
                                                                              //*****************************
                                                                              {case Index1 of
                                                                                -1: Node3.Item[2].Item[0].Text := 'current';
                                                                               
                                                                                else
                                                                                   with Node3.Item[4] do begin // Так лучше, чтобы не было лишней задержки.
                                                                                      if Index1 >= Count then begin
                                                                                         Node3.Item[2].Item[0].Text := 'ok';
                                                                                         Node3 := Node3.GetNextChild(Node3);
                                                                                         if Node3 = nil then Timer1.Enabled := False;
                                                                                         Index1 := -2; // Потом все равно будет inc(Index1) и значение станет -1. Как раз первый вариант case Index1 of
                                                                                        
                                                                                      end else
                                                                                         Item[Index1].Item[0].Text := 'ok';
                                                                                end;
                                                                                end;
                                                                                inc(Index1); }
                                                                              //*****************************************************
                                                                              end;
                                                                               
                                                                              end.
                                                                            Сообщение отредактировано: Katerina1993 -
                                                                            0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                                                                            0 пользователей:


                                                                            Рейтинг@Mail.ru
                                                                            [ Script execution time: 0,1476 ]   [ 29 queries used ]   [ Generated: 21.12.24, 14:25 GMT ]