Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.07.29;
Скачать: CL | DM;

Вниз

Как перехватить ошибку?   Найти похожие ветки 

 
Bad_B   (2007-07-05 23:45) [0]

List Index out of bounds (...).
Необходимо сделать что бы когда она возникает выдавать свой message, (что мол последовательность действий нарушена)

ЗЫ. с этим не работал, поэтому укажите куда хоть копать


 
turbouser ©   (2007-07-06 00:04) [1]

Такая ошибка в нормальной программе в принципе не должна появляться.
Т.е. надо править код так, что бы небыло выходов за границы массива.


 
{RASkov} ©   (2007-07-06 00:09) [2]

 try
   ShowMessage(ListBox1.Items[10000]);
 except
   On EStringListError do ShowMessage("Нет такого итема");
 end;

или просто:
 try
   ShowMessage(ListBox1.Items[10000]);
 except
   ShowMessage("Нет такого итема");
 end;

??
Запускай из проводника... или если в делфи включена "Stop on Delphi Exception" то жмем Ок и сразу F9...
Ну и, как и замечено в [1], нужно следить за границами....


 
MsGuns ©   (2007-07-06 00:09) [3]

try .. except ShowMessage("ошибка однако"); end;


 
Bad_B   (2007-07-06 00:23) [4]

Спасибо за подсказку))

Все-таки прийдется перекодить (не там ошибку видел оказывается), на будущее учту "ловушку".

ЗЫ. еще раз спс:)


 
Германн ©   (2007-07-06 01:36) [5]


> Bad_B   (05.07.07 23:45)
>
> List Index out of bounds (...).
> Необходимо сделать что бы когда она возникает выдавать свой
> message, (что мол последовательность действий нарушена)


try
 for i:=0 to ListBox1.Items.Count-1 do begin
   if ListBox1.Items[i] "удовлетворяет некоему критерию" then ListBox1.Items.Delete(i);
 end;
except
 ShowMessage("Блин! Ну когда же ты поймёшь наконец, что НЕЛЬЗЯ удалять Айтемы в цикле for???");
end;

:-)


 
{RASkov} ©   (2007-07-06 03:36) [6]

> ShowMessage("Блин! Ну когда же ты поймёшь наконец, что НЕЛЬЗЯ удалять Айтемы в цикле for???");

Не увидит это сообщение :( Если конечно "удовлетворяет некоему критерию" не вызовет исключения....
Да и удалятся максимум половина итемов...

> что НЕЛЬЗЯ удалять Айтемы в цикле for

downto?


 
Bad_B   (2007-07-06 03:42) [7]

Если интересно(мало ли)))), сделал так
.......
{делал для того чтобы потом записывать в ini-файл какие кнопки остались не нажаты, и пр., и пр.}
.......
var
s,s1:string;
h,g,Nomer_Button:integer;
d:Tstringlist;
...........
  g:=form1.ListBox1.Count;
  .....
  if g<=0 then showmessage("......")
  else
begin
   d:=TStringList.Create;
   for h:=0 to ListBox1.Count-1 do
   d.Add(form1.ListBox1.Items.Strings[h]);
   d.Delete(Nomer_Button-1);
   d.Insert(Nomer_Button-1,"0");
   listbox1.Clear;
   for h:=0 to d.Count-1 do
   form1.ListBox1.Items.Add(d.Strings[h]);
   d.Free;
end;
........

где Nomer_Button - это номер кнопки (с 1 начинается счет)

ЗЫ. думаю что всем понятен код, но на всякий случай -
замена на 0 того что хранится в form1.ListBox1.Items.Strings[h]
никак не изменяет количество ListBox1.Count, поэтому ошибочка исчезает)))

ЗЫЫ. извращение? да))) но для любителя, имхо, сойдет


 
{RASkov} ©   (2007-07-06 03:59) [8]

> [7] Bad_B   (06.07.07 03:42)

Что к чему....

> думаю что всем понятен код

Зря ты так думаешь.... :)

>   for h:=0 to ListBox1.Count-1 do
>   d.Add(form1.ListBox1.Items.Strings[h]);

Все проще d.Assign(form1.ListBox1.Items);
Тоже самое и потом, наоборот...

