Введение в DELPHI

       

Создание методов с помощью визуальных средств


В предыдущем уроке Вы видели, что синтаксический "скелет" метода может быть сгенерирован с помощью визуальных средств. Для этого, напомним, нужно в Инспекторе Объектов дважды щелкнуть мышкой на пустой строчке напротив названия интересующего Вас события в требуемом компоненте. Заметим, если эта строчка не пуста, то двойной щелчок на ней просто переместит Вас в окне Редактора Кода в то место, где находится данный метод.

Для более глубокого понимания дальнейшего изложения кратко остановимся на концепции объектно-ориентированного программирования. Для начала определим базовое понятие объектно-ориентированного программирования - класс. Класс - это категория объектов, обладающих одинаковыми свойствами и поведением. При этом объект представляет собой просто экземпляр какого-либо класса. Например, в Delphi тип "форма" (окно) является классом, а переменная этого типа - объектом. Метод - это процедура, которая определена как часть класса и инкапсулирована (содержится) в нем. Методы манипулируют полями и свойствами классов (хотя могут работать и с любыми переменными) и имеют автоматический доступ к любым полям и методам своего класса. Доступ к полям и методам других классов зависит от уровня "защищенности" этих полей и методов. Пока же для нас важно то, что методы можно создавать как визуальными средствами, так и путем написания кода вручную.

Давайте рассмотрим процесс создания программы CONTROL1, которая поможет нам изучить технику написания методов в Delphi.

Рис. Ошибка! Текст указанного стиля в документе отсутствует.-A: Главная форма программы CONTROL1

Для создания программы CONTROL1 поместите с помощью мышки компонент Edit (находится на страничке "Standard" Палитры Компонентов) на форму. После этого ваша форма будет иметь вид, показанный на Рис. Ошибка! Текст указанного стиля в документе отсутствует.-A.

Рис. Ошибка! Текст указанного стиля в документе отсутствует.-B:Чтобы создать метод, просто дважды щелкните справа от слова OnDblClick

Теперь перейдите в Object Inspector, выберите страничку "Events" и дважды щелкните в пустой строчке напротив события OnDblClick, как показано на Рис. Ошибка! Текст указанного стиля в документе отсутствует.-B. После этого в активизировавшемся окне Редактора Вы увидите сгенерированный "скелет" метода Edit1DblClick, являющегося реакцией на событие OnDblClick: procedure TForm1.Edit1DblClick(Sender: TObject); begin end;

После генерации процедуры Вы можете оставить ее имя таким, каким "установил" Delphi, или изменить его на любое другое (для этого просто введите новое имя в указанной выше строке Инспектора Объектов справа от требуемого события и нажмите Enter).

Теперь в окне Редактора Кода введите смысловую часть метода: procedure TForm1.Edit1DblClick(Sender: TObject); begin Edit1.Text:= 'Вы дважды щелкнули в строке редактирования'; end;

Сохраните программу. Во время выполнения дважды щелкните на строке редактирования. Текст в этой строке изменится в соответствии с тем, что мы написали в методе Edit1DblClick: см. Рис. Ошибка! Текст указанного стиля в документе отсутствует.-C.

Рис. Ошибка! Текст указанного стиля в документе отсутствует.-C: Содержимое управляющего элемента TEdit изменяется после двойного щелчка по нему

Листинг Ошибка! Текст указанного стиля в документе отсутствует.-A и Листинг Ошибка! Текст указанного стиля в документе отсутствует.-B предоставляют полный код программы CONTROL1.

Листинг Ошибка! Текст указанного стиля в документе отсутствует.-A: Программа CONTROL1 демонстрирует, как создавать и использовать методы в Delphi. program Control1; uses Forms, Main in 'MAIN.PAS' {Form1}; begin


Application.CreateForm(TForm1, Form1); Application.Run; end.

Листинг Ошибка! Текст указанного стиля в документе отсутствует.-B: Головной модуль программы CONTROL1. unit Main; interface uses WinTypes, WinProcs, Classes, Graphics, Controls, Printers, Menus, Forms, StdCtrls; type TForm1 = class(TForm) Edit1: TEdit; procedure Edit1DblClick(Sender: TObject); end; var Form1: TForm1; implementation {$R *.DFM} procedure TForm1.Edit1DblClick(Sender: TObject); begin Edit1.Text := 'Вы дважды щелкнули в строке редактирования'; end; end.

После того, как Ваша программа загрузится в память, выполняются две строчки кода в CONTROL1.DPR, автоматически сгенерированные компилятором: Application.CreateForm(TForm1, Form1); Application.Run;

Первая строка запрашивает память у операционной системы и создает там объект Form1, являющийся экземпляром класса TForm1. Вторая строка указывает объекту Application, "по умолчанию" декларированному в Delphi, чтобы он запустил на выполнение главную форму приложения. В данном месте мы не будем подробно останавливаться на классе TApplication и на автоматически создаваемом его экземпляре - Application. Важно понять, что главное его предназначение - быть неким ядром, управляющим выполнением Вашей программы.

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

Итак, мы видели, что большинство кода Delphi генерирует автоматически. В большинстве приложений все, что Вам остается сделать - это вставить одну или несколько строк кода, как в методе Edit1DblClick: Edit1.Text := 'Вы дважды щелкнули в строке редактирования';

Хотя внешний интерфейс программы CONTROL1 достаточно прост, она (программа) имеет строгую внутреннюю структуру. Каждая программа в Delphi состоит из файла проекта, имеющего расширение .DPR и одного или нескольких модулей, имеющих расширение .PAS. Модуль, в котором содержится главная форма проекта, называется головным. Указанием компилятору о связях между модулями является предложение Uses, которое определяет зависимость модулей.

Нет никакого функционального различия между модулями, созданными Вам в Редакторе, и модулями, сгенерированными Delphi автоматически. В любом случае модуль подразделяется на три секции:

  1. Заголовок
  2. Секция Interface
  3. Секция Implementation

Таким образом, "скелет" модуля выглядит следующим образом: unit Main; {Заголовок модуля} interface {Секция Interface} implementation {Секция Implementation} end.

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



Содержание раздела