Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
laboratornye_Delphi.doc
Скачиваний:
16
Добавлен:
17.05.2015
Размер:
2.78 Mб
Скачать

Пример 20. 1. Построить график функции с шагом 0.1 в интервале [-5;5]. Экранная форма программы показана на рис. 20.2. Приведем фрагмент кода программы с обработкой основных событий:

const L:double=-5; // левая граница графика

R:double=5; // правая граница графика

st:double=0.1; // шаг

var

FrmGraf: TFrmGraf;

Implementation

//функция для которой строится график

function y(x:double):double;

begin

y:=abs(x)+1;

end;

//обработка события при нажатии на кнопку «График»

procedure TFrmGraf.BtnGrafClick(Sender: TObject);

var m,i:integer;

x:double;

begin

BtnClear.Enabled:=true;

ChtY.Visible:=true;

ChtY.Title.Text.Add('График функции y:=abs(x)+1');

m:=round(abs(R-L)/st); //количество точек на графике

x:=L; // начальное значение x

for i:=0 to m-1 do begin

ChtY.Series[0].AddXY(x,y(x),'',clTeeColor);

x:=x+st;

end;

BtnGraf.Enabled:=false;

end;

//обработка события при нажатии на кнопку «Очистить»

procedure TFrmGraf.btnClearClick(Sender: TObject);

begin

ChtY.Title.Text.Delete(1);

ChtY.Series[0].Clear;

BtnGraf.Enabled:=true;

end;

//обработка события изменения выбора «Показать/Скрыть легенду»

procedure TFrmGraf.RgrLegClick(Sender: TObject);

begin

if RgrLeg.ItemIndex=0 then

ChtY.Legend.Visible:=true

else ChtY.Legend.Visible:=false;

end;

Рис. 20.2. Экранная форма примера 20.1

Создание библиотеки динамической компоновки (dll)

Библиотека динамической компоновки (библиотека) не является исполняе­мой программой, но содержащийся в ней код может быть вызван из приложе­ния или из другой DLL.

Создание библиотеки начинается выбором компонента DLL Wizard на странице New в хранилище объектов, который вызывается через меню File New Other(рис. 20. 3). Первоначально проект библиотеки состоит из одного файла, который имеет вид

library Project2;

{ Important note about DLL memory management: ShareMem must be the

first unit in your library's USES clause AND your project's (select

Project-View Source) USES clause if your DLL exports any procedures or

functions that pass strings as parameters or function results. This

applies to all strings passed to and from your DLL--even those that

are nested in records and classes. ShareMem is the interface unit to

the BORLNDMM.DLL shared memory manager, which must be deployed along

with your DLL. To avoid using BORLNDMM.DLL, pass string information

using PChar or ShortString parameters. }

uses

SysUtils,

Classes;

{$R *.res}

Begin

end.

Этот проект является заготовкой, к которой необходимо добавить код, для со­держания которого создана эта библиотека.

Ключевое слово library указывает, что это динамическая библиотека, а не ис­полняемый файл, и что при компиляции проекта будет создан файл с расшире­нием DLL, а не ЕХЕ.

Код, располагаемый между операторными скобками begin и end, служит для инициализации библиотеки и автоматически выполняется при ее загрузке. При инициализации библиотеки можно проверить какие-либо условия, задать на­чальные значения переменным и т. п.

Комментарий в проекте библиотеки предупреждает, что если функции библиотеки в качестве параметров или резуль­тата передают строки, то в раздел uses самой библиотеки и вызывающих ее программ и других библиотек должен быть включен модуль ShareMem. Причем этот модуль должен быть первым в списке модулей. Кроме того приложению и библиотеке при пе­редаче строк требуется файл BorlndMM.dll.

Рис. 20.3. Хранилище объектов Delphi с DLL Wizard

Дальнейшее создание библиотеки заключается в следующем

  • в добавлении к проекту функций;

  • в экспортировании их из библиотеки.

Описание функций располагают между секциями подключения модулей и ини­циализации. Функции кодируются обычным способом.

Экспортирование функций заключается в объявлении функции как внешней. Для этого функция указывается в секции exports, которая имеет следующий вид:

exports

<Имя функции> [name <Внешнее имя функции>],

<Имя функции> [name <Внешнее имя функции>];

Имя функции — это имя, заданное при описании функции в проекте библиоте­ки. Внешнее имя представляет собой имя, под которым функция экспортирует­ся и может быть вызвана извне DLL. Указывать внешнее имя не обязательно, в этом случае функция экспортируется под своим именем.

Кроме экспортируемых функций библиотека может включать в себя внутрен­ние (неэкспортируемые) функции, а также глобальные переменные.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]