Файл Uint1.cpp

//---------------------------------------------------------------------------

#include <vcl.h>

#pragma hdrstop

 

#include "Unit1.h"

//---------------------------------------------------------------------------

#pragma package(smart_init)

#pragma resource "*.dfm"

TOneForm *OneForm;

//---------------------------------------------------------------------------

__fastcall TOneForm::TOneForm(TComponent* Owner)

: TForm(Owner)

{

}

//---------------------------------------------------------------------------

 

void __fastcall TOneForm::Button1Click(TObject *Sender)

{

OneForm->Canvas->Brush->Color=clRed;

OneForm->Canvas->Ellipse(100,100,30,30);

}

//---------------------------------------------------------------------------

 

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

 

#include <vcl\vcl.h>

 

Затем следует директива #pragma hdrstop,появление которой связано с тем, что стандартные заголовочные файлы имеют достаточно большие размеры (десятки и сотни тысяч строк), поэтому ком­пилятор затрачивает много времени на трансляцию этих файлов каждый раз, когда вы заново компилируете проект. Для решения этой проблемы компиля­тор транслирует заголовочные файлы в объектный код только один раз и помещает его в специальный файл с расширением CSM. Имя CSM-файла сов­падает с именем проекта. При повторной компиляции проекта C++Builder не транслирует подключаемые файлы, а просто считывает их объектный код из CSM-файла, что существенно (в 3—4 раза) ускоряет процесс получения выпол­няемого ЕХЕ-файла. При появлении в модуле нового заголовочного файла компилятор транслирует его содержимое и добавляет в CSM-файл. Этот меха­низм эффективен только для стандартных библиотечных Н-файлов, поскольку их содержимое никогда не изменяется. В остальных случаях он не нужен и останавливается специальной директивой#pragma hdrstop.

 

Рассмотрим следующую строку программы #include "Unitl.h"

Эта директива подключает заголовочный файл Unitl.h к программному файлу.

 

Следующая директива компилятора #pragma resource "*.dfa"служит для подключения файла описания формы.

 

Этой директивой подключается только один DFM-файл, в котором описана форма данного программного модуля. Имя DFM-файла получается путем замены звездочки на имя файла, в котором записана директива.

 

Далее объявлена ссылка на объект формы: TOneForm *OneForm;

OneForm — это переменная, которая содержит указатель на объект классаTOneForm.Конструирование объектаOneForm выполняется в главном программном файле (рассмотрено ниже).

После всех объявлении в программном файле реализуются методы обработки событий. Среда C++Builder создает для них пустые заготовки, а вы начиняете их операторами:

 

void __fastcall TOneForm::Button1Click(TObject *Sender)

{

OneForm->Canvas->Brush->Color=clRed;

OneForm->Canvas->Ellipse(100,100,30,30);

}

 

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

 

При внимательном изучении исходного текста модуля остается невыясненным один вопрос: чем обеспечивается вызов методаButtonlClickпри нажатии на форме кнопки, ведь эти методы как бы "повисают в воздухе". Все очень просто. Загляните в DFM-файл, точнее, в его текстовое представление, приведенное выше. Кроме установки значений свойств вы найдете установку и обработчика события:

 

object Button1 : Tbutton

OnClick = ButtonlClick

еnd

 

Таким образом обеспечивается привязка методов формы к соответствующим событиям.

 

Главный программный файл и файл проекта

В самом деле, как компилятору узнать, какие конкретно файлы входят в проект? Должно же быть какое-то организующее начало? Да, и оно есть. Это два файла: главный программный файл с расширением СРР и соответствую­щий ему файл проекта с расширением *.mak в C++Builder1 и с расширением *.bpr в C++Builder3. Имена главного программного файла и файла проекта всегда совпадают.

В главном программном файле перечислены все программные модули и распо­лагается стандартная для программ на языке C++ функцияWinMain, обеспечи­вающая запуск приложения. В файле проекта содержатся указания по ком­пиляции и компоновке всех файлов, составляющих проект.

Когда вы по команде File | New Application начинаете разработку нового прило­жения, среда C++Builder автоматически создает главный программный файл и файл проекта. По мере создания новых форм содержимое этих файлов видо­изменяется автоматически.

Чтобы увидеть главный программный файл приложения, вычисляющего иде­альный вес, выберите в меню C++Builder команду View | Project Source. В редакторе кода появится новая страница со следующим текстом: