Файл 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. В редакторе кода появится новая страница со следующим текстом: