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

Delphi

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

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

+Font

настроить шрифт (название, размер, цвет). Двойной щелчок

мыши на знаке «+» раскрывает детальные характеристики свойства;

Height

высота объекта в пикселях;

Hint

текст всплывающей подсказки;

Items

элементы объекта, если они есть;

Left – координата левой границы объекта в пикселях;

Name

идентификатор, т.е. программное имя объекта;

Parent…

взять свойствоили не брать из родительского объекта;

ShowHint

показывать или нет подсказку Hint;

Top – координата верхней границы объекта в пикселях сверху вниз;

Visible

объект видимый или невидимый;

Width

ширина объекта в пикселях.

Рис. 2.2 Инспектор объектов. Слева – страница «Свойства», справа – страница «События»

2.2 СТРУКТУРА ПРОЕКТА

Программа проекта имеет следующие разделы:

program <заголовок программы (совпадает с именем файла проекта)>;

(* Раздел объявлений (до первого begin): *) uses <перечень используемых модулей>;

[Объявления меток; констант; типов; переменных; процедур и функций]

begin

 

(* Раздел операторов: *)

 

<оператор1>; <оператор2>; <…>;

 

<операторN>

 

end.

// Конец проекта

10

2.2 СТРУКТУРА ПРОЕКТА

Здесь использованы следующие обозначения: [...] – необязательная часть программы; <...> – часть программы, представленная в форме редакционных разъяснений; (*…*) – блок комментариев программиста; // – однострочные комментарии.

Поскольку название проекта совпадает с именем файла проекта, то не следует изменять их названия «вручную», используйте для этого команды главного меню Delphi – File →Save Project As. Каждый новый проект следует располагать в отдельной папке чтобы избежать путаницы с файлами от разных проектов. Оператор Uses указывает на необходимость подключения к программе различных модулей – внешних программблоков. Всегда автоматически подключается стандартный модуль Forms, при помощи которого создается форма и гланый модуль – Unit1.pas.

Первый Begin означает конец объявлений и начало алгоритмической части программы, которая состоит из операторов, разделённых символом “;”. Заканчивается программа словом end. (с точкой). Операторы состоят из идентификаторов и операций над ними. Идентификаторы - это символические имена констант, переменных, функций и т.п. Они могут состоять из латинских букв (прописные и строчные буквы не различаются), цифр и символа подчёркивания “_”. Идентификатор может начинаться только с буквы или символа подчёркивания. Длина идентификатора может быть любой, но значимыми являются только первые 255 символов. Рекомендуется начинать идентификатор и каждую его отдельную смысловую часть с большой буквы, например, ThisIdentificatorIsRight. Согласитесь, что

гораздо

хуже

будет

выглядеть

идентификатор

thisidentificatorisright

и

тем

более

-

THISIDENTIFICATORISRIGHT.

Когда открывается новый проект, его текст (код) создается автоматически и выглядит следующим образом:

program Project1;

 

uses

 

Forms,

 

Unit1 in 'Unit1.pas' {Form1};

 

{$R *.RES}

 

begin

 

Application.Initialize;

//инициализация приложения

Application.CreateForm(TForm1, Form1); //создание формы

Application.Run;

//запуск приложения

end.

Этот текст можно увидеть в окне редактора кодов через главное меню Project→View Source. Третья строка подключает модуль Forms, четвертая

11

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

модуль Unit1 из файла Unit1.pas. В фигурных скобках заключен блок комментария компилятора Object Pascal. Напиминаем, что для комментариев можно использовать и скобки (*…*) . Вложенность комментариев с одинаковыми скобками не допускается. Рассматритваемая пятая строка говорит о том, что файл ресурсов - $R должен иметь расширение res. Фигурные скобки с символом “$” являются комментарием компилятора, это его опции.

Тело проекта состоит из трех операторов: подготовка начальных данных программы (инициализация), создание интерфейса на основе главной формы Form1 и, наконец, запуск приложения.

Обратим внимание на то, что операторы и переменные могут состоять из нескольких идентификаторов, разделенных точками. Все, что слева от правой крайней точки – это квалификатор, указывающий в каком программном блоке (компоненте, модуле…) описаны характеристики правого идентификатора, с которым и производятся необходимые операции. Например, идентификатор Run (предпоследняя строка проекта) обозначает оператор запуска на выполнение объекта Application (экземпляр компонента TApplication) – Вашего приложения.

