3. Проект приложения в C++Builder

Проект в визуальной среде проектирования С++Builder состоит из нескольких файлов и необходим для корректного проектирования и компиляции приложения. В общем случае состав проекта зависит от типа разрабатываемого приложения (графическое приложение, консольное приложение, динамическая библиотека, системная служба, WEB приложение). Рассмотрим состав проекта для графического (WIN32 GUI) приложения, поскольку именно с таким чаще всего приходится сталкиваться прикладным программистам. Все файлы, входящие в проект, можно разделить на две группы: файлы проекта и файлы форм. По умолчанию файлы проекта имеют имя project1, а файлы форм unit1, unit2 и т. д. К файлам проекта относятся следующие типы файлов: главный файл проекта, исходный файл проекта, файл ресурсов проекта. Главный файл проекта имеет расширение *.bpr и необходим при разработке любых приложений в среде С++Builder. Данный файл содержит опции, предназначенные для компилятора и линковщика, и необходим для создания выходного модуля приложения. Этот файл является аналогом файла makefile, используемого во многих системах программирования, базирующихся на С++. Для получения файла *.mak из главного файла проекта можно использовать пункт главного меню Project | Export Makefile. Сам главный файл проекта представлен в формате XML и состоит из нескольких секций: MACROS, OPTIONS, LINKER, FILELIST, IDEOPTIONS, содержание которых определяет состав проекта, опции сборки проекта в результирующий модуль, используемые библиотеки и пакеты и т. п. Фрагмент главного файла проекта приведен в листинге 3.1. Для просмотра файла можно использовать пункт главного меню среды разработки Project|Edit Option Source. Однако ручное редактирование данного файла не рекомендуется, и все изменения в данный файл вносятся автоматически при изменении опций проекта (пункт меню Project|Options или комбинация клавиш Shift-Ctrl-F11), а также при добавлении и удалении файлов в проект. Для добавления файлов в проект можно использовать пункт главного меню Project|Add to Project (комбинация клавиш Shift-F11). Для удаления файлов из проекта можно использовать пункт главного меню Project|Remove from Project.

НЕ нашли? Не то? Что вы ищете?

Листинг 3.1. Файл проекта C++Builder

<?xml version='1.0' encoding='utf-8' ?>

<!-- C++Builder XML Project -->

<PROJECT>

<MACROS>

<VERSION value="BCB.06.00"/>

<PROJECT value="Project1.exe"/>

<OBJFILES value="Project1.obj &quot; С:\Program Files\Borland\CBuilder6\ Bin\ Unit1.obj&quot;"/>

<RESFILES value="Project1.res"/>

<SPARELIBS value="vcl. lib rtl. lib"/>

<PACKAGES value="vcl. bpi rtl. bpi dbrtl. bpi adortl. bpi vcldb. bpi vclx. bpi vcldbx. bpi ibxpress. bpi cds. bpi dsnap. bpi bdecds. bpi qrpt. bpi teeui. bpi teedb. bpi tee. bpi dss. bpi teeqr. bpi visualclx. bpi visualdbclx. bpi bcbsmp. bpi vclie. bpi xmlrtl. bpi inet. bpi inetdbbde. bpi inetdbxpress. bpi inetdb. bpi nmfast. bpi webdsnap. bpi bcbie. bpi dclocx. bpi dbexpress. bpi dbxcds. bpi indy. bpi bcb2kaxserver. bpi dclusr. bpi vclshlctrls. bpi"/>

. . .

</MACROS>

<LINKER>

<ALLOBJ value="c0w32.obj $(PACKAGES) Memmgr. Lib sysinit. obj $(OBJFILES)"/>

<ALLRES value="$(RESFILES)"/>

<ALLLIB value="$(LIBFILES) $(LIBRARIES) import32.lib cp32mti. lib"/>

<OTHERFILES value=""/>

</LINKER>

<FILELIST>

<FILE FILENAME="Project1.res" FORMNAME=""

UNITNAME="Project1.res" CONTAINERID="ResTool" DESIGNCLASS=""

LOCALCOMMAND=""/>

<FILE FILENAME="Project1.cpp" FORMNAME=""

UNITNAME="Project1" CONTAINERID="CCompiler" DESIGNCLASS=""

LOCALCOMMAND=""/>

<FILE FILENAME="C:\Program Files\Borland\CBuilder6\Bin\Unit1.cpp" FORMNAME="Form1" UNITNAME="Unit1" CONTAINERID="CCompiler" DESIGNCLASS="" LOCALCOMMAND=""/>

</FILELIST>

. . .

</PROJECT>

Исходный файл проекта имеет расширение *.cpp и для графического приложения содержит функцию WinMain, которая является точкой входа при запуске приложения. Для просмотра исходного файла проекта можно использовать пункт главного меню среды разработки Project|View Source. В данном файле содержится код для начальной инициализации различных подсистем приложения, код для создания автоматически создаваемых форм приложения, обработка исключительных ситуаций, а также код для организации цикла обработки сообщений. Поскольку выполнение приложения начинается именно с функции WinMain, то в данный файл целесообразно добавить код, который необходимо выполнить еще до отображения главной формы приложения. Например, обработка ключей запуска приложения, запрещение запуска второй копии приложения, отображения окна splash screen во время загрузки приложения. Пример исходного файла проекта приведен в листинге 3.2.

