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

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

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

____________________________________________________________________

end;

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

LabeledEdit1.SetFocus;

LabeledEdit1.SelectAll;

end;

procedure TForm1.SpeedButton4Click(Sender: TObject); begin

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

div StrToInt(LabeledEdit2.Text));

except

on EConvertError do begin

ShowMessage('Ошибка преобразования! Вероятно, ' + 'Вы ошиблись при вводе второго числа');

exit;

end;

on EDivByZero do begin

ShowMessage('Ошибка! Произошло деление на ноль. Вероятно, ' + 'Вы ошиблись при вводе второго числа');

exit;

end;

end;

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

LabeledEdit1.SetFocus;

LabeledEdit1.SelectAll;

end;

526

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

____________________________________________________________________

Теперь при вводе недопустимого символа для целого числа, а также при вводе числа 0 в качестве второго операнда программа перехватывает исключе-

ния и реагирует соответствующим образом.

Имейте в виду, если вы запускаете программу из среды Lazarus, то исклю-

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

Обработку исключений вполне можно применять и в консольных прило-

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

используя механизм исключений.

program int_operations_control; {$mode objfpc}{$H+}

uses

CRT, FileUtil, SysUtils; var

A, B, C: integer; begin

writeln(UTF8ToConsole('Введите два числа')); readln(A, B);

writeln('A= ', A, ' B= ', B); C:= A + B;

writeln(UTF8ToConsole('Демонстрация сложения, C= '), C); C:= A * B;

writeln(UTF8ToConsole('Демонстрация умножения, C= '), C); try

C:= A div B;

writeln(UTF8ToConsole('Демонстрация деления нацело, C= '),

C);

527

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

____________________________________________________________________

except

on EDivByZero do begin

writeln(UTF8ToConsole('Ошибка!! Деление на ноль.')); writeln(UTF8ToConsole('Нажмите любую клавишу')); readkey;

exit;

end;

end;

C:= A mod B;

writeln(UTF8ToConsole('Остаток от деления, C= '), C); C:= A - B;

writeln(UTF8ToConsole('Демонстрация вычитания, C= '), C); writeln(UTF8ToConsole('Нажмите любую клавишу')); readkey;

end.

Сравните эту программу с программой из 2.1.25.

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

программа перешла непосредственно к обработке данных – идут вычисления,

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

ройствам и т.д. На этапе же ввода данных, когда пользователь в режиме диало-

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

528

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

____________________________________________________________________

нию кода. Гораздо разумнее и эффективней при вводе данных просто не давать пользователю совершить ошибку. Например, если пользователь должен вво-

дить только целые числа, проще контролировать введенные пользователем символы и, если будет попытка ввести недопустимый для целых чисел символ,

просто этот символ игнорировать.

Для этого удобнее использовать другую разновидность компонента TEdit

TMaskEdit из страницы Additional.

6.3.7.1. Компонент TMaskEdit

В этом компоненте имеется свойство EditMask, с помощью которого можно задать маску ввода. Маска это некий шаблон, задающий какие символы может вводить пользователь в окне ввода. Недопустимые символы игнориру-

ются. Маска состоит из трех частей, между которыми ставится точка с запятой

(;). В первой части маски – шаблоне записываются символы (табл. 6.2), кото-

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

Таблица 6.2

Символ

Шаблон ввода

Означает, что в EditText недостающие символы предваряются

!пробелами. В случае отсутствия символа пробелы размещаются в конце.

0 Означает, что в данной позиции должна быть цифра.

9 Означает, что в данной позиции может быть цифра или ничего.

#Означает, что в данной позиции может быть цифра, знак « + », знак «-» или ничего.

Далее через точку с запятой (;) записывается 1 или 0 в зависимости от того,

надо или нет, чтобы символы, добавляемые маской, включались в свойство

Text компонента. В третьей части маски указывается символ-заполнитель, ис-

пользуемый для обозначения позиций, в которых еще не осуществлен ввод. Ус-

тановить нужную маску можно прямо в свойстве EditMask, введя необходи-

мые символы маски или в редакторе масок, открыть который можно нажав

529

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

____________________________________________________________________

кнопку с троеточием, рис. 6.33.

Рис. 6.33. Окно редактора масок

Прочитать результат ввода можно или в свойстве Text, которое, в зависи-

мости от вида второй части маски, включает или не включает в себя символы маски, или в свойстве EditText, содержащем введенный текст вместе с сим-

волами маски.

Итак, давайте применим для нашего примера компонент TMaskEdit.

Удалите из формы LabeledEdit1 и LabeledEdit2. Перенесите на их ме-

сто два компонента TMaskEdit. Также вставьте в форму два компонента

TLabel. В общем, восстановите внешний вид формы как на рисунке 6.30.

Установите следующие свойства MaskEdit1:

AutoSelect = true

EditMask = #9999;0;

TabOrder = 0

свойство Text оставьте пустым.

В качестве символа заполнителя в окошке "Символы для пробелов" в ре-

дакторе масок введите пробел вместо знака подчеркивания.

Установите свойства MaskEdit2:

530

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

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