Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.05.30;
Скачать: 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 вся ветка

Текущий архив: 2004.05.30;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.049 c
3-1083336426
TankMan
2004-04-30 18:47
2004.05.30
Посоветуйте компонент...


14-1084384898
AndersoNRules
2004-05-12 22:01
2004.05.30
"Network"


6-1081843748
прогер
2004-04-13 12:09
2004.05.30
Как программно убрать галочку "Работать автономно" ?


11-1073511541
reagent
2004-01-08 00:39
2004.05.30
Глюки ICS


3-1083450579
Goida
2004-05-02 02:29
2004.05.30
Как убрать пробелы в полях БД?