Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Delphi

.pdf
Скачиваний:
27
Добавлен:
13.04.2015
Размер:
1.18 Mб
Скачать

2ПРОГРАММИРОВАНИЕ В СРЕДЕ Delphi

5.Откроем закладку Events (для объекта Bottun1) и установим событие onClick, т.е. «реагировать на нажатие кнопки мыши». Для этого необходимо дважды щелкнуть мышью в поле справа от события onClick или, дважды щелкнуть непосредственно на кнопке «Закрыть». Во втором случае для любого объекта выбирается первое событие из списка Events, обычно – это onClick. При этом обработчик события onClick получает имя Button1Click (его можно изменить на любое другое), а в текст формы в секцию implementation вставляется заготовка

процедуры обработчика Button1Click. Эта процедура и является обработчиком события:

procedure TForm1.Button1Click(Sender: TObject); begin

end;

Параметр Sender передает в тело обработчика объект, который вызвал это событие. В данном случае – кнопку Button1.

6.Запрограммируем закрытие приложения. Для этого в теле процедуры Button1Click выполним метод Close для главной формы. С закрытием главной формы закрывается и все приложение. При этом модуль Unit1.pas приобретает вид:

unit Unit1; interface uses

Windows,Messages,SysUtils,Classes,Graphics, Controls,Forms,Dialogs, StdCtrls;

Type

TForm1 = class(TForm)

Button1: TButton; // Автоматически добавлены объект и procedure Button1Click(Sender: TObject); // событие

private

{Private declarations } public

{Public declarations }

end;

var

Form1: TForm1; implementation

{$R *.DFM}

procedure TForm1.Button1Click(Sender: TObject); begin

Form1.Close;//Единственное место «ручного» программирования end;

20

2.7 ОТЛАДКА ПРИЛОЖЕНИЙ

end.

Для удовлетворения собственного любопытства Вы можете посмотреть текст формы, созданного Вами приложения, если нажмете правую кнопку мыши на форме и выберете “View as Text” ( см. приложение 3). Вы увидите значения свойств Вашего главного объекта – формы, которая является родительским объектом (Parent) для кнопки, а заодно и её владельцем (Owner). Свойства всех дочерних объектов, записываются во вложенных блоках Objectend.

Рекомендуем для удобства чтения программы писать пользовательские коды с отступом по 2 пробела для каждого вложенного блока.

Теперь необходимо сохранить подготовленный проект. Выбираем в строке меню Delphi команду File→Save Project As, в появившемся диалоговом окне выбираем новую папку, задаем имя проекту, а в следующем окне – задаем имя главному модулю проекта. Если необходимо сохранить проект с тем же именем, то следует выбрать команду File→Save All, или нажать на кнопку

7. Запустим программу на выполнение. Для этого необходимо в строке меню Delphi выполнить команду Run→Run или нажать на кнопку панели управления, или функциональную клавишу F9 (компиляция – Ctrl+F9).

Не следует «вручную» удалять обработчики событий, поскольку их заголовки вставляются в описание класса TForm1. Достаточно удалить всё, что находится между begin и end и сохранить проект. Delphi автоматически удалит все пустые обработчики событий.

2.7ОТЛАДКА ПРИЛОЖЕНИЙ

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

Windows.

Отладка включает в себя два этапа: 1 – устранение синтаксических ошибок; 2 – устранение логических (алгоритмических) ошибок. Первый этап наиболее простой, он полностью контролируется компилятором интегрированной среды Delphi. При обнаружении синтаксических недоразумений он в нижних строках окна текстового редактора выдает необходимые комментарии. Перечень наиболее часто встречающихся комментариев приведен в приложении 4. Двойной щелочек мыши на любом из комментариев отправляет нас в соответствующее место

21

2 ПРОГРАММИРОВАНИЕ В СРЕДЕ Delphi

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

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

Многие наивно полагают, что если их программа компилируется, то в ней нет ошибок. Чепуха! Можно получить исполнимый файл, запустить его и увидеть «собственную глупость», или даже вывести из строя Windows. После успешного устранения синтаксических ошибок необходимо устранить логические ошибки. Этого компилятор сделать за нас не может, однако он может существенно облегчить этот этап отладки. Для этого существует встроенный отладчик программ – Debugger.

