1.2 Структура кода модуля

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

  1. Запустите Delphi, если вы еще это не сделали, с помощью меню Windows Пуск | Программы. Если Delphi уже работает и вы уже делали какие-то эксперименты с формой, то откройте новое приложение. Для этого вам надо выполнить команду File | New Application. Ответьте «No» на вопрос Delphi, хотите ли вы сохранить изменения в вашем проекте.
  2. Перенесите на пустую форму, которая открылась вам, кнопку Button со страницы Standard палитры компонентов. Для этого выделите пиктограмму кнопки (она шестая слева) и затем щелкните курсором мыши в нужном вам месте формы. На форме появится кнопка, которой Delphi присвоит имя по умолчанию — Button1.
  3. Аналогичным образом перенесите на форму с той же страницы Standard палитры компонентов метку Label (она на странице третья слева). В этой метке в процессе выполнения приложения будет появляться текст при нажатии пользователем кнопки. Delphi присвоит ей имя Label1.
  4. Разместите компоненты на форме примерно так, как показано на рис. 1.4 а.
  5. Выделите на форме компонент Button1 — кнопку. Перейдите в Инспектор Объектов и измените ее свойство Caption (надпись), которое по умолчанию равно Button1 (имя, которое по умолчанию присвоила этому компоненту Delphi) на «Пуск».
  6. Сотрите текст в свойстве Caption метки Label1, чтобы он не высвечивался, пока пользователь не нажмет кнопку приложения. Теперь вам осталось только написать оператор, который заносил бы в свойство Caption метки Label1 нужный вам текст в нужный момент. Этот момент определяется щелчком пользователя на кнопке. При щелчке в кнопке генерируется событие OnClick. Следовательно, обработчик этого события вы и должны написать.
  7. Выделите кнопку Button1 на форме, перейдите в Инспектор Объектов, откройте в нем страницу событий (Events), найдите событие кнопки OnClick (оно первое сверху) и сделайте двойной щелчок в окне справа от имени этого события. Это стандартный способ задания обработчиков любых событий. Вы окажетесь в окне Редактора Кода и увидите там текст:
    procedure TForm1.Button1Click(Sender: TObject);
    begin
    end
    
    Заголовок этой процедуры складывается из имени класса вашей формы (TForm1), имени компонента (Button1) и имени события без префикса On (Click).
  8. Напишите в обработчике оператор задания надписи метки Label1. Этот оператор может иметь вид:
    Label1.Caption := 'Это мое приложение Delphi!';
    
    Оператор, который вы написали, присваивает метке строку текста «Это мое приложение Delphi!».


Рис. 1.4
Форма (а) и окно в процессе выполнения (б) вашего приложения
а) б)

Если вы работаете с версией старше Delphi 3, написали первый идентификатор оператора — Label1, поставили точку и ненадолго задумались, то вам всплывет подсказка, содержащая список всех свойств и методов метки. Это начал работать Знаток Кода — Code Insight, который стремится подсказать вам свойства и методы компонентов, аргументы функций и их типы, конструкции операторов. Вы можете выбрать из списка нужное ключевое слово, нажать клавишу Enter и выбранное слово (свойство, метод) окажется вписанным в текст.

Этот инструмент очень удобен во многих случаях, когда вы не очень точно помните последовательность перечисления параметров какой-нибудь функции, или когда не уверены в имени какого-то свойства. Но иногда, когда вы хорошо освоитесь с Delphi, эти подсказки, может быть, начнут вас раздражать. Тогда вы можете отключить Знатока Кода, выполнив команду Tools | Editor Options и на странице Code Insight выключив опцию Code Completion. В Delphi 4 аналогичные действия можно сделать командой Tools | Environment Options.

Итак, ваше приложение готово. Можете откомпилировать и выполнить его (команда Run | Run). После недолгой компиляции перед вами появится окно вашего приложения. Нажав в нем кнопку Пуск, вы увидите указанную вами строку текста (рис. 1.4 б). Можете попробовать различные манипуляции с окном: перемещение его, изменение размеров его рамки курсором мыши, свертывание и развертывание. В заключение закройте приложение, щелкнув на кнопке в его правом верхнем углу.

Теперь посмотрите код программы, который создала с вашей помощью Delphi. Этот код содержится в двух файлах — головном файле программы с расширением .dpr и в файле модуля с расширением .pas. Головной файл .dpr — один на весь проект, а файлов модулей столько, сколько форм вы ввели в свой проект. Добавление в проект новой формы вы можете осуществить командой File | New Form, а удалить форму из проекта можно командой Project | Remove from Project.

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

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

unit Unit1;
interface // Открытый интерфейс модуля
{Список подключаемых модулей}
uses
Windows, Messages, SysUtils, Classes, Graphics,
Controls, Forms, Dialogs, StdCtrls;
{Объявление класса формы}
type
TForm1 = class(TForm)
Label1: TLabel;
Button1: TButton;
procedure Button1Click (Sender: TObject);
private // Закрытый раздел класса
{ Private declarations }
{Сюда могут помещаться объявления переменных, функций и
процедур, включаемых в класс формы, но не доступных для
других модулей}
public // Открытый раздел класса
{ Public declarations }
{Сюда могут помещаться объявления переменных, функций и
процедур, включаемых в класс формы и доступных для
других модулей}
end;
var
Form1: TForm1;
{Сюда могут помещаться объявления типов, констант,
переменных, функций и процедур, к которым будет доступ
из других модулей, но которые не включаются в класс
формы}
implementation // Реализация модуля
{$R *.DFM}
{Сюда могут помещаться предложения uses, объявления типов,
констант, переменных, к которым не будет доступа из
других модулей. Тут же должны быть реализации всех
объявленных в разделе interface функций и процедур,
а также могут быть реализации любых дополнительных, не
объявленных ранее функций и процедур.}
procedure TForm1.Button1Click(Sender: TObject);
begin
Label1.Caption := 'Это мое приложение Delphi!';
end;
end.

Модуль начинается с ключевого слова unit, после которого пишется имя модуля. Оно совпадает с именем файла, в которым вы сохранили свой модуль. По умолчанию для первого модуля имя равно Unit1, для второго Unit2 — и т.д.

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

В разделе interface после предложения uses, содержащего список подключаемых библиотечных модулей, вы можете видеть объявление класса вашей формы, подготовленное Delphi. Имя класса вашей формы — TForm1. В класс включены те объекты которые вы разместили на форме — метка Label1 и кнопка Button1. Кроме того в класс включено объявление того обработчика щелчка на кнопке, который вы создали — процедуры Button1Click.

В классе предусмотрено также два раздела: privateзакрытый раздел класса, и publicоткрытый раздел класса. То, что вы или Delphi объявите в разделе public, будет доступно для других классов и модулей. То, что объявлено в разделе private, доступно только в пределах данного модуля.

После завершения объявления класса формы вы можете видеть строки

var
Form1: TForm1

Это объявляется переменная Form1 класса TForm1, т.е. объявляется ваша форма как объекта класса TForm1.

Затем следует раздел реализации implementation, который начинается с директивы компилятора, смысл которой, вообще говоря, знать не обязательно. Надо только следить, чтобы случайно не стереть эту директиву. Далее в разделе implementation вы можете видеть реализацию объявленной в классе процедуры Button1Click с единственным оператором, который вы ввели в программу сами.

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

uses Unit2, Unit3;
обеспечит вам доступ ко всем элементам, объявленным в интерфейсе модулей Unit2 и Unit3.
к началу страницы