Практикум по Delphi для решения прикладных задач
f65d50f6

Модуль кода (unit) делится на две части


Модуль кода (unit) делится на две части – интерфейс (interface) и реализацию (implementation).

Раздел interface:

-        uses: подключаемые модули, в которых содержатся используемые процедуры, функции, классы и т.п. Их список формируется автоматически в зависимости от добавленных в форму компонентов.

-        type: описания типов. Автоматически в этом разделе описан класс вашей формы.

-        var: описание глобальных переменных. Автоматически тут описана переменная типа описанного класса формы. В этой переменной во время работы программы хранится указатель на экземпляр формы.

-        const: описание констант. Этот раздел автоматически не создается, однако может быть легко добавлен.

Раздел implementation:

-        Здесь также можно добавить uses.

-        С помощью {$R} подключаются файлы ресурсов. Автоматически подключен файл dfm, имеющий то же имя, что и файл модуля и потому подключаемый как *.dfm. В этом файле хранится информация о форме – расположение и настройки компонентов, помещенных в форму, и т.п. 

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

Все то, что касается объявления доступных из других модулей переменных, констант, процедур, типов, классов и т.п., должно быть описано в разделе interface. В этой части программы, которая создается автоматически, в разделе uses перечисляются используемые модули, в разделе type описывается класс формы – потомок класса TForm, а в разделе var описывается глобальная переменная, в которой будет храниться указатель на объект-экземпляр формы. Соответственно, если надо подключить какой-то свой модуль, то необходимо добавить его в раздел uses. При описани нового типа его добавляют в раздел type до или после класса формы. Если нужно описать глобальную переменную, то ее добавляют в раздел var, а если нужна константа – создается дополнительно раздел const. В свою очередь, в разделе implementation сначала указывается ссылка на файлы ресурсов, а затем описываются реализации процедур и функций – как создаваемых автоматически обработчиков событий, так и добавляемых по необходимости. Вначале эта часть пуста, но она будет заполняться во время написания программы.

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



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

-        в разделе implementation создается пустой обработчик, который вы потом заполняете;

-        в классе вашей формы создается описание этого метода (обработчики событий являются методами);

-        если не создавать обработчик через страницу Events Инспектора Объектов (или двойным щелчком по компоненту), а просто написать в коде процедуру-обработчик, то он не будет должным образом связан с компонентом, и событие не сработает.

Если изменить имя компонента, то изменятся имена и обработчиков событий, которые с ним связаны.

Если необходимо изменить название обработчика, то надо воспользоваться Инспектором Объектов. Переименовывая здесь имя процедуры обработчика, корректно автоматически изменяются также и ссылки на эту процедуру.

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

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

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

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

Существует также важная тонкость использования собственных функций: все обработчики событий имеют в своем названии имя формы:

procedure TForm1.FormCreate(Sender: TObject);

Это указывает на то, что работают с классом формы TForm1 и описывают методы для нее. Из обработчика просто обращаются к компонентам формы (класс формы «знает» о наличии компонентов на ней и имеет к ним непосредственный доступ), например:

MyGrid.RowCount := Num;

Когда описывается собственная процедура, то она «ничего не знает» о компонентах формы, и поэтому нужно обращаться к компонентам через форму, а, не минуя ее.



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