SlideShare a Scribd company logo
1 of 10
Download to read offline
Лекция №11 для дисциплин: «Прикладное программирование» и «Языки
программирования»
1
Лекция 11 (ч.3)
Синтаксис и программные конструкции Visual C
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.
Лекция №11 для дисциплин: «Прикладное программирование» и «Языки
программирования»
2
Листинг 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 FilesBorlandCBuilder6 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>
Лекция №11 для дисциплин: «Прикладное программирование» и «Языки
программирования»
3
<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 FilesBorlandCBuilder6BinUnit1.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>
Лекция №11 для дисциплин: «Прикладное программирование» и «Языки
программирования»
4
#pragma hdrstop
USEFORM("С:Program FilesBorlandCBuilder6BinUnit1.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 или откомпилированный
Лекция №11 для дисциплин: «Прикладное программирование» и «Языки
программирования»
5
файл ресурсов с расширением *.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'
Лекция №11 для дисциплин: «Прикладное программирование» и «Языки
программирования»
6
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>
Лекция №11 для дисциплин: «Прикладное программирование» и «Языки
программирования»
7
#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
Лекция №11 для дисциплин: «Прикладное программирование» и «Языки
программирования»
8
// код
#endif
По умолчанию в редакторе кода отображается исходный файл формы. Для переключения
между исходным файлом формы и заголовочным файлом можно использовать пункт
контекстного меню редактора кода Open Source/Header File (комбинация клавиш Ctrl-F6).
Необходимо также отметить, что в заголовочном файле также находится внешнее определение
указателя на класс формы.
extern PACKAGE TForm1 *Form1;
Поэтому для использования данной формы из других форм приложения в исходных
файлах этих форм необходимо просто подключить заголовочный файл формы с помощью
директивы препроцессора #include. Аналогичные действия производятся автоматически при
выборе пункта главного меню File| Include Unit Hdr (комбинация клавиш Alt-F11). Ниже
приведен пример исходного файла проекта.
Листинг 3.5. Заголовочный файл формы
#ifndef Unit1H
#define Unit1H
#include <Classes.hpp>
#include <Controls.hpp>
#include <StdCtrls.hpp>
#include <Forms.hpp>
#include <ExtCtrls.hpp>
#include <Graphics.hpp>
class TForm1 : public TForm
{__published: // IDE-managed Components
TButton *Button1;
Лекция №11 для дисциплин: «Прикладное программирование» и «Языки
программирования»
9
TImage *Image1;
void __fastcall FormCreate(TObject *Sender);
private: // User declarations
public: // User declarations
__fastcall TForm1(TComponent* Owner);};
extern PACKAGE TForm1 *Form1;
#endif
Содержимое заголовочного файла может формироваться как автоматически при работе
программиста с редактором форм и инспектором объектов, так и самим программистом с
клавиатуры. В приведенном примере видно, что на форму были добавлены компоненты TButton
и TImage, а в инспекторе объектов был создан обработчик события FormCreate.
Для сохранения файлов проекта можно использовать пункт главного меню File | Save
Project As. Для сохранения файлов формы можно использовать пункт главного меню File | Save
As. При этом можно задать новые имена для файлов проекта и файлов форм. Для сохранения
изменений во всех файлах можно использовать пункт главного меню File | Save All (комбинация
клавиш Shift-Ctrl-S). Для закрытия проекта можно использовать пункт меню File | Close All. Для
открытия проекта можно использовать пункт меню File | Open Project (комбинация клавиш Ctrl-
F11).
При одновременной разработке нескольких связанных приложений (например, при
разработке клиент/серверных систем) можно использовать группу проектов. Для добавления
новых и существующих проектов в группу можно использовать пункты главного меню Project |
Add New Project и Project | Add Existing Project соответственно. Выбор текущего проекта можно
произвести в менеджере проектов, доступного через пункт главного меню View | Project Manager
(комбинация клавиш Ctrl-Alt-F11). Файл группы проектов имеет расширение *.bpg и содержит
информацию о проектах, входящих в группу.
В процессе компиляции создаются некоторые временные файлы. Файлы, расширение
которых начинается с символа “~”, являются резервными копиями соответствующих файлов.
Лекция №11 для дисциплин: «Прикладное программирование» и «Языки
программирования»
10
Файлы с расширением *.obj объектные файлы приложения и форм. Файл с расширением *.tds
содержит информацию для отладчика и инкрементного линковщика.
Кроме того существуют несколько дополнительных типов файлов, используемых,
например, при создании пакетов и библиотек типов. Рассмотрение данных типов файлов
выходит за рамки данного учебного пособия.
Вывод
Проект приложения в среде C++Builder состоит из нескольких файлов, основными из
которых являются: главный файл проекта (с расширением .bpr), исходный файл проекта (по
умолчанию называется project1.cpp), а также для каждой формы приложения файл формы
(расширение .dfm), заголовочный файл (расширение .h) и модуль формы (расширение .cpp).
Помимо этого в состав проекта могут входить файлы ресурсов, внешние библиотеки, пакеты.
При работе с проектом система создает также некоторые дополнительные файлы, необходимые
для сборки приложения.

More Related Content

What's hot

Статья «Формирование универсальных требований к пользовательским программам п...
Статья «Формирование универсальных требований к пользовательским программам п...Статья «Формирование универсальных требований к пользовательским программам п...
Статья «Формирование универсальных требований к пользовательским программам п...ph.d. Dmitry Stepanov
 
Лабораторные практические работы
Лабораторные практические работыЛабораторные практические работы
Лабораторные практические работыRauan Ibraikhan
 
10 компонентные и офисные приложения на платформе microsoft
10 компонентные и офисные приложения на платформе microsoft10 компонентные и офисные приложения на платформе microsoft
10 компонентные и офисные приложения на платформе microsoftKewpaN
 
Borland C++ Builder освой самостоятельно
Borland C++ Builder освой самостоятельноBorland C++ Builder освой самостоятельно
Borland C++ Builder освой самостоятельноStAlKeRoV
 
моап 2011 02_active_1
моап 2011 02_active_1моап 2011 02_active_1
моап 2011 02_active_1Irina Hahanova
 

What's hot (7)

лек12
лек12лек12
лек12
 
Статья «Формирование универсальных требований к пользовательским программам п...
Статья «Формирование универсальных требований к пользовательским программам п...Статья «Формирование универсальных требований к пользовательским программам п...
Статья «Формирование универсальных требований к пользовательским программам п...
 
Лабораторные практические работы
Лабораторные практические работыЛабораторные практические работы
Лабораторные практические работы
 
10 компонентные и офисные приложения на платформе microsoft
10 компонентные и офисные приложения на платформе microsoft10 компонентные и офисные приложения на платформе microsoft
10 компонентные и офисные приложения на платформе microsoft
 
Borland C++ Builder освой самостоятельно
Borland C++ Builder освой самостоятельноBorland C++ Builder освой самостоятельно
Borland C++ Builder освой самостоятельно
 
моап 2011 02_active_1
моап 2011 02_active_1моап 2011 02_active_1
моап 2011 02_active_1
 
лек13 3
лек13 3лек13 3
лек13 3
 

Similar to лек11 3

презетация Visual basic
презетация Visual basicпрезетация Visual basic
презетация Visual basickseniya_kristina
 
C++ теория
C++ теорияC++ теория
C++ теорияtank1975
 
C++ теория
C++ теорияC++ теория
C++ теорияtank1975
 
C++ теория
C++ теорияC++ теория
C++ теорияtank1975
 
Создаем Drupal дистрибутив: от идеи до сопровождения
Создаем Drupal дистрибутив: от идеи до сопровожденияСоздаем Drupal дистрибутив: от идеи до сопровождения
Создаем Drupal дистрибутив: от идеи до сопровожденияOvadiah Myrgorod
 
Рабочая учебная программа
Рабочая учебная программаРабочая учебная программа
Рабочая учебная программаRauan Ibraikhan
 
ЛР 2 3 4 5 и Расчётная работы МАПО
ЛР 2 3 4 5 и Расчётная работы МАПОЛР 2 3 4 5 и Расчётная работы МАПО
ЛР 2 3 4 5 и Расчётная работы МАПООлег Гудаев
 
Разработка проекта в CMS Plone
Разработка проекта в CMS PloneРазработка проекта в CMS Plone
Разработка проекта в CMS PloneSergey Greger
 
Глава 2: Среда разработки NetBeans
Глава 2: Среда разработки NetBeansГлава 2: Среда разработки NetBeans
Глава 2: Среда разработки NetBeansmetaform
 
#3 "Webpack и Vue.JS: Создание больших приложений и их расширение" Кирилл Кай...
#3 "Webpack и Vue.JS: Создание больших приложений и их расширение" Кирилл Кай...#3 "Webpack и Vue.JS: Создание больших приложений и их расширение" Кирилл Кай...
#3 "Webpack и Vue.JS: Создание больших приложений и их расширение" Кирилл Кай...JSib
 
613.программирование в visual с++ с использованием библиотеки mfc учебное по...
613.программирование в visual с++ с использованием библиотеки mfc  учебное по...613.программирование в visual с++ с использованием библиотеки mfc  учебное по...
613.программирование в visual с++ с использованием библиотеки mfc учебное по...ivanov1566353422
 
613.программирование в visual с++ с использованием библиотеки mfc учебное по...
613.программирование в visual с++ с использованием библиотеки mfc  учебное по...613.программирование в visual с++ с использованием библиотеки mfc  учебное по...
613.программирование в visual с++ с использованием библиотеки mfc учебное по...efwd2ws2qws2qsdw
 
метод организации репозитория исходного кода
метод организации репозитория исходного кодаметод организации репозитория исходного кода
метод организации репозитория исходного кодаSergii Shmarkatiuk
 
Среда разработки Eclipse by Cheburek
Среда разработки Eclipse by CheburekСреда разработки Eclipse by Cheburek
Среда разработки Eclipse by CheburekYa_Cheburek
 

Similar to лек11 3 (20)

лек11 4
лек11 4лек11 4
лек11 4
 
презетация Visual basic
презетация Visual basicпрезетация Visual basic
презетация Visual basic
 
Лекция 1. Введение в Android.
Лекция 1. Введение в Android.Лекция 1. Введение в Android.
Лекция 1. Введение в Android.
 
C++ теория
C++ теорияC++ теория
C++ теория
 
C++ теория
C++ теорияC++ теория
C++ теория
 
C++ теория
C++ теорияC++ теория
C++ теория
 
UML: CASE Tools Overview
UML: CASE Tools OverviewUML: CASE Tools Overview
UML: CASE Tools Overview
 
Создаем Drupal дистрибутив: от идеи до сопровождения
Создаем Drupal дистрибутив: от идеи до сопровожденияСоздаем Drupal дистрибутив: от идеи до сопровождения
Создаем Drupal дистрибутив: от идеи до сопровождения
 
Рабочая учебная программа
Рабочая учебная программаРабочая учебная программа
Рабочая учебная программа
 
ЛР 2 3 4 5 и Расчётная работы МАПО
ЛР 2 3 4 5 и Расчётная работы МАПОЛР 2 3 4 5 и Расчётная работы МАПО
ЛР 2 3 4 5 и Расчётная работы МАПО
 
Разработка проекта в CMS Plone
Разработка проекта в CMS PloneРазработка проекта в CMS Plone
Разработка проекта в CMS Plone
 
Глава 2: Среда разработки NetBeans
Глава 2: Среда разработки NetBeansГлава 2: Среда разработки NetBeans
Глава 2: Среда разработки NetBeans
 
2010-11 (ПБД) Вологжанин Д.Г.
2010-11 (ПБД) Вологжанин Д.Г.2010-11 (ПБД) Вологжанин Д.Г.
2010-11 (ПБД) Вологжанин Д.Г.
 
B pwin&ramus
B pwin&ramusB pwin&ramus
B pwin&ramus
 
#3 "Webpack и Vue.JS: Создание больших приложений и их расширение" Кирилл Кай...
#3 "Webpack и Vue.JS: Создание больших приложений и их расширение" Кирилл Кай...#3 "Webpack и Vue.JS: Создание больших приложений и их расширение" Кирилл Кай...
#3 "Webpack и Vue.JS: Создание больших приложений и их расширение" Кирилл Кай...
 
Panel control
Panel controlPanel control
Panel control
 
613.программирование в visual с++ с использованием библиотеки mfc учебное по...
613.программирование в visual с++ с использованием библиотеки mfc  учебное по...613.программирование в visual с++ с использованием библиотеки mfc  учебное по...
613.программирование в visual с++ с использованием библиотеки mfc учебное по...
 
613.программирование в visual с++ с использованием библиотеки mfc учебное по...
613.программирование в visual с++ с использованием библиотеки mfc  учебное по...613.программирование в visual с++ с использованием библиотеки mfc  учебное по...
613.программирование в visual с++ с использованием библиотеки mfc учебное по...
 
метод организации репозитория исходного кода
метод организации репозитория исходного кодаметод организации репозитория исходного кода
метод организации репозитория исходного кода
 
Среда разработки Eclipse by Cheburek
Среда разработки Eclipse by CheburekСреда разработки Eclipse by Cheburek
Среда разработки Eclipse by Cheburek
 

More from Anastasia Snegina

птп по ппп 2013 2014
птп по ппп 2013 2014 птп по ппп 2013 2014
птп по ппп 2013 2014 Anastasia Snegina
 
прикл.прогр птп 13 14
прикл.прогр птп 13 14прикл.прогр птп 13 14
прикл.прогр птп 13 14Anastasia Snegina
 
2012 2013 пм спп провидошина
2012 2013  пм спп провидошина2012 2013  пм спп провидошина
2012 2013 пм спп провидошинаAnastasia Snegina
 
2012 2013 пм спп провидошина
2012 2013  пм спп провидошина2012 2013  пм спп провидошина
2012 2013 пм спп провидошинаAnastasia Snegina
 
рп по у пп практике в
рп по у пп практике врп по у пп практике в
рп по у пп практике вAnastasia Snegina
 
рп по пр практике в
рп по пр практике врп по пр практике в
рп по пр практике вAnastasia Snegina
 
рп по у сп практике в
рп по у сп практике врп по у сп практике в
рп по у сп практике вAnastasia Snegina
 
рп по у пп практике вт
рп по у пп практике втрп по у пп практике вт
рп по у пп практике втAnastasia Snegina
 
рп по пр практике вт
рп по пр практике втрп по пр практике вт
рп по пр практике втAnastasia Snegina
 
рп по у сп практике вт
рп по у сп практике втрп по у сп практике вт
рп по у сп практике втAnastasia Snegina
 
рп по у пп практике вт
рп по у пп практике втрп по у пп практике вт
рп по у пп практике втAnastasia Snegina
 
рп по пр практике вт
рп по пр практике втрп по пр практике вт
рп по пр практике втAnastasia Snegina
 
рп по у сп практике вт
рп по у сп практике втрп по у сп практике вт
рп по у сп практике втAnastasia Snegina
 

More from Anastasia Snegina (20)

птп по ппп 2013 2014
птп по ппп 2013 2014 птп по ппп 2013 2014
птп по ппп 2013 2014
 
прикл.прогр птп 13 14
прикл.прогр птп 13 14прикл.прогр птп 13 14
прикл.прогр птп 13 14
 
я.прогр птп
я.прогр птпя.прогр птп
я.прогр птп
 
пп кос вт
пп кос втпп кос вт
пп кос вт
 
пп кос в
пп кос впп кос в
пп кос в
 
пп кос в
пп кос впп кос в
пп кос в
 
2012 2013 пм спп провидошина
2012 2013  пм спп провидошина2012 2013  пм спп провидошина
2012 2013 пм спп провидошина
 
2012 2013 пм спп провидошина
2012 2013  пм спп провидошина2012 2013  пм спп провидошина
2012 2013 пм спп провидошина
 
пп кос вт
пп кос втпп кос вт
пп кос вт
 
рп по у пп практике в
рп по у пп практике врп по у пп практике в
рп по у пп практике в
 
рп по пр практике в
рп по пр практике врп по пр практике в
рп по пр практике в
 
рп по у сп практике в
рп по у сп практике врп по у сп практике в
рп по у сп практике в
 
рп по у пп практике вт
рп по у пп практике втрп по у пп практике вт
рп по у пп практике вт
 
рп по пр практике вт
рп по пр практике втрп по пр практике вт
рп по пр практике вт
 
рп по у сп практике вт
рп по у сп практике втрп по у сп практике вт
рп по у сп практике вт
 
рп по у пп практике вт
рп по у пп практике втрп по у пп практике вт
рп по у пп практике вт
 
рп по пр практике вт
рп по пр практике втрп по пр практике вт
рп по пр практике вт
 
рп по у сп практике вт
рп по у сп практике втрп по у сп практике вт
рп по у сп практике вт
 
лр18
лр18лр18
лр18
 
лр15
лр15лр15
лр15
 

лек11 3

  • 1. Лекция №11 для дисциплин: «Прикладное программирование» и «Языки программирования» 1 Лекция 11 (ч.3) Синтаксис и программные конструкции Visual C 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.
  • 2. Лекция №11 для дисциплин: «Прикладное программирование» и «Языки программирования» 2 Листинг 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 FilesBorlandCBuilder6 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>
  • 3. Лекция №11 для дисциплин: «Прикладное программирование» и «Языки программирования» 3 <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 FilesBorlandCBuilder6BinUnit1.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>
  • 4. Лекция №11 для дисциплин: «Прикладное программирование» и «Языки программирования» 4 #pragma hdrstop USEFORM("С:Program FilesBorlandCBuilder6BinUnit1.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 или откомпилированный
  • 5. Лекция №11 для дисциплин: «Прикладное программирование» и «Языки программирования» 5 файл ресурсов с расширением *.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'
  • 6. Лекция №11 для дисциплин: «Прикладное программирование» и «Языки программирования» 6 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>
  • 7. Лекция №11 для дисциплин: «Прикладное программирование» и «Языки программирования» 7 #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
  • 8. Лекция №11 для дисциплин: «Прикладное программирование» и «Языки программирования» 8 // код #endif По умолчанию в редакторе кода отображается исходный файл формы. Для переключения между исходным файлом формы и заголовочным файлом можно использовать пункт контекстного меню редактора кода Open Source/Header File (комбинация клавиш Ctrl-F6). Необходимо также отметить, что в заголовочном файле также находится внешнее определение указателя на класс формы. extern PACKAGE TForm1 *Form1; Поэтому для использования данной формы из других форм приложения в исходных файлах этих форм необходимо просто подключить заголовочный файл формы с помощью директивы препроцессора #include. Аналогичные действия производятся автоматически при выборе пункта главного меню File| Include Unit Hdr (комбинация клавиш Alt-F11). Ниже приведен пример исходного файла проекта. Листинг 3.5. Заголовочный файл формы #ifndef Unit1H #define Unit1H #include <Classes.hpp> #include <Controls.hpp> #include <StdCtrls.hpp> #include <Forms.hpp> #include <ExtCtrls.hpp> #include <Graphics.hpp> class TForm1 : public TForm {__published: // IDE-managed Components TButton *Button1;
  • 9. Лекция №11 для дисциплин: «Прикладное программирование» и «Языки программирования» 9 TImage *Image1; void __fastcall FormCreate(TObject *Sender); private: // User declarations public: // User declarations __fastcall TForm1(TComponent* Owner);}; extern PACKAGE TForm1 *Form1; #endif Содержимое заголовочного файла может формироваться как автоматически при работе программиста с редактором форм и инспектором объектов, так и самим программистом с клавиатуры. В приведенном примере видно, что на форму были добавлены компоненты TButton и TImage, а в инспекторе объектов был создан обработчик события FormCreate. Для сохранения файлов проекта можно использовать пункт главного меню File | Save Project As. Для сохранения файлов формы можно использовать пункт главного меню File | Save As. При этом можно задать новые имена для файлов проекта и файлов форм. Для сохранения изменений во всех файлах можно использовать пункт главного меню File | Save All (комбинация клавиш Shift-Ctrl-S). Для закрытия проекта можно использовать пункт меню File | Close All. Для открытия проекта можно использовать пункт меню File | Open Project (комбинация клавиш Ctrl- F11). При одновременной разработке нескольких связанных приложений (например, при разработке клиент/серверных систем) можно использовать группу проектов. Для добавления новых и существующих проектов в группу можно использовать пункты главного меню Project | Add New Project и Project | Add Existing Project соответственно. Выбор текущего проекта можно произвести в менеджере проектов, доступного через пункт главного меню View | Project Manager (комбинация клавиш Ctrl-Alt-F11). Файл группы проектов имеет расширение *.bpg и содержит информацию о проектах, входящих в группу. В процессе компиляции создаются некоторые временные файлы. Файлы, расширение которых начинается с символа “~”, являются резервными копиями соответствующих файлов.
  • 10. Лекция №11 для дисциплин: «Прикладное программирование» и «Языки программирования» 10 Файлы с расширением *.obj объектные файлы приложения и форм. Файл с расширением *.tds содержит информацию для отладчика и инкрементного линковщика. Кроме того существуют несколько дополнительных типов файлов, используемых, например, при создании пакетов и библиотек типов. Рассмотрение данных типов файлов выходит за рамки данного учебного пособия. Вывод Проект приложения в среде C++Builder состоит из нескольких файлов, основными из которых являются: главный файл проекта (с расширением .bpr), исходный файл проекта (по умолчанию называется project1.cpp), а также для каждой формы приложения файл формы (расширение .dfm), заголовочный файл (расширение .h) и модуль формы (расширение .cpp). Помимо этого в состав проекта могут входить файлы ресурсов, внешние библиотеки, пакеты. При работе с проектом система создает также некоторые дополнительные файлы, необходимые для сборки приложения.