Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Для новичков > обработка ошибки..


Автор: AlexDi 10.9.2009, 13:03
 есть такой код (x,a,b:real):
Код

procedure TForm1.Button1Click(Sender: TObject);
begin
    try
x:=a/b;
edit3.Text:=floattostr(x);

   except
 x:=0;
 edit3.Text:=floattostr(x);
 {vcfgj}
  end;
end;

 подскажите пожалуйста, я не хочу, чтобы прои делении на ноль выскакивало сообщение об ошибке, а просто x присваивался 0, что не правильно, что нужно изменить..?

Автор: Akella 10.9.2009, 13:21
сделай проверку
Код

if b = 0 then...


Добавлено через 19 секунд
Такие вопросы нужно задавать в разделе для новичков

Автор: AlexDi 10.9.2009, 13:24
нет, а если b присваивается 0 где-нибудь в коде?..мне нужно решение общей ситуации, как убрать это предупреждение об ошибке или как обойти (отказаться) от него.. smile  
даже не правильно сказал, а если например такое:
Код

 if DirectoryExists(WorkTable) then
  begin
   try
    RmDir(WorkTable);
   except
  end;
  end;

 т.е. нужно удалить директорию, и если она не пустая, то возникает ошибка..а мне нужно, если не удаляется, то просто продолжить дальше, и не писать сообщение, что директория не удаляется..
про математику, это так, для примера, просто хочется вообще разобраться..

Автор: Keeper89 10.9.2009, 13:36
AlexDi, почитайте вот http://keeper89.blogspot.com/2009/09/x-y-z.html.

Если вы используете стандартные функции и процедуры ввода/вывода, используйте соответствующий метод обработки ошибок.

Вот пример из хелпа:
Код

procedure TForm1.Button1Click(Sender: TObject);
begin
   {$I-}
   { Get directory name from TEdit control }
   RmDir(Edit1.Text);
   if IOResult <> 0 then
     MessageDlg('Cannot remove directory', mtWarning, [mbOk], 0, mbOk)
   else
     MessageDlg('Directory removed', mtInformation, [mbOk], 0, mbOk);
end;

Автор: AlexDi 10.9.2009, 13:40
   {$I-} насколько я понимаю вообще отключается обработчик ошибок..? тоже наверно не очень.., или может его потом включить..   {$I+} ?
так же нельзя, насколько я понимаю.:(

Автор: Keeper89 10.9.2009, 13:42
Ну да, после обработки его можно включить.

Автор: Данкинг 10.9.2009, 14:08
А {$I-} на Дельфи работает? smile Я думал, это всё осталось в Паскале.

Автор: Frees 10.9.2009, 14:28
Цитата(AlexDi @  10.9.2009,  16:03 Найти цитируемый пост)
подскажите пожалуйста, я не хочу, чтобы прои делении на ноль выскакивало сообщение об ошибке

в твоем коде ошибка выскочит только при отладке приложения если просто запустиш ехе то ошибки не будет

Автор: Keeper89 10.9.2009, 14:29
Цитата(Данкинг @  10.9.2009,  15:08 Найти цитируемый пост)
А {$I-} на Дельфи работает? smile Я думал, это всё осталось в Паскале. 

Директивы работают, все или нет, я правда не знаю.

Автор: Akella 11.9.2009, 14:27
Цитата(AlexDi @  10.9.2009,  13:24 Найти цитируемый пост)
нет, а если b присваивается 0 где-нибудь в коде?

и что?? а проверить b непосредственно перед делением религия не позволяет?
Код

if b <> 0 then
 c := a/b;


Добавлено через 35 секунд
Цитата(AlexDi @  10.9.2009,  13:24 Найти цитируемый пост)
а если b присваивается 0 где-нибудь в коде?

а как ещё можно "не в коде" присвоить значение b?? Ыы

Добавлено через 2 минуты и 21 секунду
Цитата(AlexDi @  10.9.2009,  13:24 Найти цитируемый пост)
 т.е. нужно удалить директорию, и если она не пустая, то возникает ошибка..а мне нужно, если не удаляется, то просто продолжить дальше, и не писать сообщение, что директория не удаляется..

опять же
Код
if (DirectoryExists(WorkTable)) and (DirIsNotEmpty(WorkTable)) then  RmDir(WorkTable);


DirIsNotEmpty - сам напиши функцию проверки...

Автор: CodeMonkey 11.9.2009, 17:25
http://www.delphikingdom.ru/asp/viewitem.asp?catalogid=1392.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)