TApplication – это особый компонент, который отсутствует в инспекторе объектов. Доступ к его свойствам и событиям осуществляется

через программный код и частично через главное меню Delphi – Project → Options→ Application.

2.3 СТРУКТУРА МОДУЛЯ

Все модули можно разбить на две группы: стандартные (созданные разработчиками языка Object Pascal) и модули созданные пользователем. На основе главной формы – объект Form1, принадлежащий классу TForm1, пользователь создает главный модуль Unit1, который сохраняется в файле Unit1.pas. Модуль имеет следующую структуру.

unit <заголовок модуля (совпадает с именем файла модуля)>;

interface

// Интерфейсный раздел объявлений и описаний

[объявления модулей; меток; констант; типов данных; переменных;

процедур и функций;] // Все объявления доступны для других модулей

implementation // Раздел реализаций алгоритмов данного модуля

[объявления модулей; меток; констант; типов данных; переменных;

процедур и функций;] // Все объявления доступны только в этом модуле

12

2.4 БЛОКИ ЛОКАЛИЗАЦИИ ПАРАМЕТРОВ

<Обработчики событий. Объявления в них – локальные>

[initialization] // Раздел инициализации данных

<операторы, которые необходимо выполнить первыми при запуске приложения (открыть файлы, задать начальные значения переменным из раздела Implementation…)>

[finalization] // Раздел завершения модуля

<операторы, которые необходимо выполнить перед завершением программы (закрыть файлы, сохранить данные...). Используется только с секцией Initialization, возможно и пустой>

end.

// Конец модуля

Характерная особенность главного модуля – это его взаимодействие с файлом ресурсов главной формы Unit1.dfm. Форма также является и стандартным компонентом (объектом), свойствами которого можно управлять через инспектор объектов. В заключение приведем текст модуля главной формы, который генерируется при создании нового проекта.

unit Unit1; interface uses

Windows,Messages,SysUtils,Classes,Graphics,Controls,

Forms,Dialogs;

Type

//описание нового класса TForm1

TForm1 = class(TForm)

private

//описания класса не доступные вне модуля

{ Private declarations }

public

//описания класса доступные во всей программе

{ Public declarations }

end;

//конец описаний класса TForm1

var

//описания глобальных переменных модуля Unit1

Form1: TForm1;

//объект Form1 типа TForm1

implementation

 

{$R *.DFM}

 

end.

 

2.4 БЛОКИ ЛОКАЛИЗАЦИИ ПАРАМЕТРОВ

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

13

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

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

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

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

Блоки-модули представляют собой самостоятельные программные единицы. Они могут друг с другом обмениваться данными, т.е. их параметры, описанные в разделе interface, могут использоваться другими модулями и процедурами. Для этого необходимо в разделе uses указать имя соответствующего модуля. Если данные чужого модуля должны использоваться только для внутренних нужд текущего модуля и не используются в его интерфейсной части, то используйте uses для такого модуля в разделе implementation.

Рекомендуется глобальные переменные описывать в отдельном модуле, например:

unit Form1; {----------------------

Главный модуль -----------------------

}

interface

 

 

uses

Windows,Messages,SysUtils,Classes,Graphics,Controls,

Forms,Dialogs,

// главный модуль использует 2 дополнительных нестандартных модуля:

Global,UnitOthers;

end.

unit Global; {------------

Модуль глобальных переменных -------------

}

interface

 

 

{ Описания глобальных переменных… }

 

implementation

//данный раздел - пустой

end.

 

 

14

2.5 ОБЪЕКТНО-ОРИЕНТИРОВАННОЕ ПРОГРАММИРОВАНИЕ

unit UnitOthers; {---- Дополнительный модуль пользователя ----} interface

{Предположим, что в интерфейсной части раздел описаний не использует глобальные переменные, поэтому здесь не нужно подключать модуль Global}

implementation uses Global;

{Внутренние описания используют глобальные переменные}

end.

2.5 ОБЪЕКТНО-ОРИЕНТИРОВАННОЕ ПРОГРАММИРОВАНИЕ

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

