Архитектура Аудит Военная наука Иностранные языки Медицина Металлургия Метрология
Образование Политология Производство Психология Стандартизация Технологии


Управление Файлами проекта Delphi



+ Проект это совокупность исходных файлов для

всего приложения в целом.

Окно менеджера проектов Delphi позволяет вам управ­лять выбором файлов исходных модулей и форм, исполь­зуемых в вашем проекте. Можно представить себе проект как объект самого высокого уровня в вашем приложении, состоящий из более мелких объектов, таких как формы и объекты-файлы с исходным текстом. Конечно, приложе­ние может использовать только файлы форм и модулей, однако это представление позволит вам перейти к разра­ботке приложений более крупного масштаба.


 




Чтобы лучше понять, что такое проект Delphi, вызови­те менеджер проектов, выбрав опцию Project Manager. Менеджер проектов содержит список различных файлов, входящих в проект Delphi. Существует три типа таких файлов.

1. Единственный проектный файл, содержащий глав­ную программную секцию, которая управляет приложе­ниями Windows, созданными в Delphi. Этот файл имеет расширение.DPR. Доступ к нему может быть осуществ­лен с помощью команды Project Source. Проектный файл не является ни формой, ни модулем, это файл общего на­значения, который запускается в момент загрузки ваше­го приложения.

2. Один или несколько файлов форм (с соответству­ющими модулями). Эти файлы содержат информацию о том, как осуществляется управление формами. Файлы форм обычно имеют расширение.DPM. В приложении Delphi имеется, по крайней мере, одна форма.

3. Ноль или более файлов с библиотечными модуля­ми на языке Object Pascal. Это файлы с расширением.PAS, которые содержат библиотеки вспомогательных подпрограмм и подпрограмм поддержки, которые вызы­ваются другими частями приложения (другие модули с кодом, присоединенные к формам или управляющим мето­дам). Вам требуется, по крайней мере, один библиотечный модуль для получения кода, осуществляющего функции управления в главной форме. Для больших приложений характерно наличие многих библиотек. Библиотечные мо­дули содержат объявления классов, которые поддержива­ют визуальные формы и осуществляют управление. Эти модули содержат все необходимое для реализации проце­дур обработчиков событий, придающих формам динамику.

Процедуры и функции

Помимо объектной модели, визуальная среда Delphi обеспечивает вас моделью управления событиями; бытий­ная модель позволяет вам соединять программу и различ­ные процессы с компонентами и формами в соответствии с порядком возбуждения конкретных событий. Процесс разработки с использованием этих двух моделей очень скор


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

Имеется несколько способов сделать процедуру или
функцию доступной внутри главного программного моду­
ля. Самый простой способ — это определить заголовок
процедуры и тело программы в начале раздела реализа­
ции блока. Так как они размещены в начале, компилято­
ру становится известно об их существовании до того, как
они будут вызваны из какой-либо части программы. Рас­
смотрим радующий раздел реализации: ,
implementation

procedure MyProc;

begin

MessageDIg ('Yes', mtWaming, [mbOk], 0);

end;

procedure Tforml.Button 1click(Sender: TObjact);

begin

MyProc;

end; end.

В этом примере код для события OnClick от стандарт­ной кнопки вызывает процедуру MyProc. Компилятор не выдаст предупреждения, так как он уже миновал опера­тор MyProc в начале раздела реализации.

Второй способ сделать вашу процедуру доступной — это поместить ее в качестве локальной процедуры внутри процедуры обработчика события OnClick: implementation

procedure TForml.ButtonlCllcMSender; TObject);

procedure MyProc;

begin

MessageDIg ('Yes', mtWarning, [mbOk], 0);


 




end; begin

MyProc; end; end.

Если же код программы примет следующий вид: implementation

procedure TForml.ButtonlCllcMSender; TObject); begin

MyProc; end;

procedure MyProc; begin

MessageDIg ('Yes', mtWarning, [mbOk], 0); end; end.

...то компилятор выдаст предупреждение, потому что он не знает о существовании MyProc в момент обращения к ней из обработчика события. Эта проблема может быть преодолена путем помещения объявления процедуры в начале раздела реализации с последующим ключевым словом forward. Implementation

procedure MyProc; forward;

procedure TForml.ButtonlCllcMSender; TObject);

begin

MyProc; end;

procedure MyProc; begin

MessageDIg ('Yes', mtWarning, {mbOk], 0); end; end.

Заголовок процедуры объявлен, при этом ее имя и при­нимаемые пароли видимы из любой части программы, рас­положенной ниже заголовка. Изменение состоит в том, что ключевое слово forward сообщает обращающейся про­грамме, что исполняемый код процедуры следует искать дальше.

Имеется еще один способ сделать эту процедуру до­ступной в вашем модуле. Как вы знаете, все, объявленное


только в разделе реализации модуля, является доступным лишь в пределах этого модуля. Заметьте, что в предыду­щих примерах не используется раздел интерфейса моду­ля. Процедура MyProc, таким образом, является локаль­ной для модуля. Если модуль предполагается поместить в uses другого модуля, то MyProc будет недоступной, что приводит нас к третьему методу включения процедуры в модуль: Interface

procedure Tforml.Button 1Click(Sender: TObject);

procedure MyProc;

Implementation

procedure Tforml.Button 1Click(Sender: TObject);

begin MyProc;

end;

procedure MyProc;

begin

MessageDIg ('Yes', mtWarning, [mbOk], 0);

end; end.

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

Расширения языка PascaI

