Структура файлов модулей форм


Рассмотрим теперь, как выглядят тексты модулей форм. Каждый такой модуль состоит из двух файлов: заголовочного, содержащего описание класса формы, и файла реализации. Ниже приведены тексты этих файлов модуля формы, на которой размещена одна метка (компонент типа TLabel) и одна кнопка (компонент типа TButton). Подробные комментарии в этом тексте поясняют, куда и что в этот код вы можете добавлять.
Заголовочный файл:
#ifndef Unit1H
#define Unit1H
#include <Classes.hpp>
#include <Contrpls.hpp>
#include <StdCtrls.hpp>
#include <Forms.hpp>
// сюда могут помещаться дополнительные директивы препроцессора (в частности, include)
// не включаемые в файл автоматически объявление класса формы TForm1
class TForm1 : public TForm
{
_published: // IDE-managed Components
// размещенные на форме компоненты TButton *Button1;
TLabel *Label1;
void _fastcall ButtonlClick(TObject *Sender);
private: // User declarations
// закрытый раздел класса
//сюда могут помещаться объявления типов, переменных, функций,
// включаемых в класс формы, но не доступных для других модулей
public: // User declarations
// открытый раздел класса
// сюда могут помещаться объявления типов, переменных, функций,
// включаемых в класс формы и доступных для других модулей
_fastcall TForm1(TComponent* Owner);
};
extern PACKAGE TForm1 *Form1;
// сюда могут помещаться объявления типов, переменных, функций,
// которые не включаются в класс формы;
// доступ к ним из других блоков возможен только при соблюдении
// некоторых дополнительных условий
#endif

Файл реализации:
#include <vcl.h>
#pragma hdrstop
#include «Unit1.h»
#pragma package (smart_init)
#pragma resource «*.dfm»
// сюда могут помещаться дополнительные директивы
// препроцессора (в частности, include),
// не включаемые в файл автоматически

// объявление объекта формы Form1
TForm1 *Form1;
// вызов конструктора формы Form1
__ fastcall TForm1 :: TForm1 (TComponent* Owner)
: TForm (Owner)
{
// сюда вы можете поместить операторы,
// которые должны выполняться при создании формы
}
// сюда могут помещаться объявления типов и переменных,
// доступ к которым из других модулей возможен только при
// соблюдении некоторых дополнительных условий;
// тут же должны быть реализации всех функций, объявленных в
// заголовочном файле, а также могут быть реализации любых
// дополнительных функций, не объявленных ранее
void _ fastcall TForm1 : :Button1Click (TObject *Sender)
{
Close ();
}
Рассмотрим подробнее эти файлы. Заголовочный файл начинается с автоматически включенных в него директив препроцессора. В частности, C++ Builder сам помещает тут директивы include, Подключающие копии файлов, в которых описаны те компоненты, переменные, константы, функции, которые вы используете в данном модуле. Однако, для некоторых функций такое автоматическое подключение не производится. В этих случаях разработчик должен добавить соответствующие директивы include вручную.
После директив препроцессора следует описание класса формы. Имя класса вашей формы — Tform1. Класс содержит три раздела: _ published — открытый раздел, содержащий объявления размещенных на форме компонентов и обработчиков событий в них, private — закрытый раздел класса, и public — открытый раздел класса. В данном случае в разделе _ published вы можете видеть объявления указателей на два компонента: компонент Button1 типа TButton и компонент Label1 типа TLabel. Там же вы видите объявление функции Button1Click — введенного пользователем обработчика события щелчка на кнопке Button1. Все, что имеется в разделе _ published, C++Builder включает в него автоматически в процессе проектирования вами формы. Так что вам не приходится, как правило, работать с этим разделом. А в разделы private и public вы можете добавлять свои объявления типов, переменных, функций. То, что вы или C++Builder объявите в разделе public, будет доступно для других классов и модулей. То, что объявлено в разделе private, доступно только в пределах данного модуля. Как вы можете видеть, единственное, что C++Builder самостоятельно включил в раздел public, это объявление (прототип) конструктора вашей формы TForm1.
После объявления класса следует предложение PACKAGE, которое включается в файл автоматически. После этого вы можете разместить объявления типов, переменных, функций, к которым при соблюдении некоторых дополнительных условий будет доступ из других модулей, но которые не включаются в класс формы.
Теперь рассмотрим текст файла реализации модуля. После автоматически включенных в этот файл директив препроцессора следует тоже автоматически включенное объявление указателя на объект формы Form1, а затем — вызов конструктора формы. Тело соответствующей функции пустое, но вы можете включить в него какие-то операторы. После этого размещаются описания всех функций, объявленных в заголовочном файле. Вы можете также размещать здесь объявления любых типов, констант, переменных, не объявленных в заголовочном файле, и размещать описания любых функций, не упомянутых в заголовочном файле.
Имена файлам модулей C++Builder дает по умолчанию: для первого модуля имя равно Unit1, для второго Unit2 — и т.д.