Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 28.10.2012, 20:46   #1
Ericnex
Форумчанин
 
Регистрация: 07.04.2010
Сообщений: 218
По умолчанию Ошибка List Index of bounds(0)

При нажатии кнопки выдает вышеназванную ошибку. В чем может быть проблема?

Код:
procedure TForm1.Button2Click(Sender: TObject);
var
Kvad1, Kvad2:TRect;
begin
bitmap := TBitmap.Create;
Kvad1.Left := 100;
Kvad1.Right := 0;
Kvad1.Top := 100;
Kvad1.Bottom := 0;
for i:=0 to 99 do
for j:=0 to 99  do
begin
if Form1.Image1.Canvas.Pixels[i,j] = clblack then
begin
if i<Kvad1.Left then Kvad1.Left := i;
if i>Kvad1.Right then Kvad1.Right := i+1;
if j<Kvad1.Top then Kvad1.Top := j;
if j>Kvad1.Bottom then Kvad1.Bottom := j+1;
end;
end;
Kvad2.Left := 0;
Kvad2.Right := 100;
Kvad2.Top := 0;
Kvad2.Bottom := 100;
try
bitmap.Assign(Form1.Image1.Picture.Bitmap);
bitmap.Canvas.CopyRect(Kvad2,bitmap.Canvas,Kvad1);
image1.Picture.Bitmap.Canvas.StretchDraw(Kvad2, bitmap);
finally
bitmap.Free;
end;
int(); // вызов процедуры
end;
Ericnex вне форума Ответить с цитированием
Старый 28.10.2012, 21:01   #2
Delphi_ProGer
Форумчанин
 
Регистрация: 30.10.2010
Сообщений: 524
По умолчанию

Эта ошибка означает что вы обращаетесь к 0 елементу списка, но я здесь не вижу этого...Что в процедуре Init()?
Чтобы избежать такой ошибки - проверяйте количество елементов в списке.
Код:
if List.Count>0 then ...
Протрассируйте программу, на какой строке ошибка?
Delphi_ProGer вне форума Ответить с цитированием
Старый 28.10.2012, 21:12   #3
Ericnex
Форумчанин
 
Регистрация: 07.04.2010
Сообщений: 218
По умолчанию

Собственно сама процедура:
Код:
sum:=0;
for i:=0 to 99 do
for j:=0 to 99  do
begin
if Form1.Image1.canvas.Pixels[i,j]=clblack then
sum:=sum+vesa[i+j*100];
end;
if sum>=p then Form1.StatusBar1.Panels[0].Text:= 'Это символ:Крестик' else Form1.StatusBar1.Panels[0].Text:= 'Это символ:Не крестик';
end;
Ericnex вне форума Ответить с цитированием
Старый 28.10.2012, 21:29   #4
Sciv
Старожил
 
Аватар для Sciv
 
Регистрация: 16.05.2012
Сообщений: 3,211
По умолчанию

Код:
StatusBar1.Panels[0]
Она точно создана, эта панель?

На какой конкретно строчке кода вылетает ошибка (обычно при ошибке происходит переключение в редактор и синим цветом выделяется ошибочная или следующая за ней строка)?
Начал решать проблему с помощью регулярных выражений. Теперь решаю две проблемы...
Sciv вне форума Ответить с цитированием
Старый 28.10.2012, 21:31   #5
Delphi_ProGer
Форумчанин
 
Регистрация: 30.10.2010
Сообщений: 524
По умолчанию

У меня сложились такие 2 варианта:
1) vesa[i+j*100] - ошибка здесь, может вы вышли за пределы массива...
2) или ошибка здесь - StatusBar1.Panels[0].Text (сомневаюсь что здесь, но может вы не создали Panel на StatusBar1).

P.S.
Все же хотелось узнать, где именно у вас возникает эта ошибка(на какой строке).
Delphi_ProGer вне форума Ответить с цитированием
Старый 28.10.2012, 21:39   #6
Sciv
Старожил
 
Аватар для Sciv
 
Регистрация: 16.05.2012
Сообщений: 3,211
По умолчанию

Сомневаюсь, что i+j*100 даст индекс 0... разве что и i, и j равны 0 обе.

UPD Нет, судя по циклам, вполне может и такое случиться. И вот здесь:

Код:
for i:=0 to 99 do
for j:=0 to 99  do
begin
if Form1.Image1.Canvas.Pixels[i,j]
пикселы на канве точно с точки [0,0] отсчитываются?

Ну ладно, проверил в дельфе - точно с [0,0]. Этот кусок должОн работать

UPD 2. Еще проверил - точняк из-за панели статуса. Недостаточно просто кинуть на форму статус-бар, надо еще панель создать на нем.
А то, что по умолчанию - это так, хранилище для панелей.
Начал решать проблему с помощью регулярных выражений. Теперь решаю две проблемы...

Последний раз редактировалось Sciv; 28.10.2012 в 21:46.
Sciv вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
ошибка List index out of bounds (0) Natalie023 Помощь студентам 9 17.12.2011 19:27
Почему ошибка 'List index out of bounds (0)'? WandererX Общие вопросы Delphi 7 20.06.2010 11:17
Ошибка List Index out of bounds Rapala Помощь студентам 1 03.05.2010 17:33
Ошибка List index of bounds(1) Blue Heron Помощь студентам 5 17.03.2010 00:38
ошибка:List index out of bounds tanek Помощь студентам 7 26.12.2009 20:38