Рассмотрим дополнения к языку Pascal, сделанные для Delphi. Некоторые из этих дополнений расширяют ядро языка Pascal, в то время как другие намного упрощают собственно программирование в Delphi. 1. Оператор Case.

Delphi обеспечивает оптимизацию оператора Case пу­тем внесения двух изменений в работу этого оператора: * диапазоны в операторе Case не должны перекрывать­ся. Например, отныне недопустимым является опера­тор Case вида: Case MyChar of

'А', Т, 'О', 'U', 'В': Writeln ('Гласная'); 'А'..' Z': Writeln ('Прописная'); End;


 




• упорядочение констант в операторе Case в соответствии с порядком сортировки используемого типа сверху вниз (последовательно слева направо) позволяет компиля­тору оптимизировать выполнение оператора Case в виде перехода вместо того, чтобы вычислять каждый раз сме­щение. Вот пример оператора Case, обеспечивающего набор оптимизированных переходов: Case MyChar of 'О'..'9': Writeln ('Цифра'); 'А'..' Z': Writeln ('Прописная'); -'а'..' х': Writeln ('Строчная'); Else Writeln ('Другие символы'); End;

2. Открытые массивы.

Borland Pascal 7.0 ввел открытые массивы, позволяю­щие вам разрабатывать процедуры общего назначения для работы со статическими массивами переменого размера. Например, вы можете объявить функцию CalcMean() следующим образом:

Function CalcMaan(X: Array of Real): Real; Параметр х является открытым массивом базового типа Real. Можно использовать функцию CalcMean() для об­работки массивов различного размера, как показано в следующем фрагменте программы: Type ArraylO =" Array[1..10] of Real; Array20 = Array[1..20] of Real; Var X1: Array10; X2: Array20;

Function CalcMean (X: Array of Real): Real; Begin

(определяющие операторы); End; Begin

GatData(xl); GetData(x2);

Writeln ('Среднее значение массива XI = ', CalcMean (XI)); 1

Writeln ('Среднее значение массива Х2 = ', CalcMean (Х2)); End.


Delphi делает параметры типа открытых массивов еще более полезными, разрешая построить массив и передать его в качестве параметра. Для этого надо заключить в квадратные скобки разделенный запятыми список значе­ний элементов массива. Вот фрагмент программы, исполь­зующей функцию Са1сМеап() вариантом создания откры­тых массивов:

Function CalcMean (X: Array of Real): Real;

Begin

(операторы, определяющие функцию);

End;

Begin

Writeln ('Среднее значение массива 1 = ', CalcMean

([1.2, 3.4, 5.6, 7.8]); Writeln('CpeflHee значение массива 2 = ', CalcMean ([55, 67.6, 41.2, 48.4]);

End.

3. Переменная Result в функции.

Delphi усовершенствует программирование функций
путем автоматического объявления локальной перемен­
ной Result в каждой из них. Эта переменная имеет тот же
самый тип, что и тип результата функции. Переменная
Result является синонимом имени функции. Присваива­
ние значения переменной Result по действию аналогично
присвоению значения функции. В чем же преимущество
пользования переменной Result? Ответ состоит в том, что
вы можете использовать локальную переменную Result
для получения результата функции, не прекращая рекур­
сивных вызовов той же самой функции. Вот пример двух
эквивалентных форм одной и той же функции:
Function Cube(X: Real): Real; Function Cube(X: Real): Real;

Begin Begin

Cube: =X*X*X; Result: =X*X*X;

End; End;

Задание. Попробуйте создать проект для расчета кор­ней квадратного уравнения.

Editl будет использован для ввода коэффициента А, Edit2 — коэффициента В, Edit3 — коэффициента С.

Создайте две кнопки: «Найти корни» и «Выход».


 




Коды кнопок

«Найти корни»:

procedure TForm1.Button1Click(Sender: TObject);

vard, a, b, c, x1, x2: real;

begin

a: =StrToFloat(form1.Editl.Text);

b: =StrToFloat(form1.Edit2.Text);

c: =StrToFloat(form1.Edit3.Text);

d: =sqr(b)-4*a*c;

if d< 0 then

begin

MessageDlg('BHMMaHne! Нет действительных корней! ', mtlnformation, [mbOk], 0); form1.Label8.Caption: ='; form1.Label9.Caption: ='; end;

if d=0 then begin

MessageDlgfOflHH действительный корень! ', mtlnformation, [mbOk], 0); x1: =(-b)/(2*a); x2: =x1;

forrnl.1_аЬе18.Сарйоп: ='Первый корень х1 =' +FloatToStr(x1); form1.Label9.Cap|ion: ='BTopon корень x2 =' +FloatToStr(x2); end;

if d> 0 then begin

MessageDlgfflBa действительных корня! ', mtlnformation, [mbOk], 0);

x1: =((-b)+sqrt(d))/(2*a); x2: =((-b)-sqrt(d))/(2*a);

form! 1аЬе18.Сарйоп: ='Первый корень x1 =' +FloatToStr(x1); forrnl.1_аЬе19.Сар1юп: ='Второй кореньх2 =' +FloatToStr(x2); end; end;

«Выход»:

procedure TForm1.FormActivate(Sender: TObject); begin

forrnl.Editl.SetFocus; end;


Сохраните форму и проект (File / Save all) и выполните ваш проект (Run / Run)


Поделиться:



Популярное:

Последнее изменение этой страницы: 2016-06-04; Просмотров: 951; Нарушение авторского права страницы


lektsia.com 2007 - 2024 год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! (0.042 с.)
Главная | Случайная страница | Обратная связь