2.7.1 Точки останова

Рис. 2.5 Установка точки останова в окне редактора модуля Unit1

Точки останова (break points) отладчика Debugger позволяют приостановит работу программы в заданной строке и оценить сложившуюся ситуацию. На рис. 2.5 в левом поле окна редактора модуля Unit1 маленькие точки означают откомпилированные строки (после Ctrl+F9), а

22

2.7 ОТЛАДКА ПРИЛОЖЕНИЙ

большая красная точка с выделенной строкой кодов – это точка останова. Ее можно установить щелчком мыши в левом поле окна на откомпилированных строках. Если надо сделать остановку только в случае выполнения какого-либо условия, то в заданной строке необходимо вызвать окно Add Source Breakpoint (см. рис. 2.5) через меню Run→Add

Breakpoint→ Source Breakpoint. Далее в строке Condition можно ввести желаемое условие, на рисунке – это условие, когда переменная iet равна 2. Чтобы продолжить выполнение программы после ее останова по break point, необходимо нажать F9 (или F4, F7, F8, см. пункт 2.7.3).

2.7.2 Контроль значения переменных

После приостановки работы программы мы можем просмотреть значения интересующих нас переменных двумя способами. Первый – подвести курсор к требуемой переменной и возле неё появится подсказка с текущим значением этой переменной, что демонстрируется на рис. 2.6 для переменной “x”.

Рис. 2.6 Контроль значения переменных

Второй способ – это создать окно Watch List (список наблюдений) нажатием клавиш Ctrl+F5 для курсора, помещенного на нужную переменную. При этом может появиться вспомогательное окно Watch Properties (свойства наблюдаемой величины), для которого в строке Expression (выражение) должна находиться контролируемая величина. В окно Watch List (вызов – Ctrl+F5) можно добавлять переменные – клавиша Insert, изменять – клавиша Enter, и удалять – клавиша Del. Чтобы окно Watch List было всегда видимым при всех остановках программы, т.е.

23

2 ПРОГРАММИРОВАНИЕ В СРЕДЕ Delphi

быть “stay on top”, выберете указанный режим нажатием правой клавишей мыши на этом окне.

2.7.3 Пошаговое выполнение программы

Программу можно выполнить последовательно, строка за строкой, не прибегая к точкам останова, а используя команды Run→Step Over (функциональная клавиша F8, кнопка панели управления Delphi) или

Run→Trace Into (клавиша F7, кнопка ). Команда Trace Into обеспечивает вход во все вызываемые процедуры и функции и их пошаговое выполнение, а Step Over выполняет процедуры и функции за один шаг, не входя в них.

Можно также дать указание Delphi выполнять программу до того места, в котором в настоящий момент находится курсор, – с помощью команды Run→ Run to Cursor (клавиша F4).

Программу, работающую в режиме отладки, можно приостановить

командой Run→Program Pause (кнопка ). Перед возобновлением вычислений с самого начала, а не с места останова, нажмите Ctrl + F2.

Задание 2.

Знакомство с Delphi

Цель задания

1.Освоение технологий построения Windows-приложений для в среде Delphi.

2.Знакомство с компонентами TPanel, TBevel, TEdit, TLabel, TButton.

Постановка задачи

Разработать Windows-приложение под названием «Лабораторная работа» с именем проекта FirstProject. Внешний вид (интерфейс) приложения показан на рис. 2.7.

Окно редактора (белое окошко на рис. 2.7) и комментарий «Автор проекта …» должны заполняться соответствующим содержимым после щелчка мыши на клавише «Фамилия автора». При этом сама клавиша должна стать недоступной для повторного нажатия. Начальное значение строки редактора должно содержать название лабораторной работы. При нажатии на клавишу «Закрыть» приложение должно закрываться. Все надписи сделать цветными (кроме кнопок).

24

Рис. 2.7 Пример интерфейса приложения к заданию 2

Рекомендации

При компоновке формы можно использовать следующие компоненты из страницы Standard палитры компонент:

