- •Методические указания к работам 7 и 8
- •5. Работа с файлами
- •6. Процедуры и функции
- •6.1. Пользовательские процедуры и функции
- •6.2. Процедура ShowMessage
- •6.3. Функция MessageDlg
- •6.4. Функция InputBox
- •7. Классы общего назначения
- •7.1 . Класс Exception обработка исключений
- •7.2 . Классы tStrings и tStringList – наборы строк и объектов
- •8. Динамически подключаемые библиотеки
- •8.1. Назначение
- •8.2. Структура библиотеки dll
- •8.3. Создание библиотеки dll
- •8.4. Подключение библиотеки dll к проекту
6. Процедуры и функции
6.1. Пользовательские процедуры и функции
Пользовательские процедуры и функции могут быть записаны в процедуре обработчика какого-либо события. В этом случае эти подпрограммы могут быть вызваны только из этого обработчика события. Если необходимо, чтобы пользовательская процедура или функция была доступна из любой процедуры модуля, то надо в интерфейсной части модуля в секции Public класса TForm1 объявить прототип подпрограммы, а в секции реализации записать тело подпрограммы. Например, для создания функции вычисления факториала, надо выполнить следующие действия:
в секции Public класса TForm1 записываем заголовок функции:
Function Factorial(N:Integer):int64;
далее надо поставить курсор в любое место заголовка и нажать три клавиши: Ctrl+Shift+C;
в разделе Implementation появится пустая заготовка описания функции:
function TForm1.Factorial(N:Integer):Int64;
begin
….
end;
в пустую заготовку надо добавить операторы, вычисляющие n!:
Function Tform1.Factorial(N:Integer):Int64;
Var I:Integer;
Begin
Result:=1;
For I:=2 to N do
Result:=Result*I
end;
В данном случае функция Factorial принадлежит TForm1 и, следовательно, является методом данного класса.
6.2. Процедура ShowMessage
Сообщения, появляющиеся при работе программы, можно разделить на те, которые программист предусмотрел, и системные сообщения, например, при попытке закрыть не сохраненный проект. Второй тип сообщений, особенно при указании ошибок, часто имеет непонятный для обычного пользователя вид. Желательно самостоятельно просчитывать все возможные случаи и самостоятельно обрабатывать эти ситуации.
Можно разделить все программные сообщения на: информационные сообщения ("Загрузка данных завершена"), предупреждающие сообщения ("Файл модифицирован. Сохранить?"), сообщения об ошибке ("Файл данных не найден").
Сообщение можно вывести с помощью процедуры ShowMessage (const Msg: String). Эта процедура выводит окно с сообщением и кнопкой OK. В заголовке окна содержится название исполняемого файла. Изначально это Project1, в дальнейшем его можно изменить. Строка Msg будет выводиться как текст сообщения.
Например,
ShowMessage('Привет!');
Результат представлен на рис.20.
Рис. 20
На этой команде работа процедуры (не всей программы!) приостанавливается. Пока пользователь не нажмет на кнопку Ok, работа с приложением становится невозможным, т.е. нельзя «добраться» до окна, расположенного позади, т.е. это сообщение открывается модально.
6.3. Функция MessageDlg
MessageDlg (Msg, AType, Abuttons, HelpCtx) функция, типа Integer, показывающая в центре экрана диалоговое окно сообщения и дающая возможность пользователю ответить на сообщение.
Msg параметр типа String, отвечающий за выводимый текст сообщения.
Параметр AType может принимать одно из несколько значений. От этих значений зависит содержимое заголовка и иконка в левом верхнем углу окна (табл. 19).
Таблица 19
Тип сообщения |
Описание |
Вид окна |
mtWarning |
Можно использовать в предупреждающих сообщениях. Например, "Вы действительно желаете удалить данные?" |
|
mtError |
Обычное окошко вывода сообщения об ошибки. |
|
mtInformation |
Какая-нибудь информация. |
|
mtConfirmation |
Это запрос. Например, запрос на сохранение перед выходом. |
|
mtCustom |
Это сообщение полностью аналогично ShowMessage |
|
AButtons параметр, который задает набор кнопок в окне и может принимать произвольные комбинации из значений:
кнопка Yes mbYes,
кнопка Ok mbOk,
кнопка No mbNo,
кнопка Cancel mbCancel,
кнопка Abort mbAbort,
кнопка Retry mbRetry,
кнопка Ignore mbIgnore,
кнопка All mbAll,
кнопка Help mbHelp.
Список из необходимых перечисленных кнопок должен быть заключен в квадратные скобки.
MessageDlg('Большое значение', mtConfirmation, [mbYes, mbNo],0 );
Кроме перечисления отдельных кнопок, есть возможность задать часто используемым сочетаниям кнопок значения специальных констант:
кнопки OK и Cancel mbOkCancel,
кнопки Yes, No и Cancel mbYesNoCancel,
кнопки Abort, Retry и Ignore mbAbortRetryIgnore.
Эти константы не надо брать в скобки, так как они являются предопределенными множествами.
Поскольку кнопки в сообщении могут быть разные, то MessageDlg является функцией, возвращающей результат нажатой кнопки. Соответственно указанным выше кнопкам результат может принимать следующие значения:
mrYes = 6
mrNo = 7
mrOK = 1
mrCancel = 2
mrAbort = 3
mrRetry = 4
mrIgnore = 5
mrAll = 8
Кнопка Help не имеет никакого эквивалентного возвращаемого значения, потому что она не заканчивает диалог. Параметр HelpCtx задает тему справки. Ее можно вызвать во время показа диалогового окна клавишей F1. Обычно этот параметр устанавливается равным нулю и справка не выводится.
Пример 6.1. Необходимо спросить у пользователя о дальнейших действиях перед выходом из программы:
Сохранить файл;
Не сохранять файл;
Продолжить редактирование (рис. 21)
………………….
Var R:Integer; // переменная, в которой хранится результат
R:=MessageDLG('Сохранить файл?', mtConfirmation, [mbYes,mbNo,mbCancel],0);
If R=mrYes Then // если нажата кнопка Yes
Begin
… // сохраняем файл и завершаем программу
End;
If R=mrNo Then // если нажата кнопка No
Begin
… // завершаем работу программы без сохранения
End;
If R=mrCancel Then // если нажата кнопка Cancel
Begin
… // продолжаем работу без сохранения
End;
или
Var R:Integer; // переменная, в которой хранится результат
R:=MessageDLG('Сохранить файл?', mtConfirmation, [mbYes,mbNo,mbCancel],0);
Case R of
6: Begin // если нажата кнопка Yes
… // сохраняем файл и завершаем программу
End;
7: Begin // если нажата кнопка No
… // завершаем работу программы без сохранения
End;
2: Begin // если нажата кнопка Cancel
… // продолжаем работу без сохранения
End;
End;
Рис. 21
