Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Разработка многомодульных интегрированных SDI-приложений / 2. Разработка многомодульных приложений.doc
Скачиваний:
35
Добавлен:
28.06.2014
Размер:
141.82 Кб
Скачать

Автономные модули

Можно разрабатывать также и автономные модули, не связанные ни с какой формой. Они дают возможность получить доступ к их содержимому не только из разрабатываемого проекта, но и из других, многократно используя в них уже отлаженный код. Это особенно полезно при работе с функциями. При компиляции любого модуля (в том числе и автономного) создается двоичный объектный файл с расширением .obj.

Для создания автономного модуля можно воспользоваться меню File | New Unitили диалоговым окномNew Items(из менюFile | New… выбрать вкладкуNewа на ней –Unit). Созданный модуль будет открыт в редакторе кода. Если командуNew Unitиспользовать в открытом проекте, новый модуль будет зарегистрирован в файле проекта

Например, для нашей задачи можно создать такой модуль (Unit2) и разместить в нем вычислительные функции:

#pragma hdrstop

#include "Unit2.h"

extern int n, m;

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

#pragma package(smart_init)

//Функция вычисления среднего арифметического каждой строки

void sr_ar_stroka(float x[6][6], float y[6])

{ int i, j;

for (i=0; i<n; i++)

{ y[i]=0;

for (j=0; j<m; j++)

y[i]=y[i]+x[i][j];

y[i] = y[i]/n;

}

return ;

}

//Ниже должны быть расположены остальные функции

// …

Часто необходимо, чтобы модуль ссылался на код, содержащийся в другом модуле. Тогда требуется включить файл заголовка второго модуля в первый. Для этого модуль открывают в редакторе кода и применяют команду File | Include Unit Hdr…, также как ранее это делалось для вспомогательных форм.

В нашем примере оператор #include “Unit2.h”следует добавить к модулю главной формы приложения (Unit1). Также вUnit1.cppдолжен быть добавлен оператор описания и инициализации переменныхnиm, которые видны в обоих модулях и определяют размерность двумерного массива:extern int n=6, m=6;

Стандартные диалоговые окна

Windows располагает целым набором стандартных диалогов, которые могут использоваться любым приложением. В распоряжение программиста среда предоставляет компоненты, соответствующие этим диалогам (вкладка Dialogs). Эти компоненты относятся к невизуальным, так как они становятся видны только при выполнении программы.

Применить в приложении стандартное диалоговое окно можно так: поместите в форму компонент, соответствующий диалоговому окну. На форме появится только значок объекта, содержащего свойства диалога. Само окно будет создано только при работе программы в момент вызова диалога с помощью метода Execute().

На вкладке Dialogsвсего восемь компонентов: шесть из них модальные, а два –FindDialogиReplaceDialog– нет. МетодExecute()для этих диалогов создает окно и сразу же возвращает управление программе. Окно продолжает существовать, пока его не закроет пользователь. При необходимости произвести поиск или замену в тексте, вызываются обработчики событий данных компонентов.

Для модального выполнения стандартного диалога в классе TCommonDialogпредназначен методbool Execute(); (возвращает значениеtrue, если пользователь ввел имя файла, иfalse, если он отказался от ввода).

Вызов метода нужно поместить в обработчике события OnClickсоответствующей команды меню. Например, в менюСервиснашего примера можно настроить цвет фона компонентаStringGrid1. Тогда в обработчик командыСервис – Фонможно поместить следующие операторы:

TColor color;

if (ColorDialog1->Execute())

{

color=ColorDialog1->Color;

StringGrid1->Color=color;

}

Конечно, предварительно на форму необходимо было поместить невизуальный компонента ColorDialog, а при необходимости выбора характеристик шрифта еще иFontDialog. В обработчике командыСервис - Шрифтразместить код:

if (FontDialog1->Execute())

StringGrid1->Font->Assign(FontDialog1->Font);

В нашем примере также используются диалоги открытия и сохранения файлов (компоненты OpenDialogиSaveDialog). СвойствоFilter- список названий и масок шаблонов для выбора файлов можно в данном случае установить так:

Текстовые файлы (*.txt)|*.txt)

Все файлы (*.*)|*.*),

FileName- строка с полным именем выбранного пользователем файла (перед отображением диалога значение этого свойства используется для инициализации текстового редактора с именем файла).