TPanel – панель является родительским объектом (Parent) для всех размещенных на ней компонент, т.е. дочерних объектов (Child). Перетаскивание, удаление, скрытие панели и т.п. приводит к аналогичным действиям для всех её дочерних объектов. Изменение свойств панели может приводить к изменению свойств объектов, расположенных на ней, если свойства Parent… в объектах имеют значения True, т.е. «наследовать» свойство… от предка – панели. Можно регулировать выпуклость и вогнутость панели (свойства Bevel…, BorderWidth);. Если какой-либо объект был создан (размещен) вне панели, то его невозможно сделать дочерним для панели, используя операцию Drag&Drop. Здесь необходимо «вручную» переместить соответствующий блок Objectend из текста формы (см. приложение 3) будущего дочернего объекта в аналогичный блок панели. При этом, будьте крайне внимательны, любые ошибки, внесенные в файл *.dfm сделают всю программу нерабочей.

TBevel – объемные линии и контуры (фаска). Находится на странице Additional. Фаска внешне может быть похожа на панель, но она не является родителем ни для каких объектов размещенных внутри неё. Вид фаски задается свойством Shape;

TEdit – редактор строки ввода-вывода. В свойстве Text необходимо ввести начальное значение – название лабораторной работы, а шрифт и цвет отрегулировать в свойстве Font. Свойство AutoSelect (автоматически выделять текст при запуске приложения) лучше переключить на False (отключить выделение);

TLabel – метка, она позволяет разместить комментарии непосредственно на форме, не используя окон ввода-вывода. Если текст метки (свойство Caption) удалить, то метка превратится в вертикальную черту и

2 ПРОГРАММИРОВАНИЕ В СРЕДЕ Delphi

иногда будет невидна. Для её активизации используйте инспектор объектов, где и набирайте текст метки;

TButton – кнопка. В работе надо отредактировать свойства Caption обеих кнопок и подключить обработчик события – onClick (см. пример 2.1) для каждой кнопки. Для кнопки «Закрыть» целесообразно включить свойство Cancel. Данное свойство означает, что обработчик кнопки будет включаться и при нажатии на клавишу Esc.

При обработке события onClick левой кнопки (в процедуре Button1Click) необходимо сделать присваивания соответствующих текстовых значений идентификаторам:

Edit1.Text:=' Работа выполнена '; Label1.Caption:='Автор проекта -';

Кроме того, запрограммируйте изменение свойства видимости (Visible) или доступности (Enabled) для кнопки «Фамилия автора» после её нажатия.

При наложении объектов друг на друга может оказаться невидимым нужный объект. Данная ситуация регулируется нажатием правой кнопки мыши на соответствующем объекте и последующем выборе параметра Bring To Front (переместить вперед) или Sent To Back (отправить назад).

Контрольные вопросы для сдачи лабораторной работы

1.Как изменить название формы?

2.Как программируется обработка событий?

3.Какие файлы создаются при подготовке проекта и каково их назначение?

4.Где можно посмотреть перечень компонент, установленных на форму?

5.Что такое программа-проект и какова её структура?

6.Что такое модуль и какова его структура?

7.Каковы правила написания идентификаторов?

8.Покажите в исходных кодах программы примеры класса, объекта, свойства, метода, события.

9.Какими свойствами и методами можно контролировать видимость и доступность объектов?

26

3.1 ПРОСТЫЕ ТИПЫ ДАННЫХ

3 ЯЗЫК ПРОГРАММИРОВАНИЯ

OBJECT PASCAL

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

3.1 ПРОСТЫЕ ТИПЫ ДАННЫХ

3.1.1 Объявление меток (Label)

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

П р и м е р 3.1

Описание меток:

Label Finish, 444;

Использование операторов с метками:

Finish: Edit1.Text := ’Работа выполнена’; 444: x:=5;

3.1.2 Объявление констант (Const)

Константы объявляются при помощи служебного слова – Const. Каждому идентификатору константы может быть присвоено не только какое-либо конкретное значение, но и выражение с ранее определёнными константами и некоторыми стандартными функциями. Значения констант нельзя менять в алгоритмической части программы.

 

 