Листинг 3.2. Файл проекта (project1.cpp)

#include <vcl. h>

#pragma hdrstop

USEFORM("С:\Program Files\Borland\CBuilder6\Bin\Unit1.cpp", Form1);

WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int)

{ try

{ Application->Initialize();

Application->CreateForm(__classid(Tform1), &Form1);

Application->Run(); }

catch (Exception &exception)

{ Application->ShowException(&exception); }

catch (...)

{ try

{ throw Exception(""); }

catch (Exception &exception)

{ Application->ShowException(&exception); }

}

return 0;}

Двоичный файл ресурсов проекта имеет расширение *.res и содержит ресурсы приложения. По умолчанию в данном файле находится один ресурс типа ICON с именем MAINICON, содержащий пиктограмму главного окна приложения. Также в данный файл может быть включена информация о версии приложения. В общем случае файл ресурсов может содержать различные типы ресурсов, например, BITMAP, CURSOR, DIALOG, MENU, STRINGTABLE и др. Данный файл создается автоматически при компиляции приложения и его ручное редактирование недопустимо. При необходимости включения в проект каких-либо дополнительных ресурсов необходимо добавить в проект с помощью пункта меню Project| Add to project дополнительный исходный файл ресурсов с расширением *.rc или откомпилированный файл ресурсов с расширением *.res. Например, добавить в файл ресурсов myres. rc пиктограмму из файла “earth. ico” можно следующим образом:

MYICON ICON "EARTH. ICO"

После сборки приложения данная пиктограмма будет храниться в готовом модуле (exe или dll). В коде приложения доступ к ней можно получить следующим образом:

Application->Icon->Handle=LoadIcon(HInstance,"MYICON");

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

Для добавления форм в проект можно использовать пункт главного меню File|New|Form. Каждая форма приложения содержит следующие типы файлов: файл формы, файл модуля формы, заголовочный файл формы. Файл формы имеет расширение *.dfm и содержит информацию о компонентах, помещенных на форму. Начиная с 5-ой версии С++Builder, файл формы имеет текстовый вид, в ранних версиях использовался двоичный файл формы. Для совместимости с предыдущими версиями можно вернуться к двоичному файлу, отключив опцию Text DFM в контекстном меню редактора форм. Файл формы используется редактором форм, изменения в него вносятся автоматически при проектировании приложения и его ручное редактирование не рекомендуется. Для просмотра файла формы можно использовать пункт контекстного меню View as Text редактора форм. Для возврата в режим редактора формы можно использовать пункт контекстного меню View as Form. Фрагмент файла формы приведен в листинге 3.3.

Листинг 3.3. Файл формы

object Form1: TForm1

Left = 192

Top = 107

BorderStyle = bsDialog

Caption = 'Test'

object Image1: TImage

Left = 40

Top = 64

Width = 105

Height = 81

end

object Button1: TButton

Left = 24

Top = 24

Width = 75

Height = 25

Caption = 'Close'

TabOrder = 0

end

end

Из листинга видно, что файл формы хранит значения свойств и событий компонент формы, присвоенных им в инспекторе объектов. Это необходимо для восстановления данных значений при последующих загрузках проекта.

Исходный файл формы имеет расширение *.cpp и содержит реализацию всех методов класса формы и обработчиков событий. Данный файл также называется модулем формы или form unit.

Листинг 3.4. Модуль формы

#include <vcl. h>

#pragma hdrstop

#include "Unit1.h"

#pragma package(smart_init)

#pragma resource "*.dfm"

TForm1 *Form1;

__fastcall TForm1::TForm1(TComponent* Owner)

: TForm(Owner)

{}

void __fastcall TForm1::FormCreate(TObject *Sender)

{ date d;

getdate(&d);

Form1->Caption="Сегодня"+IntToStr(d. da_day)+"."+

IntToStr(d. da_mon)+"."+IntToStr(d. da_year);}

В листинге 3.4 приведен фрагмент возможного содержимого файла модуля формы. В данном примере файл содержит конструктор формы TForm1 и обработчик события создания формы FormCreate. При генерации в инспекторе объектов новых обработчиков их определение с пустым телом автоматически добавляется в файл модуля формы, а задача программиста – в наполнении тела обработчика кодом.

Заголовочный файл формы имеет расширение *.h и содержит описание класса формы (листинг 3.5). Заголовочный файл подключается к исходному файлу формы с помощью директивы препроцессора #include. Для предотвращения повторного определения класса код заголовочного файла обрамлен директивами препроцессора

#ifndef Unit1H

#define Unit1H

// код

#endif

По умолчанию в редакторе кода отображается исходный файл формы. Для переключения между исходным файлом формы и заголовочным файлом можно использовать пункт контекстного меню редактора кода Open Source/Header File (комбинация клавиш Ctrl-F6). Необходимо также отметить, что в заголовочном файле также находится внешнее определение указателя на класс формы.

Из за большого объема этот материал размещен на нескольких страницах:
1 2 3 4 5 6 7 8 9 10 11 12 13 14