На главную Наши проекты:
Журнал   ·   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_
Страницы: (3) 1 [2] 3  все  ( Перейти к последнему сообщению )  
> Как добавить дочерний элемент threeview?
    Тогда просто присваивайте 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 Кбайт, скачиваний: 67)
                Сообщение отредактировано: 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, как и написано в комментарии выше
                                0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                                0 пользователей:
                                Страницы: (3) 1 [2] 3  все


                                Рейтинг@Mail.ru
                                [ Script execution time: 0,1250 ]   [ 18 queries used ]   [ Generated: 14.09.25, 01:39 GMT ]