В итоге все свелось к 2-м строчкам :)
  form1.ListBox1.Items.Delete(Nomer_Button-1);
  form1.ListBox1.Items.Insert(Nomer_Button-1,"0");

:)
Не ну я вообще фик его знает, может какой глубокий смысл есть в приведенном примере.... :)

> замена на 0 того что хранится в form1.ListBox1.Items.Strings[h]
> никак не изменяет количество ListBox1.Count

Ага :)

> извращение? да)))

Полнейшее :)
Даже....

> но для любителя, имхо, сойдет

... и не думай :)


 
{RASkov} ©   (2007-07-06 04:01) [9]

> В итоге все свелось к 2-м строчкам :)
>  form1.ListBox1.Items.Delete(Nomer_Button-1);
>  form1.ListBox1.Items.Insert(Nomer_Button-1,"0");
> :)

Даже к одной :)
form1.ListBox1.Items[Nomer_Button-1]:="0";
:)


 
{RASkov} ©   (2007-07-06 04:10) [10]

В итоге вот весь твой код:
var
 Nomer_Button: integer;
...........
 if form1.ListBox1.Count<=0 then showmessage("......")
  else form1.ListBox1.Items[Nomer_Button-1] := "0";
........

Пойдет? ;)


 
{RASkov} ©   (2007-07-06 04:13) [11]

Т.е. вот так
var
Nomer_Button: integer;
...........
Dec(Nomer_Button);
if (form1.ListBox1.Count<=0) or (Nomer_Button<0) or (Nomer_Button>=form1.ListBox1.Count) then showmessage("......")
 else form1.ListBox1.Items[Nomer_Button] := "0";
........

:о)


 
{RASkov} ©   (2007-07-06 04:21) [12]

> form1.ListBox1.Count.... form1.ListBox1.Items[Nomer_Button] := "0";

Если этот код находиться в методе формы, то писать Form1 не нужно.... просто - ListBox1.Items[Nomer_Button] := "0";

> d.Add(form1.ListBox1.Items.Strings[h]);
....
> d.Strings[h]);

Так же свойство Strings не обязательно указывать, оно в TStrings по умолчанию... но это не важно....


 
Bad_B   (2007-07-06 04:22) [13]

Да че то я перемудрил с кодом:)


> {RASkov} ©   (06.07.07 04:10) [10]

Лихо))) Спс за очередную подсказку (в 10 так сказать))))

ОФФ:
ЗЫ. Вот в очередной раз задумался: или начать-таки по плотнее изучать программирование (в частности Delphi), или забросить все это дело, и не позориться))))....


 
{RASkov} ©   (2007-07-06 04:41) [14]

> [13] Bad_B   (06.07.07 04:22)
> или начать-таки по плотнее изучать программирование

А ты еще раз глянь на свой код в [7] и включи "думалку"...
Правда я тоже не сразу сообразил, из-за твоего "стильного форматирования" и "умных" имен переменных, что там к чему.
Но потом "постепенно начал вникать".... (мне аж самому смешно стало:)). Отсюда и столько постов последовало...:)
А вот над тем, чем задумался, подумай серьезно.


 
Anatoly Podgoretsky ©   (2007-07-06 07:45) [15]

> Германн  (06.07.2007 01:36:05)  [5]

Можно, но делать надо это правильно, а не красиво.


 
Плохиш ©   (2007-07-06 11:46) [16]


>  ShowMessage("Блин! Ну когда же ты поймёшь наконец, что
> НЕЛЬЗЯ удалять Айтемы в цикле for???");

Почему нельзя, можно, только идти надо с другой стороны :-D



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

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

Наверх




Память: 0.51 MB
Время: 0.02 c
2-1183633801
WhiteCat
2007-07-05 15:10
2007.07.29
Скрытые директории


2-1183244422
A2618
2007-07-01 03:00
2007.07.29
Рисование пикселей по формуле


4-1171695722
VitAngel
2007-02-17 10:02
2007.07.29
ShellExecute


15-1183143709
ferr
2007-06-29 23:01
2007.07.29
Что требуется для поездки в Украину?


3-1177075901
Krants
2007-04-20 17:31
2007.07.29
ошибка при записи, ADO