Вниз
Скачать: CL | DM;

TListItems.Add   Найти похожие ветки 

← →
TUser ©   (2004-05-19 15:54) [0]

Почему происходит ошибка в программе? Вроде бы на совершенно ровном месте. Есть ListView, пишем

with ListView1.Items do begin
  ...
  with Add do begin
     Caption:=
     Checked:=
     ...

На Add вываливается AV и CPU window (на команде push). С Insert"ом - такой же результат. Даже не понимаю, в каком направлении копать.


← →
TUser ©   (2004-05-19 15:58) [1]

Забыл написать - итемы добавляются в цикле. Первая итерация проходит нормально, а потом - бряк. До этому тоже итемы добавлялись и все было нормально.


← →
MU ©   (2004-05-19 16:02) [2]

Такой код у меня работает. Приведите весь цикл полностью


← →
Гаврила ©   (2004-05-19 16:04) [3]

убери  with - заработает :-)))


← →
TUser ©   (2004-05-19 16:12) [4]

Убрал with - вылетело на первой итерации.
Код цикла такой

procedure TForm2.SetFounds(Founds:TPairs);
var i,j,k,n:integer; f:boolean; li:TListItem;
begin
  i:=0;
  with ListView1.Items do begin
     while i<Count do
        if FTypes[i] = dtFound then begin
           Delete(i);
           for j:=i to length(FTypes)-2 do begin
              FTypes[j]:=FTypes[j+1];
              FData[j]:=FData[j+1];
              end;
           setLength(FTypes,length(FTypes)-1);
           setLength(FData,length(FData)-1);
           end else inc (i);
     setLength(FFounds,length(Founds)); k:=0;
     for i:=0 to length(Founds)-1 do begin
        if k<length(form1.Domains) then
           if form1.Domains[k]=i then
              inc(k);
        FFounds[i,0]:=Founds[i,0]; FFounds[i,1]:=Founds[i,1];
        FFounds[i,2]:=Founds[i,2]; FFounds[i,3]:=Founds[i,3];
        with Add do begin
           Caption:="Found No "+inttostr(i-Form1.Domains[k-1]+1)+"; domain "+inttostr(k);
           setLength(FTypes,length(FTypes)+1);
           setLength(FData,length(FData)+1);
           FTypes[length(FTypes)-1]:=dtFound;
           FData[length(FData)-1,0]:=i;

           n:=0; j:=0; f:=true;
           while f and (j<length(FTypes)) do
              if FTypes[j]<>dtDomain then
                 inc (j)
                 else begin
                 inc(n);
                 if n = k-1 then
                    f:=false
                    else inc (j);
                 end;
           f:=false;
           if (Founds[i,0]<FData[j,0]) or (FData[j,0]=-1) then begin
              FData[j,0]:=Founds[i,0];
              f:=true;
              end;
           if (Founds[i,3]+2>FData[j,1]) {or (FData[j,1]=-1)} then begin
              FData[j,1]:=Founds[i,1]+2;
              f:=true;
              end;
           if f then
              ListView1.Items.Item[j].Caption:="Domain "+inttostr(FData[j,0])+"-"+inttostr(FData[j,1]);

           Checked:=false;
           end;
        end;
     end;
end;


← →
MU ©   (2004-05-19 16:24) [5]

И теперь по шагам пройдите и укажите строчку, на которой возникает ошибка


← →
Гаврила ©   (2004-05-19 16:39) [6]

Видимо, где-то вылез за границу динамического массива


← →
TUser ©   (2004-05-19 16:40) [7]

Все, сообразил. Конечно, перепутал с индексами. Ошибка возникала на with Add do begin, но это был трабл отладчика. Перезагрузился, теперь ошибку выдает там, где она и есть, на ListView1.Items.Item[j] - такого итема еще не существует.



Страницы: 1 вся ветка

Скачать: CL | DM;



Память: 0.47 MB
Время: 0.03 c
11-1073742406
Phantomaz
2004-01-10 16:46
2004.05.30
Как вкл./откл. выпадание меню по клику на иконке в трее ?


3-1083762745
VEN
2004-05-05 17:12
2004.05.30
Типы dBase


7-1082965653
Master Paleva
2004-04-26 11:47
2004.05.30
Ctrl+Alt+Delete


7-1083153850
CyBeR
2004-04-28 16:04
2004.05.30
Переключение между формами с помощью набора закладок


1-1084537209
Goida
2004-05-14 16:20
2004.05.30
Многомерные динамические массивы




   Наверх