2.5.1 Классы и объекты

Класс – это особый тип данных со своими свойствами и методами. Свойства – это внутренние данные класса, например, размер, цвет, шрифт и т.п. Методы – это процедуры и функции, т.е. «инструменты» для работы с классами, например, создать объект данного класса, удалить, сделать невидимым и т.п. Более подробно понятие класса будет рассматриваться в разделе «Классы, объекты».

Объекты – это переменные (представители, экземпляры) классов. Например, палитра компонент в среде Delphi – это перечень классов, а установка какого-либо компонента на форму – это создание объекта (экземпляра, переменной) из выбранного класса. Значения свойств каждого экземпляра класса отображаются в инспекторе объектов. Пример дерева классов и их объектов показан на рис. 2.3.

Название классов, т.е. их идентификаторы, принято начинать с буквы «Т», от слова Type - тип . Например, класс кнопок – это TButton, а объектами (экземплярами) этого класса могут быть Button1, Button2 и т.д.

Объявление нового класса имеет вид:

Type

<имя класса>=class(<имя класса предка, если таковой имеется>) <описания класса>

end;

15

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

Класс: TМузыкальный инструмент

(предок)

Классы:

TДуховой инструмент TУдарный

TСтрунный

(потомки)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Объекты:

труба… саксофон барабан… бубен

скрипка… гитара …

 

 

 

Рис. 2.3 Пример дерева классов

Если на основе класса будет создан объект, то имя объекта объявляется как переменная:

var

<имя объекта>: <имя класса>.

Далее, для создания объекта с объявленным именем, в разделе операторов используется метод-конструктор Create:

<имя объекта>:=<имя класса>.Create[(<объект Owner – владелец >)];

Пример описаний класса Вы уже встречали в разделе 2.3 (см. также пример 3.30). Посмотрите внимательно на текст главного модуля Unit1 и Вы увидите, что при создании формы, не ведая того, Вы уже создавали новый класс TForm1 на основе класса предка TForm. После описания класса TForm1 описан и идентификатор объекта – Form1 – Ваша форма. Конструктор формы (метод создания формы в классе TApplication) вызывается из файла-проекта *.dpr посредством оператора

Application.CreateForm(TForm1,Form1).

Получить информацию о классах, свойствах и методах любых объектов можно через справочную систему среды Delphi (вызывается клавишей F1 для слова, на котором находится курсор). Благодаря ей можно легко определить к какому классу принадлежит указанный объект, узнать все его свойства и методы, в каких модулях описан этот класс и надо ли эти модули дополнительно включать в оператор uses.

В приложении 2 приведено дерево основных классов библиотеки визуальных компонент Delphi. Во главе дерева стоит класс TObject. Он не имеет ни одного свойства, ни одного события, а только – 25 методов. Его дальний потомок, например, кнопка имеет более 70 свойств и других встроенных классов, более 90 методов и 16 событий. Поистине талантливый потомок!

16

2.5 ОБЪЕКТНО-ОРИЕНТИРОВАННОЕ ПРОГРАММИРОВАНИЕ

Между объектами существуют родительско-дочерние (Parent-Child) и собственнические (Owner) отношения. Если изменение свойств одного объекта может менять свойства некоторых других объектов, то первый объект является родительским (Parent) по отношению к другим дочерним (Child). Например, перемещение родительского объекта на форме приводит к перемещению и всех «сидящих» на нем дочерних объектов.

Собственник, или владелец Owner – это объект, породивший другой объект методом Create. Знание собственника объекта важно для метода деструктора Free, удаляющего объекты. Если удалить владельца, то удаляются и все его подчиненные объекты. При дизайне главной формы все её объекты принадлежат собственнику – форме Form1. В идентификаторе любого объекта его квалификатор указывает собственника объекта. При программировании операций с какими-либо объектами внутри блока собственника, можно не писать его квалификатор, а в конструкторе Create не указывать владельца. Так, например, кнопка, размещенная на главной форме, может иметь идентификатор и Button1 и Form1.Button1. Очевидно, что если удалить объект-собственник Form1, то исчезнет и объект Button1.

2.5.2 Наследование

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

