
Автономные модули
Можно разрабатывать также и автономные модули, не связанные ни с какой формой. Они дают возможность получить доступ к их содержимому не только из разрабатываемого проекта, но и из других, многократно используя в них уже отлаженный код. Это особенно полезно при работе с функциями. При компиляции любого модуля (в том числе и автономного) создается двоичный объектный файл с расширением .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- строка с полным именем выбранного пользователем файла (перед отображением диалога значение этого свойства используется для инициализации текстового редактора с именем файла).