Материал: Мансуров. Основы программирования в среде Lazarus. 2010

Внимание! Если размещение файла нарушает Ваши авторские права, то обязательно сообщите нам

6.3 Визуальное программирование в среде Lazarus

____________________________________________________________________

StatusBar1.SimpleText:= 'Вычитание';

LabeledEdit1.SetFocus;

LabeledEdit1.SelectAll;

end;

В обработчик события OnClick для SpeedButton3 введите код:

procedure TForm1.SpeedButton3Click(Sender: TObject);

begin

LabeledEdit3.Text:=IntToStr(StrToInt(LabeledEdit1.Text)

* StrToInt(LabeledEdit2.Text));

StatusBar1.SimpleText:= 'Умножение';

LabeledEdit1.SetFocus;

LabeledEdit1.SelectAll;

end;

В обработчик события OnClick для SpeedButton4 введите код:

procedure TForm1.SpeedButton4Click(Sender: TObject);

begin

LabeledEdit3.Text:=IntToStr(StrToInt(LabeledEdit1.Text)

div StrToInt(LabeledEdit2.Text));

StatusBar1.SimpleText:= 'Деление нацело';

LabeledEdit1.SetFocus;

LabeledEdit1.SelectAll;

end;

Здесь новым для нас является компонент TStatusBar, который позволя-

ет выводить в окне так называемую строку состояния. В этой строке приложе-

516

Глава 6 Программирование приложений с графическим интерфейсом

____________________________________________________________________

ние обычно выводит различную вспомогательную информацию. В нашей про-

грамме будет выводиться информация о последней выполненной операции.

В строке состояния можно определить одну или несколько независимых панелей. Если вы хотите иметь всего одну панель, то установите свойство

SimplePanel = true. В этом случае для вывода текста в строку состояния используйте свойство SimpleText. Если вам необходимо иметь несколько панелей установите свойство SimplePanel = false. Тогда для вывода текста в нужную панель используйте свойство Panels[k], где номер k панели

(нумерация с 0) или подсвойство Items, например:

StatusBar1.Panels[0].Text:= 'Какой либо текст'; StatusBar1.Panels.Items[0].Text:= 'Какой либо текст';

Откомпилируйте и запустите программу. Опробуйте работу кнопок.

В процессе ввода информации пользователи довольно часто допускают ошибки. В большинстве случаев эти ошибки носят случайный и непреднаме-

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

граммы. Поэтому программист должен предусматривать соответствующие ме-

ры защиты своих программ от такого рода ошибок.

В нашем примере мы реализовали действия для целых чисел. При вводе чисел пользователь может, например, ввести недопустимый символ или вместо целого ввести вещественное число. В этой программе никакого контроля при вводе нет. В таких случаях программа, как правило, аварийно завершается. В

2.1.14 и 2.1.25 мы уже касались этого вопроса.

При возникновении какой-либо ошибочной ситуаций (говорят еще исклю-

чительной ситуации) генерируется так называемое исключение. К возникнове-

нию исключений могут привести не только действия пользователя, но и ряд других обстоятельств. Например, обращение к несуществующему файлу, обра-

517

6.3 Визуальное программирование в среде Lazarus

____________________________________________________________________

щение к устройству, которое в этот момент не готово, выход за пределы выде-

ленной динамической области памяти, деление на ноль, переполнение разряд-

ной сетки и пр. Программист обязан и для таких случаев предусмотреть какие-

то действия, чтобы не допустить краха своей программы.

Отвлечемся на некоторое время от изучения компонентов и рассмотрим некоторые способы обнаружения и организации соответствующей реакции программы в случае возникновения каких-либо ошибочных ситуаций.

6.3.7 Обработка исключений. Компонент TMaskEdit.

Организация контроля ввода данных

Для обработки стандартных исключений в Lazarus имеются специальные классы. Если в программе не предусмотрена обработка какого-нибудь исклю-

чения, то оно обрабатывается глобальным обработчиком. Он обеспечивает стандартную реакцию на возникшее исключение – выводит предупреждение на экран с кратким описанием причины, вызвавшее исключение, рис. 6.31.

Рис. 6.31. Стандартная реакция на исключение

Здесь указано, что произошла попытка деления на ноль и предлагаются ва-

рианты действий – продолжить выполнение программы или завершить ее.

В большинстве случаев стандартной реакции оказывается недостаточной.

Поясню примером. Предположим, в программе создается временный файл, ко-

518

Глава 6 Программирование приложений с графическим интерфейсом

____________________________________________________________________

торый после завершения программы должен быть удален. Пусть во время рабо-

ты программы с файлом произошла ошибка. Скажем, был прочитан недопусти-

мый символ. Обработка такой ошибки программистом не был предусмотрен.

Тогда последует стандартная реакция, рис. 6.32.

Рис. 6.32. Стандартная реакция на исключение

Пользователь закрывает программу, нажав кнопку Cancel. А временный файл, который должен был быть уничтожен, останется на диске! Существуют очень много программ, которые оставляют после своей работы всякий "мусор"

на диске, если они завершаются аварийно. И это происходит из-за того, что программист не предусмотрел соответствующих действий по очистке мусора в случае возникновения исключительных ситуаций.

В таких случаях гораздо лучше, если программист организует свою собст-

венную обработку исключения, в которой и выполнит очистку мусора. Кроме того, программист знает логику работы своего приложения, знает – где именно произошло исключение и, в большинстве случаев, почему это произошло, по-

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

которые могли бы пользователю продолжить работу (если это возможно).

Рассмотрим некоторые классы исключений.

EConvertError – ошибка преобразования типов. Чаще всего происходит при преобразовании строки в число.

EDivByZero – попытка деления целого числа на ноль.

519

6.3 Визуальное программирование в среде Lazarus

____________________________________________________________________

EZeroDivide – попытка деления вещественного числа на ноль.

ERangeError – выход за пределы допустимого диапазона индекса или порядкового типа.

EIntOverflow – переполнение в операциях с целыми числами, т.е. по-

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

EOverflow – переполнение в операциях с вещественными числами.

EUnderflow – потеря значащих разрядов в операциях с вещественными

числами.

EAccessViolation – попытка обращения к недействительному адресу в памяти. Чаще всего возникает из-за неправильной работы с указателями.

Для обработки исключений используются две конструкции. Первая конст-

рукция имеет вид:

try

< Потенциально "опасные" операторы, при выполнении которых могут возникнуть исключительные ситуации >

except

on класс исключения 1 do < оператор обработки исключения 1 >; on класс исключения 2 do < оператор обработки исключения 2 >;

………………………………………………………………………………………………………………………………

on класс исключения n do < оператор обработки исключения n >;

else

< операторы обработки остальных исключений >

end;

Данная конструкция означает, что после ключевого слова try и до клю-

чевого слова except следуют операторы, при выполнении которых возмож-

520

Смотрите также:

11 Горм +
113
14
1433
1511
1632
199
204
2N4264RE
3773