Механизм наследования обеспечивает возможность многократного применения одного программного кода. Поэтому, например, в классе TForm1, при создании главной формы, нам не надо повторно описывать свойства и методы из класса-предка TForm.

2.5.3 Инкапсуляция

Это встраивание данных и методов объекта внутри соответствующего класса. При этом, работа с данными и детали её реализации скрытии от внешнего пользователя объекта. Достоинства инкапсуляции заключаются в модульности и изоляции кода объекта от другого кода программы.

2.5.4 Полиморфизм

Слово полиморфизм означает «много форм». В данном случае под этим подразумевается, что вызов метода объекта приведет к исполнению кода, конкретного экземпляра объекта.

17

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

Это означает, что один и тот же метод выполняется по-разному для различных объектов. Например, метод класса Музыкальный инструмент – PlayMusic – может быть определен как общий метод, применимый к любой категории музыкальных инструментов.

2.6 НАЧИНАЕМ ПРОГРАММИРОВАТЬ

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

– нажатие клавиши, достижение заданного времени и т.п. Собственно программирование – это и есть обработка событий в разделе implementation главного модуля. Более того, раздел implementation не может содержать ничего другого кроме процедур обработки событий и необходимых для них объявлений, описаний.

Кроме свойств и событий, каждый компонент обладает и методами, о которых шла речь в пункте 2.5.1. Приведем наиболее часто используемые методы.

Hide – сделать невидимым объект на который указывает квалификатор; Show – сделать объект видимым;

Clear – очистить содержимое объекта (если это имеет смысл); Close – закрыть объект (например, главную форму);

Create – создать объект (конструктор объектов); Free – удалить объект (деструктор объектов).

Обработка события оформляется в виде процедуры, т.е. в виде выделенного алгоритмического блока, в который передаются некоторые параметры, перечисленные в круглых скобках после имени процедуры. Заголовок каждой процедуры формируется автоматически на этапе работы над событиями в инспекторе объектов, и размещаются в части Implementation исходного текста формы в файле Unit1.pas.

При написании кодов программы обращение к свойствам и методам объектов формируется по следующему правилу:

<Идентификатор объекта>.<свойство или метод>

Обращаем внимание, что значение идентификатора объекта содержится в свойстве объекта – Name. Например, к заголовку (свойство Caption) первой копки (экземпляр компонента TButton) можно обратиться через

18

2.6 НАЧИНАЕМ ПРОГРАММИРОВАТЬ

идентификатор Button1.Caption и присвоить необходимое текстовое значение: Button1.Caption:= ’Выполнено’. Для доступа к объекту не из главного модуля необходимо в квалификаторе указывать модуль и форму,

где этот объект был создан, например, Unit1.Form1.Button1.Caption:= ’Выполнено’.

П р и м е р 2.1

Создадим приложение с кнопкой «Закрыть» и заголовком формы «Пример 2.1». Далее такой заголовок будет иметь и Windows-окно созданного приложения. При нажатии на кнопку мышью, приложение должно закрываться. Форма такого приложения показана на рис. 2.4. Алгоритм программирования выглядит следующим образом.

Рис. 2.4 Пример формы, содержащей объект Button1

1.Создадим новый проект. Для этого необходимо либо просто открыть среду Delphi, либо, при старом открытом проекте, выполнить команду меню Delphi File → New Application, или нажать на кнопку → Application.

2.В палитре компонент на странице Standard выберем изображение кнопки – . Для этого необходимо щелкнуть на ее изображении левой кнопкой мыши. Затем, аналогичным образом, необходимо указать место на форме, где должна располагаться кнопка, т.е. – объект Button1 выбранного типа TButton.

3.Изменим имя формы. Щелкнем мышью на форме (активизируем объект Form1), или в инспекторе объектов выберем Form1. На странице Properties выберем свойство Caption (заголовок), в правом поле которого, наберем его значение – Пример 2.1. Если мы захотим, например, изменить цвет окна приложения, то необходимо изменить значение свойства Color.

4.В инспекторе объектов выберем второй и последний объект Button1, это же можно сделать щелчком мыши на кнопке, расположенной на форме. На странице Properties выберем свойство Caption, в правом поле которого, наберем его значение – Закрыть.

19

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