Использование готовых компонентов | Обработка ошибок (11 кл. 136 ч.)

Планирование уроков на учебный год (по учебнику К.Ю. Полякова, Е.А. Еремина, полный углублённый курс, по 4 часа в неделю)


Уроки 98 - 99
Использование готовых компонентов
(§53. Использование компонентов)



Содержание урока

Программа с компонентами

Ввод и вывод данных

Обработка ошибок

Вопросы и задания

Задачи


Обработка ошибок


Если в предыдущей программе пользователь введёт не числа, а что-то другое (или пустую строку), программа выдаст сообщение о необработанной ошибке на английском языке и предложит завершить работу. Хорошая программа никогда не должна завершаться аварийно, для этого все ошибки, которые можно предусмотреть, надо обрабатывать.

В современных языках программирования есть так называемый механизм исключений, который позволяет обрабатывать практически все возможные ошибки. Для этого все «опасные» участки кода (на которых может возникнуть ошибка) нужно поместить в блок try — except:

try
{"опасные" команды} 
except
{обработка ошибки} 
end;

Слово try по-английски означает «попытаться», except — «исключение» (исключительная или ошибочная, непредвиденная ситуация). Программа попадает в блок except — end только тогда, когда между try и except произошла ошибка.

В нашей программе «опасные» команды — это операторы преобразования данных из текста в числа (вызовы функции StrToInt). В случае ошибки мы выведем вместо кода цвета знак вопроса. Улучшенный обработчик с защитой от неправильного ввода принимает вид:

try
r:=StrToInt(rEdit.Text);
g:=StrToInt(gEdit.Text);
b:=StrToInt(bEdit.Text);
rgbShape.Brush.Color:=RGBToColor(r,g,b) ;
rgbLabel.Caption:='#1+IntToHex(r,2)+IntToHex(g,2)
+ IntToHex(b,2);
except
rgbLabel.Caption:='?';
end;

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

Существует и другой способ защиты — блокировать при вводе символы, которых быть не должно (буквы, скобки и т. п.). В нашей программе для всех полей ввода можно установить такой обработчик события OnKeyPress (в переводе с англ. — при нажатии клавиши 1):


1 Если в программе нужно обрабатывать русские буквы, используется обработчик OnUTF8Key.


procedure TForml.rEditKeyPress(Sender: TObject;
var Key: char);
begin
if not (Key in [ '0'..'9',#8]) then Key:=#0; 
end;

Этому обработчику передаётся изменяемый параметр Key — символ, соответствующий нажатой клавише. Если этот символ не входит в допустимый набор (цифры и клавиша Backspace, имеющая код 8), введённый символ заменяется на символ с кодом О, который при выводе просто игнорируется.

Следующая страница Вопросы и задания



Cкачать материалы урока







Наверх