Для отладки программы на «Делфи» необходимо проделать следующее:
Установить точку остановки. Для этого нужно щелкнуть слева от текста в окне кода программы на первом отлаживаемом операторе. Появится красная точка и полоска, указывающая на установку точки остановки. Снятие точки остановки происходит аналогичным образом.
Запустить программу, например нажав клавишу клавиатуры «F9» и подождать, пока она остановиться на точке остановки.
Нажатие клавиши клавиатуры «F8» вызовет выполнение одного следующего оператора программы без захода в подпрограммы, а нажатие на клавишу «F7» вызовет выполнение одного следующего оператора с заходом в подпрограммы, если они есть.
Нажатие клавиш «F8» или «F7» нужно производить столько раз, пока программа не перейдет на нужный оператор (об этом можно судить по специальному синему курсору трассировки с зеленой стрелочкой).
После установки курсора трассировки на нужном месте программы можно посмотреть значение переменных, указав на них мышью. Рядом с курсором мыши появится ярлычок с текущим значением переменной.
После просмотра значений переменных нужно вновь нажать на кнопку запуска «F9» для обычного продолжения хода выполнения программы.
Каждый компонент в «Делфи» имеет свои свойства, события и методы. Свойства компонента определяют положение компонента на экране, его цвет, размеры и др. Свойства характеризуют все параметры компонента, их можно задавать и смотреть через Инспектор Объектов, а также через код программы. Через свойства программа узнает, что ввел пользователь в компонент, в какое место экрана переместил окно и др.
Переменная := Имя_компонента . Имя_Свойства ;
S:=Edit1.text; k:=strtoint(Edit1.text);
Имя_компонента . Имя_Свойства := Переменная_или_константа ;
Edit1.text:=inttostr(k); Form1.Caption:=’Delphi’;
События компонента – это его реакция на различные воздействия пользователя или какую-либо программную ситуацию. Наиболее распространенные события у компонент – это событие щелчка левой кнопки мыши по компоненту, событие двойного щелчка мышью по компоненту, событие перемещения указателя мыши над компонентом, событие ввода данных с клавиатуры в компонент, событие появления компонента на экране, событие изменения размеров у компонента и др.
Каждое событие компонента обрабатывается специальной процедурой, называемой процедурой -обработчиком события. Процедуры обработчики создаются через Инспектор Объектов (для привязки пустой процедуры – обработчика к конкретному событию) и Инспектора Кода (в котором программист вписывает нужные команды в пустую процедуру – обработчик). Написание процедур – обработчиков событий является основной частью создания программного продукта на «Делфи». Другую часть времени программист тратит на создание интерфейса программы, ее доработку и тестирование.
Методы компонента – это команды, которые имеет данный компонент. Методы бывают двух типов: методы-процедуры и методы-функции. Через методы программист «просит» компоненты сделать то или иное действие с самим собой. Например, у формы (окна) можно попросить закрыться или открыться, переместится по экрану. У компонента «TMemo» (текстового редактора) – можно попросить сбросить введенный пользователем в него текст на диск, или попросить очистку окна редактирования. Методы вызываются из обработчиков событий как обычные команды, например «begin memo1.Clear; end;» – «просим» компонент «Memo1» очистить окно ввода.
Имя_компонента . Имя_Метода_Процедуры (возможные параметры) ;
Form1.Show; Form1.Close; Edit2.SetFocus;
Переменная := Имя_компонента . Имя_Метода_Функции (возможные параметры) ;
f:=Edit2. CanFocus; if f=false then Edit2.SetFocus;
Для привязки к компоненту обработчика какого-либо события необходимо выделить его мышью, в Инспекторе Объектов перейти во вкладку «Events/События», выбрать нужное событие и дважды щелкнуть мышью в пустую ячейку напротив него. В появившейся процедуре необходимо написать код обработчика данного события.
Для установки одновременно какого-либо свойства у нескольких компонент необходимо выделить их мышью в охватывающий четырехугольник, после чего в Инспекторе Объектов задать нужное значение нужному общему свойству.
Для точного расположение компонента по центру на форме можно вызвать для него вспомогательное меню правой кнопкой мыши и выбрать пункт «Align». Для настройки правильной работы клавиши «Tab» (обхода фокуса ввода) выберете пункт «TabOrder» во вспомогательном меню.
Фокус ввода – это специальный графический курсор, показывающий, в какой компонент будут вводиться данные с клавиатуры, а также показывающий, какой компонент будет активизирован при нажатии клавиши «Enter» или клавиши «Пробел».
Программа на языке «Делфи», как ранее было отмечено, состоит из файла проекта (файла с расширением «DPR») и одного или нескольких модулей (файлы с расширением «PAS»). Файл проекта создается и модифицируется «Делфи» автоматически, и вручную изменять его нельзя. Чтобы увидеть файл проекта нужно вызвать опцию основного меню «PROJECT | VIEW SOURCE». Рассмотрим подробно содержимое примерного файла проекта.
Рис. 3.1. Структура файла проекта
Обозначения:
1 – зарезервированное слово
2 – комментарии
3 – директивы компилятора
4 – имя программы (проекта)
5 – имя подключаемого модуля
6 – имя файла, в котором находится подключаемый модуль
7 – операторы проекта
8 – команда инициализации проекта (загрузки программы в операционную среду Windows, настройка внутренних системных переменных и др.)
9 – команда создания на экране окна (формы) с именем «FORM1»
10 – передача управления проекту
Любой модуль в языке «Делфи» имеет структуру, аналогичную структуре модулей в языке PASCAL. Рассмотрим общую структуру модулей «Делфи».
Рис. 3.2. Общая структура модуля
Обозначения:
1 – имя модуля
2 – зарезервированное слово
3 – секция интерфейсных объявлений, в которой описываются программные элементы (типы данных переменные, процедуры и функции), которые будут «видимы» другим программным модулям и проектам, использующих данный модуль
4 – секция реализации, в которой непосредственно находятся тексты процедур и функций модуля
Рассмотрим модуль «Делфи», описывающий форму (окно) с одной кнопкой.
Рис. 3.3. Структура модуля-окна «Делфи»
Обозначения:
1 – имя модуля
2 – имена используемых в данном модуле других модулей
3 – тип «Tform1» является потомком пустого Windows-окна типа «TForm». Тип «Tform1» дополняет родительский тип «TForm» кнопкой с именем «Buttom1» и одной процедурой «Button1Click» по обработке нажатия на данную кнопку
4 – перечень компонент окна (объектов, переменных, процедур и функций)
5 – переменные, «видимые» только в данном типе «Tform1» (окне «Form1»), и не видные в других модулях (окнах), использующих данный модуль
6 – переменные, «видимые» и в типе «Tform1» (окне «Form1»), и в других модулях (окнах), использующих данный модуль
7 – описание переменной-объекта «Form1» типа «Tform1», объявленного в разделе «Type»
8 – подключение ресурсного файла с данными о компонентах окна «Form1» (положение компонент на экране, их размер, цвет и др.)
9 – текст-реализация раннее описанной процедуры
Элементы программы – это неделимые части программы, а именно зарезервированные слова, идентификаторы, типы, константы, переменные, метки, подпрограммы (процедуры и функции) и комментарии. В языке «Делфи» все элементы программ совместимы с языком PASCAL сверху – вниз, т.о. все типы данных, операторы и операции, имеющиеся в PASCALе, доступны и в «Делфи».
Любые данные в «Делфи», как и в языке PASCAL, характеризуются своими типами. Тип определяет множество допустимых значений, которые может иметь данное, а также множество применимых к нему операций. Рассмотрим целые типы данных «DELPHI».
Тип | Диапазон значений | Физический формат |
Byte (B) | 0 .. 255 | 1 байт, без знака |
Word (W) | 0 .. 65 535 | 2 байт, без знака |
Integer (I) | -2 147 483 648 .. 2 147 483 647 | 4 байт, со знаком |
Cardinal | 0 .. 2 147483647 | 4 байт, без знака |
Shortint (S) | -128 .. 127 | 1 байт, со знаком |
Smallint | -32 768 .. 32 767 | 2 байт, со знаком |
Longint (L) | -2 147 483 648 .. 2 147 483 647 | 4 байт, со знаком |
LongWord | 0 .. 4 294 967 295 | 4 байт, без знака |
Int64 | -9E18 .. 9E18 | 8 байт, со знаком |
Табл. 1. Целые типы
Для целых типов применимы следующие стандартные процедуры и функции.
Операция | Описание |
Функции | |
Abs (X) | Модуль числа X |
Chr (B) | Возвращает символ по его коду B |
Hi (W) | Возвращает старший байт аргумента W |
Lo (W) | Возвращает младший байт аргумента W |
Odd (L) | Возвращает «TRUE», если аргумент W нечетный |
Random (W) | Возвращает целое случайное число от 0 до W-1 |
Sqr (X) | Возвращает квадрат аргумента W |
Sqrt (X) | Возвращает квадратный корень аргумента W |
Х Div Y | Возвращает целую часть частного деления Х на Y Х |
Х Mod Y | Возвращает остаток частного деления Х на Y |
Процедуры | |
Randomize | Инициализирует генератор случайных чисел |
Swap (W) | Меняет местами байты в слове W |
Dec (X) | Уменьшает значение переменной X на единицу |
Inc (X) | Увеличивает значение переменной X на единицу |
Примечание: X-любой из целых типов, B-байт и т.д. |
Табл. 2. Процедуры и функции для целых типов
Рассмотрим на примере перечисляемые типы.
Type TMonth=(Jan, Feb, Mar);
Var Month: tMonth;
Begin
If Month=Feb then label1. Caption: =’февраль’;
If Rred (Feb)=Jan then showmessage (‘Перед февралем идет январь, и это правильно.’);
If Succ (Feb)=Mar then showmessage (‘После февраля идет март, и это верно!’);
End;
Type TMonth=(Jan, Feb, Mar);
Var month: tMonth; c: byte;
Begin
For month := Jan to Mar do showmessage(inttostr(byte(month)));
For month := Jan to Mar do showmessage(inttostr(ord(month)));
For c := byte(Jan) to byte(Mar) do showmessage(inttostr(c));
End;
Рассмотрим на примере логические и символьные типы.
Var L: Boolean; { Описываем логический тип }
C: Char; { Описываем символьный тип }
Begin
L: = true; C: =’ %‘;
If chr(C)>12 then C:=’$’;
C:=chr(ord(C));
L:=true;
If not L then exit;
End;
5. Рассмотрим на примере ограниченный тип.
Var date: 1..31; digit:’0’..’9’;
Month: 1..12;
Var c: byte; s: char;
Begin
For c: =Low(date) to High(date) do showmessage(inttostr(c));
For s: =Low(digit) to High(digit) do showmessage(s);
End;
Рассмотрим вещественные типы и стандартные функции для них.
Тип | Ранг значений | Кол-во значащих цифр | Размер в байтах |
Real | 5.0 x 10^–324 .. 1.7 x 10^308 | 15–16 | 8 |
Single | 1.5 x 10^–45 .. 3.4 x 10^38 | 7–8 | 4 |
Real48 | 2.9 x 10^–39 .. 1.7 x 10^38 | 11–12 | 6 |
Double | 5.0 x 10^–324 .. 1.7 x 10^308 | 15–16 | 8 |
Extended | 3.6 x 10^–4951 .. 1.1 x 10^4932 | 19–20 | 10 |
Comp | –2^63+1 .. 2^63 –1 (только целые) | 19–20 | 8 |
Currency | –922337203685477.5808 .. 922337203685477.5807 (четыре знака п.з.) | 19–20 | 8 |
Табл. 3. Вещественные типы
Функция | Возвращаемое значение |
Abs (x) | Абсолютная величина х |
Cos (х) | Косинус х (х выражается в радианах, а не в градусах) |
Sin(x) | Синус х |
Frac(x) | Дробная часть х (откидывается запитая и цифры перед ней) |
Int (х) | Целая часть х. Несмотря на название, возвращает действительное значение (с плавающей запятой), т.е. просто устанавливает нуль в дробной части |
Тrunc (х) | Целая часть х. В отличие от Int, возвращающей действительное значение, Trunc возвращает целое значение |
Ехр (х) | Экспоненциальная функция от х |
Ln (х) | Натуральный логарифм от х |
АгсТаn (х) | Арктангенс х |
Pi | Число Пи (3.1416…) |
Round (х) | Ближайшее к х целое значение. Возвращает значение целого типа |
Sqr(x) | Квадрат х, т.е. X*X |
Sqrt (х) | Квадратный корень от х |
Табл. 4. Функции действительных типов
6. Рассмотрим строковые типы.
Var
Sss: String[150]; // Короткая строка до 150 символов (максимум 255 символов)
SsMax: ShortString ; // Короткая строка до 255 символов
Str: String; // Длинная строка неограниченной длины
Begin
Sss := ‘строка символов’;
Sss [6] := ‘и’; // получится ‘строки символов’;
SsMax := ‘12345’;
Str:=Sss;
If length (Str) > 3 then Str:= Str + SsMax;
End;
Функция | Описание |
Процедуры | |
Delete (s, pos, len) | Удаляет максимум len символов из строки s, начиная с позиции pos |
Insert (sourse, tar-get, pos) | Вставляет строку source в строковую переменную target, начиная с позиции pos |
SetLength (s, newlen) | Задает новую динамическую длину newlen строковой переменной s |
Str (x, s) | Преобразует численное значение х в строковую переменную s |
Val (s, v, code) | Преобразует строку s в соответствующее численное представление v |