- •Глава 4. Компоненты 30
- •Глава 5. Основы программирования 37
- •Часть I. Delphi и работа в Интегрированной Среде
- •Глава 1. Объектно-ориентированное программирование
- •1.1. Основные понятия и определения
- •1.2. Визуальное программирование интерфейса
- •1.3. Общие вопросы построения программ
- •Глава 2. Проекты Delphi
- •2.1.Файлы проекта
- •2.2.Структура файла головной программы
- •2.3. Окно Интегрированной Среды Разработки Delphi
- •2.4. Панель главного меню и всплывающие меню
- •2.5. Форма и компоненты
- •2.5.1.Окно формы
- •2.5.2. Окно Редактора Кода
- •2.5.3. Инспектор Объектов
- •2.6. Структура модуля приложения
- •Глава 3. Элементы языка Delphi
- •3.1.Типы данных
- •3.1.1. Целый тип
- •3.1.2.Вещественный тип
- •3.1.3. Символьный тип
- •3.1.4. Строковый тип
- •3.1.5. Логический тип
- •3.2. Переменная
- •3.3. Константы
- •3.3.1.Числовые константы
- •3.3.2. Строковые и символьные константы
- •3.3.3. Логические и именованные константы
- •3.4. Инструкция присваивания
- •3.5. Стандартные функции
- •3.5.1.Математические функции
- •Глава 4. Компоненты
- •4.1. Форма и компоненты на форме
- •4.2. Событие и процедура обработки событий
- •Глава 5. Основы программирования
- •5.1. Сохранение проекта, его повторное открывание
- •5.2. Стиль программирования
- •5.3. Порядок разработки проекта
- •5.4. Управляющие структуры языка Delphi
- •5.4.1. Инструкция if
- •5.4.2. Инструкция case
- •5.5. Циклы
- •5.5.1. Инструкция for
- •5.5.2. Инструкция while
- •5.5.3. Инструкция repeat
- •5.5.4. Инструкция goto
- •5.6. Процедуры и функции
- •5.6.1. Структура функции
- •5.6.2. Структура процедуры
- •5.6.3. Ввод и вывод данных в диалоговых окнах
- •5.6.4. Запись инструкций программы
- •5.6.5. Отладка программы
- •5.7. Операции со строками
- •5.7.1. Стандартные функции и процедуры работы со строками
- •5.7.2. Использование операций со строками
- •5.8. Массивы
- •5.8.1. Объявление массива
- •5.8.2. Операции с массивами
- •5.8.3. Стандартные функции обработки массивов
- •5.8.4. Многомерные массивы
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