
![]() |
Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
|
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[216.73.216.3] |
![]() |
|
Страницы: (3) 1 [2] 3 все ( Перейти к последнему сообщению ) |
Сообщ.
#16
,
|
|
|
Тогда просто присваивайте 0 вместо Low(Node.Item).
|
Сообщ.
#17
,
|
|
|
Почти получилось, пришлось переделать индексы под свой вариант иначе выдовало ошибку, однако при прохожде картинок когда завершается цикл и происходи переход на следующую data, все равно статус у предыдущего элемента (родителя) остается current, хотя автоматически должен быть ok.
Однако если убрать эту строчку (она указана стрелкой в коде), то программа присваивает предыдущему значению ok. Хотя последовательность действий нужно сделать так сначала wait, потом когда дойдет очередь до элемента (родителя) current и только после прохождения всех итераций в родительском элементе сделать статус ok. Я не знаю может следует добавить еще какое-нибудь условие? ![]() ![]() 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; |
Сообщ.
#18
,
|
|
|
Добавьте к коду запуска таймера следующий фрагмент.
![]() ![]() 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; // Запустить таймер ![]() ![]() 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; ![]() ![]() 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; |
Сообщ.
#19
,
|
|
|
Я сейчас посмотрел несколько сайтов по конструкции FOR почитала документацию и не нашла пример такой конструкции.
![]() ![]() 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' |
Сообщ.
#20
,
|
|
|
Это все из-за сонного состояния. Набирал в браузере. Естественно не допечатал кусок.
![]() ![]() for Index1 := 0 to Node3.Count - 1 do Node3.Item[4].Item[Index1].Item[0].Text := 'wait'; |
Сообщ.
#21
,
|
|
|
Вроде получилось, в коде есть некоторая проблема, например в Timer когда проходит итерация, вы используете with Node3.Item[2] do begin, при этом вызываете в дальнейшем text, это понятно так как with присоединяет компонент к свойствам. Однако из-за этого почему-то предыдущий элемент не заменяется на ok, а по прежнему остается current, но если вместо этого:
![]() ![]() 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; Заменить на это, то все работает: ![]() ![]() 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 у меня другой уровень вложенности, поэтому я код изменила. ![]() ![]() 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, нужно только слегка изменить на основе предыдущего фрагмента кода. ![]() ![]() 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; |
Сообщ.
#22
,
|
|
|
Проверила полностью, ошибка правда в конце появляется, по завершению всех процессов.
Прикреплённый файл ![]() |
Сообщ.
#23
,
|
|
|
Таймер надо останавливать, когда переход к следующему Data не удался (конец списка)
![]() ![]() if Node3 = nil then Timer1.Enabled := False else Node3.Item[2].Item[0].Text := 'current'; Но раз не работает, тогда его тоже убирайте. ![]() ![]() 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; |
Сообщ.
#24
,
|
|
|
Я сейчас разбираю вот этот код.
![]() ![]() 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. Значит вот это условие, никогда не сработает. ![]() ![]() if Index1 >= Count then begin Index1 := -3; // Потом все равно будет inc(Index1) и значение станет -2. Как раз первый вариант case Index1 of end; В итоге Index1 продолжает увеличения и сейчас я постоянно получаю ошибку выхода из диапазона. Цитата List index out of bounds (0) |
Сообщ.
#25
,
|
|
|
else пропустил. Там все нормально должно быть вот так
![]() ![]() 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; |
Сообщ.
#26
,
|
|
|
Я опять изменила свой код в соотвествии со своим уровнем вложенности.
Вот пример, без задержки между переходами родительских элементов. ![]() ![]() 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; С задержкой между переходами родительских элементов. ![]() ![]() 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); |
Сообщ.
#27
,
|
|
|
![]() ![]() 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. |
Сообщ.
#28
,
|
|
|
Спасибо, вот мой вариант под Delphi7.
![]() ![]() 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. |
Сообщ.
#29
,
|
|
|
Цитата Katerina1993 @ Спасибо, вот мой вариант под Delphi7. В Цитата Katerina1993 @ procedure TForm1.FormCreate(Sender: TObject); строка 147 ![]() ![]() 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]" -> уже закомментировано ниже по коду, не используется. |
Сообщ.
#30
,
|
|
|
Цитата RusSun @ В Цитата Katerina1993 @ Вчера, 16:40 procedure TForm1.FormCreate(Sender: TObject); строка 147 CollapsedWrap disabledLine numbers on SetLength(Data[9].img,4); Не закомментировано, поэтому даст access violation. Скорее надо на 135 строке ![]() ![]() //В ДОКУМЕНТЕ МАССИВ СОСТОИТ ИЗ 10 ЭЛЕМЕНТОВ, устанавливаем SetLength. SetLength(Data,9); |