Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Программирование в Delphi (повторение).doc
Скачиваний:
7
Добавлен:
04.05.2019
Размер:
2.74 Mб
Скачать

5.6.2. Структура процедуры

Объявление процедуры практически ничем не отличается от объявления функции, кроме того, что для процедуры не указывается возвращаемое значение:

В общем виде процедура выглядит так:

procedure Имя (Список параметров);

// объявления локальных переменных, типов, констант,

//описания вложенных функций и процедур

const

// здесь объявления констант

type

// здесь объявления типов

var

// здесь объявления переменных

begin

// здесь инструкции программы

end;

Например:

procedure Pr1(S: string);

begin

Form1.Label1.Caption:=S;

end;

Вызов этой процедуры может иметь вид:

Pr1(‘Привет !’);

При передаче в функции и процедуры в качестве параметров коротких строк

не допускается включение в объявление спецификации длины строки [3].

Например, объявление

procedure Check(S: string[2]);

вызовет при компиляции сообщение об ошибке. Но можно включать в объявление тип короткой строки, описанный заранее:

type TString2 = string[2];

procedure Check(S: TString2);

Ниже в качестве примера приведен фрагмент программы вычисления стои­мости покупки – процедура Summa.

Procedure Summa;

var

cena: real; // цена

kol: integer; // количество

s: real; // сумма

mes: string[255]; // сообщение

begin

cena := StrToFloat(Forml.Edit1.Text);

kol := StrToInt(Forml.Edit2.Text); s := cena * kol;

if s > 500 then

begin

s := s * 0.9;

mes := 'Предоставляется скидка 10%' + #13;

end;

mes := mes+ 'Стоимость покупки: '

+ FloatToStrF(s,ffFixed,4,2) +' руб.';

Forml.Label3.Caption := mes;

end;

Обращение к этой процедуре в программе выглядит так:

procedure TForm1.Button1Click(Sender: TObject);

begin

summa; // обращение к процедуре summa

end;

Другой вариант вычисления стоимости покупки с использованием функции:

Function Summa(k:TEdit):String;//в скобках формальный

//параметр

var

cena: real; // цена

kol: integer; // количество

s: real; // сумма

mes: string[255]; // изменять число

begin

mes:= ' ';

cena := StrToFloat(Form1.Edit1.Text);

kol := StrToInt(Form1.Edit2.Text);

s := cena * kol;

if s > 500 then

begin

s := s * 0.9;

mes := 'Предоставляется скидка 10%'{+ #13};

end;

mes := mes+ 'Стоимость покупки: '

+ FloatToStrF(s,ffFixed,4,2) +' руб.';

k.text:= mes;

end;

// щелчок на кнопке Стоимость

procedure TForm1.Button1Click(Sender: TObject);

begin

// обращение к функции (вызов функции)

Summa(Edit3); // вычислить сумму покупки

end;

5.6.3. Ввод и вывод данных в диалоговых окнах

Наиболее просто программа может получить исходные данные из окна вво­да или из поля редактирования (компонент Edit). Рассмотрим пример использования диалоговых окон для решения задачи пересчёта веса. Один из самых простых вариантов решения этой задачи может быть реализован с помощью следующих процедур:

procedure TForm1.FormCreate(Sender: TObject);

label

bye;

var

funt:real; { вес в фунтах }

kg:real; { вес в килограммах }

k:real; { коэффициент пересчета }

s:string;

begin

bye:

//вывод окна сообщения

S:=InputBox('Ввод в окно редактирования',

'Введите вес в фунтах'+' Для отделения целой части'+

' от дробной ставьте зпт','0');

k:=0.4059;

funt:=StrToFloat(s);

kg:=funt*k;

ShowMessage('вес ' + FloatToStrF(kg,ffFixed,6,1)+ ' кг');

case MessageDlg('Продолжить вычисления?',

mtCustom,mbYesNo,0) of

mrYes: goto bye;

mrNo:Form1.Show;

end;

end;

procedure TForm1.Button1Click(Sender: TObject);

begin

Form1.Close;

end;

При запуске приложения открывается окно редактирования для ввода данных (рис. 5.17 a). После ввода данных (рис. 5.17 b).

a) b)

