Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Прикл_программир_ч1.doc
Скачиваний:
11
Добавлен:
18.09.2019
Размер:
11.05 Mб
Скачать

8.1 Структура головного файла проекта

Головной файл проекта генерируется автоматически и содержит функцию WinMain . текст которая предназначена для выполнения подготовительных операций , необходимых для начала работы приложения. Для просмотра кода исходного файла проекта, необходимо в главном меню Project выбрать пункт View Source. Типичный исходный файл проекта имеет следующий вид:

// директивы препроцессора

#include <vcl.h>

#pragma hdrstop

USERES("Project1.res");

USEFORM("Unit1.cpp", Form1);

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

// функция Main

WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int)

{

try

{

Application->Initialize();

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

Application->Run();

}

catch (Exception &exception)

{

Application->ShowException(&exception);

}

return 0;

}

Первые строки файла начинаются с символа # , который указывает на директивы препроцессора . Эти директивы подключают в данный файл тексты, указанных в них файлов. Ниже в файле размещаются макросы USERES и USEFORM, которые используются для подключения к проекту файлов форм, модулей, ресурсов и др. Далее расположена главная функция программы – WinMain( ).Ее первым параметром является дескриптор данного экземпляра приложения. Дескриптор – это уникальный указатель , позволяющий Widows разбираться во множестве открытых окон различных приложений. Второй параметр WinMain( ) – дескриптор предыдущего экземпляра этого приложения. Третий указатель на строку, содержащую , содержащую параметры передаваемые в программу через командную строку. Последний параметр определяет окно приложения. Все эти параметры функции WinMain( ) используются крайне редко. После заголовка функции следует ее тело , заключенное в фигурные скобки. Первый оператор Application->Initialize();- инициализирует объекты компонентов данного приложения , а последующие создают объекты соответствующих форм. Формы создаются в той последовательности , в которой следуют эти операторы, при этом первая из создаваемых форм считается главной. Последний оператор Application->Run(); начинает выполнять программы . После этого оператора программа ждет соответствующих событий , которые и управляют ее ходом. Перечисленные операторы тела функции заключены в блок try, после которого следует блок catch .Эта структура связана с обработкой исключений( аварийных ситуаций). При аварийной ситуации выполняются операторы , расположенные в блоке catch.

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

Каждый модуль состоит из двух файлов: заголовочного , содержащего описание класса формы и файла реализации. На рис.8.1 и 8.2 показаны тексты заголовочного файла и файла реализации для модуля формы , на которой размещены метка(Labele1 ) и кнопка (Button1).

//Заголовочный файл

#ifndef Unit1H

#define Unit1H

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

#include <Classes.hpp>

#include <Controls.hpp>

#include <StdCtrls.hpp>

#include <Forms.hpp>

//Сюда могут помещаться дополнительные директивы препроцессора , не включаемые в файл автоматически

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

//Объявление класса форм TForm1

class TForm1 : public TForm

{

__published: // IDE-managed Components

//Размещенные на форме компоненты

TLabel *Label1;

TButton *Button1;

void __fastcall Button1Click(TObject *Sender);

private: // User declarations

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

public: // User declarations

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

__fastcall TForm1(TComponent* Owner);

};

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

extern PACKAGE TForm1 *Form1;

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

// Сюда могут помещаться объявления типов переменных, функций, которые не //включаются в класс формы. Доступ к ним возможен только при соблюдении некоторых //дополнительных условий.

#endif

Рис. 8.1 Текст заголовочного файла

//Файл реализации

#include <vcl.h>

#pragma hdrstop

#include "Unit1.h"

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

#pragma package(smart_init)

#pragma resource "*.dfm"

//Сюда могут помещаться дополнительные директивы препроцессора , не включаемые в файл автоматически

TForm1 *Form1; //Объявление объекта формы TForm1

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

//Вызов конструктора формы формы TForm1

__fastcall TForm1::TForm1(TComponent* Owner)

: TForm(Owner)

{

// Сюда можно поместить операторы,которые должны выполняться при создании //формы

}

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

// Сюда могут помещаться объявления типов переменных, доступ к которым из других //модулей возможен только при соблюдении дополнительных условий. Тут же должны //размещаться реализации всех функций ,объявленных в заголовочном файле.

void __fastcall TForm1::Button1Click(TObject *Sender)

{

Close;

}

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

Рис. 8.2 Текст файла реализации модуля формы

Заголовочный файл начинается с директив препроцессора , которые включаются в него автоматически. В редких случаях разработчик должен добавлять некоторые директивы вручную. После директив следует описание класса формы(TForm).Класс содержит три раздела: открытый раздел (__published),содержащий объявления размещенных на форме компонентов , закрытый раздел класса (private) и открытый раздел класса (public). Все что имеется в разделе published, включается в него автоматически в процессе проектирования формы. А в разделы private и public разработчик может добавлять свои объявления типов переменных и функций. То , что объявлено в разделе public будет доступно для других классов, а объявления в разделе private доступно только в пределах данного модуля.