Общая организация программы в Delphi
Программа, создаваемая в среде Delphi в процессе проектирования приложения, основана на модульном принципе. Головная программа получается предельно простой и короткой. Она состоит из объявления списка используемых модулей и нескольких операторов, создающих объекты для необходимых форм и запускающих приложение на выполнение.
Модульность очень важна для создания надежных и относительно легко модифицируемых и сопровождаемых приложений. Четкое соблюдение принципов модульности в сочетании с принципом скрытия информации позволяет модифицировать любые модули, не затрагивая при этом остальных модулей и головную программу.
Все объекты компонентов размещаются в объектах — формах. Для каждой формы, проектируемой в приложении, Delphi создает отдельный модуль. Именно в модулях и осуществляется программирование задачи. В обработчиках событий объектов — форм и компонентов — размещаются описания алгоритмов, которые в основном сводятся к обработке информации, содержащейся в свойствах одних объектов, и задании по результатам этой обработки свойств других объектов.
9.1. Структура файла головной программы приложения Delphi
В процессе проектирования приложения Delphi автоматически создает код головной программы и отдельных модулей. В модули программист вводит свой код, создавая обработчики различных событий. Но, как правило, не приходится модифицировать головную программу и даже просматривать ее текст. Только в исключительных случаях бывает необходимо что-то изменить в тексте головной программы, сгенерированном Delphi. Головной файл приложения Delphi имеет следующую структуру:
program <имя>;
{Объявления подключаемых модулей, а также объявления локальных для головного файла типов, классов, констант, переменных, описания локальных функций и переменных}
begin
{Операторы тела программы}
end.
В Delphi головной файл обычно не содержит ничего, кроме операторов инициализации приложения, создания форм и запуска приложения. Вся логика программы помещается в файлы модулей.
Типичная головная программа приложения имеет следующий вид:
program Project1;
uses
Forms,
Unitl in 'Unitl.pas' {Forml}, Unit2 in 'Unit2.pas' {Form2};
{$R *.res}
{Здесь вы можете поместить описания констант, переменных, функций, процедур, доступных для использования только в пределах данного файла}
begin
Application.Initialize;
Application.CreateForm(TForml, Forml);
Application.CreateForm(TForm2, Form2);
Application.Run;
end.
Программа начинается с ключевого слова program, после которого указывается имя программы. Оно совпадает с именем файла, в котором был сохранен проект. Это же имя присваивается исполняемому файлу приложения. По умолчанию используется имя Project1.
СОВЕТВсегда сохраняйте проект под осмысленным именем, изменяя тем самым имя проекта, заданное Delphi по умолчанию. Иначе очень скоро вы запутаетесь в программах Projectl, находящихся в различных каталогах.
После заголовка в тексте программы располагается предложение
uses
Forms,
Unitl in 'Unitl.pas' {Forml}. Unit2 in 'Unit2.pas' {Form2}:
В этом предложении перечисляются модули, загружаемые программой. Первый модуль Formsявляется системным, а следующие — модулями разработанных программистом форм. Данный пример показывает, что в проекте были созданы две формы с именами Forml и Form2в модулях с именами Unitl и Unit2. Заключенные в фигурные скобки названия форм — это комментарии.
Предложение в головном файле программы может также содержать после имени модуля ключевое слово in,вслед за которым указывается имя файла, в котором содержится модуль, например:
uses Unitl in 'Unit1.pas'. Unit2 in 'c:\exampes\Unit2.pas':
Ключевое слово in используется в случаях, когда необходимо указать Delphi, где следует искать соответствующие файлы.
ВНИМАНИЕ В предложениях uses, включаемых в модули, использование in не допускается.
Следующая строка текста — {$R *.RES} — представляет собой директиву компилятора, связывающую с исполняемым модулем файлы ресурсов. Она указывает файлы ресурсов (.DFM, .RES), которые должны быть включены в исполняемый модуль или библиотеку. Эти файлы должны быть файлами ресурсов Windows. По умолчанию для файлов ресурсов используется расширение .RES. В процессе компоновки программы или библиотеки файлы, перечисленные в директивах {$R}, копируются в исполняемый модуль.
Первый оператор в теле программы Application.Initialize;инициализирует приложение,
следующие за ним операторы Application.CreateForm(TForm1, Form1);и Application.CreateForm(TForm2, Form2);создают объекты форм Form1и Form2,
последний оператор, Application.Run; начинает выполнение приложения.
Если требуется добавить какой-то текст в головную программу, то следует ввести описания необходимых констант, переменных, функций и процедур в место программы, отмеченное соответствующим комментарием в приведенном ранее тексте. Кроме того, можно добавить или изменить операторы в теле программы, например, произвести настройки при запуске приложения на выполнение (скажем, настроить формы на русский язык) или сделать запрос пользовательского ввода и в зависимости от ответа создавать или не создавать те или иные формы. Например, если требуется, чтобы вторая форма приложения Form2создавалась только в случае, если при запуске приложения в командной строке указана опция Y, то следует заменить приведенный ранее оператор
Application.CreateForm(TForm2, Form2);оператором
If (ParamStr(1) = 'Y')
then Application.CreateForm(TForm2, Form2);
Этот оператор анализирует первый параметр командной строки. Если приложение Projectl запущено командой Projectl Y, то будет создана форма Form2. В остальных случаях этой формы не будет.
ПРИМЕЧАНИЕ Можно добавить в головной файл и другие операторы, функции, процедуры. Однако делать это не рекомендуется, поскольку такие действия противоречат принципу модульности. Все необходимые в начале выполнения процедуры и функции настройки следует помещать в отдельный модуль без формы.
Обратите внимание на то, что все определенные в головном файле приложения константы, переменные, процедуры, функции, типы будут доступны только в пределах этого головного файла и недоступны в модулях.