Рис. 5.17. Диалоговое окно редактирования

После нажатия ОК появляется результат в окне сообщения, последующее нажатие ОК выводит окно сообщения с предложением выбора продолжения вычисления Yes или No (рис. 5.18).

Рис. 5.18. Окна сообщений

Отказ от продолжения вычисления выводит окно завершения работы с программой (рис. 5.19).

Рис. 5.19. Окно завершения программы

Окно ввода – это стандартное диалоговое окно, которое появляется на эк­ране в результате вызова функции inputBox. Значение функции inputBox – строка, которую ввел пользователь.

Функция inputBox объявлена в модуле Dialogs следующим образом:

InputBox(const ACaption, APrompt, ADefault:string):string;

Функция предлагает пользователю диалоговое окно с заголовком ACaption,с предложением APrompt пользователю что-то написать и с окошком редактирования, в котором предварительно загружено начальное значение текста ADefault. Если пользователь нажмёт в окне ОК, то функция вернёт введённую им строку текста. Если в диалоге нажать Cancel, или Esc, или закрыть окно системной кнопкой, то функция вернёт строку ADefault, перед этим пользователь что-то написал в окне редактирования.

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

Вывести на экран окно с сообщением можно при помощи процедуры

ShowMessage или функции MessageDlg.

Процедура ShowMessage выводит на экран окно с текстом и командной кнопкой ОК. Процедура имеет вид:

Procedure ShowMessage (const Msg:string);

Текст сообщения задаётся параметром Msg. Заголовок окна совпадает с именем выполняемого файла приложения.

Например:

ShowMessage('Введите вес в фунтах.');

Функция MessageDlg объявляется следующим образом:

function MessageDlg(const Msg: string; AType:TMsgDlgType;

AButtons: TMsgDlgButtons;

HelpCtx: Longint): Word;

Вызов MessageDlg отображает диалоговое окно и ожидает ответа пользователя. Сообщение в окне задаётся параметром функции Msg.. Параметр HelpCtx определяет тему контекстной справки, соответствующую данному диалоговому окну. Эта тема будет появляться при нажатии пользователем клавиши F1. Если вы справку не планируете, надо задать нулевое значение параметра HelpCtx.

Вид отображаемого окна задаётся параметром Atype (табл. 5.10)

Таблица 5.10

Значения параметра AType

Значение

Описание

mtWarning

Окно замечаний, содержащее желтый восклицательный знак

mtError

Окно ошибок, содержащее красный стоп-сигнал

mtInformation

Информационное окно, содержащее голубой символ «I»

mtConfirmation

Окно подтверждения, содержащее зеленый вопросительный знак

mtCustom

Заказное окно без рисунка. Заголовок соответствует имени выполняемого файла приложения

Параметр AButtons определяет, какие кнопки будут присутствовать в окне. Тип TMsgDlgBtns параметра AButtons является множеством, которое включает различные кнопки. Возможные значения видов кнопок показано в табл.5.11.

Таблица 5.11

Значения видов кнопок

Значение

Надпись кнопки

mbYes

Yes

mbNo

No

mbOK

OK

mbCancel

Cancel

mbHelp

Help

mbAbort

Abort

mbRetry

Retry

mbIgnore

Ignore

mbAll

All

Список необходимых кнопок заключается в квадратные скобки [ ], поскольку параметр AButtons является множеством. Если внутри скобок список отсутствует, в окне не будет ни одной кнопки и пользователю придется закрывать окно системными кнопками Windows [1].

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

Таблица 5.12

Сочетание кнопок

Значение

Описание

mbYesNoCancel

Включает в окно кнопки Yes, No и Cancel

mbOkCancel

Включает в окно кнопки OK и Cancel

mbAbortRetryIgnore

Включает в окно кнопки Abort, Retry и Ignore

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

Функции возвращают значение, соответствующее выбранной пользователем кнопке. Возможные возвращаемые значения:

mrNone mrAbort mrYes

mrOk mrRetry mrNo

mrCancel mrIgnore mrAll