П р и м е р 3.2

Const

 

 

Limit

= 255;

K = 3; L = 25*16+K;

Error

= ’ошибка’;

M

= #60;

 

27

3 ЯЗЫК ПРОГРАММИРОВАНИЯ Object Pascal

3.1.3 Объявление переменных (Var)

Переменные (служебное слово Var) объявляются с обнулением их начальных значений следующим образом:

Var <идентификатор 1>, ..., <идентификатор N>: <тип>;

Глобальные переменные можно объявить с ненулевыми начальными значениями:

Var <идентификатор 1>: <тип 1>=<значение 1>;

<идентификатор N>: <тип N>=<значение N>;

Перечислим основные типы переменных в версии Delphi 4 и выше:

Smallint – целое число в диапазоне -32768 .. +32767, занимает в памяти компьютера 2 байта;

Integer – целое число в диапазоне –2147483648 .. +2147483647, зани-

мает в памяти компьютера 4 байта;

Int64 – целое число в диапазоне -2.1063 .. +2.1063–1, занимает 8 байт; Byte – лежит в диапазоне 0 .. +255, занимает 1 байт;

Word – целое число, лежит в диапазоне 0 .. +65535, занимает 2 байта; LongWord – целое число, лежит в диапазоне 0 .. +4294967295, 4 байта;

Real – старый тип Delphi 3. В Delphi 4-6 он совпадает с Double;

Double – вещественное число в диапазоне ±5.0.10-324 .. ±1.7.10+308. Существуют форматы записи с фиксированной точкой, например, 13.58 и с плавающей точкой – 1.358000000000000E+01. Мантисса (часть между . и Е) может содержать 15-16 цифр. Занимает в памяти 8 байт.

Extended – вещественное число самой высокой точности, лежит в диапазоне ±3.6.10-4951 .. ±1.1.10+4932 с мантиссой в 19-20 цифр. Занимает 10 байт;

Boolean – логический тип. Принимает значение True или Fals, занимает 1 байт. Обычно используется в условных операторах, например, If L=True Then <выполнить…>;

Сhar – символ из упорядоченного множества символов таблицы стандарта ANSI (American National Standards Institute). Занимает 1 байт.

Значение символьной переменной заключается в одиночные кавычки. В качестве значения можно указывать код символа из таблицы ANSI, например, символ ‘<’ можно задать как #60, где # - признак принадлежности кода к ANSI. Коды символов приведены в приложении 5;

String – строковый тип, который может содержать любое количество символов ANSI, включая пробел. Переменная типа String фактически является указателем на динамически выделяемую под неё память. Значение строковой переменной заключается в одиночные кавычки (см.

28

3.2 ВВОД-ВЫВОД ДАННЫХ

пример 3.2 для строковой константы Error). String[N] – строка не более N символов.

П р и м е р 3.3

Var

 

i,j

: Integer;

Ch

: Char;

S1,S2

: String;

K,L,M

: Double;

X

: Double=100; //присвоено начальное значение

Отметим, что слово Var является указанием компилятору о выделении необходимой памяти для объявленных в Var переменных.

3.2ВВОД-ВЫВОД ДАННЫХ

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

3.2.1 Работа со строковыми данными

Строковые переменные могут объединяться (сцепляться) друг с другом и с символьными данными. Например, пусть имеется переменная Line: String, строковая константа V='Vova' и символьная константа End='!', тогда присвоение

Line:='Hello '+V+End;

даст результат

'Hello Vova!'

Строковые величины можно сравнивать друг с другом по номерам ANSI кодов их символов. Например, строка 'ackk'больше строки 'aciklm', т.к. коды первых отличающихся символов (по порядку – третьи) – «k» больше «i».

К элементам строк, т.е. к символам, можно обращаться по их порядковому номеру в строке, начиная с первого номера. При обращении к элементу его номер указывается в квадратных скобках. Это означает, что строки можно рассматривать как массивы символов. Например, переприсвоим значение полученной ранее строки Line:

Line[7]:='L'; Line[8]:='e'; Line[9]:='n';

получим новое значение строки Line – 'Hello Lena!'

29

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]