Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лабы IT / ЛабаDelphi12.doc
Скачиваний:
62
Добавлен:
06.02.2015
Размер:
336.9 Кб
Скачать
  1. Библиотека хранящая объекты

Нужно отметить, что библиотека это довольно универсальная вещь, в которой можно достаточно много чего хранить. В том числе и объекты, в частности саму форму.

Задание 2.1. Создадим библиотеку MyForm.dll, которая будет создавать форму на которой будет пульсировать кнопка SpeedButton1 при её нажатии.

Как и в первом задании с помощью мастера DllWizardсоздайте новый проект файла библиотеки. В новой папке. Сохраните проект под именемMyForm.dpr.

Таким образом, и имя вашей библиотеки в окне редактора кода после слова libraryизменится наMyForm.

Строчные функции мы использовать не будем, поэтому не подключайте модуль ShareMemв проект библиотеки.

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

Просто щелкните на пиктограмме NewFormили выберите последовательноFile–>New–>Form, а затем, когда появится форма, сохраните её модуль под именемUnitForm.pasв той же папке где и ваш проект.

Обратите внимание, что в файле проекта появилась запись

UnitFormin'UnitForm.pas' {Form1}; говорящая о том, что файл модуля формы подключен к библиотеке.

Рис. 6В файле проекта библиотеки подключаем модульUnitForm

содержащий описание формы

Далее переключитесь на форму описываемую UnitForm.pasи скиньте на неё кнопкуSpeedButton1 со значениями свойствWidth= Height = 100 иCaption= ‘PULS’, а такжеTimer1 (рис. 7)

Рис. 7Форма соответствующая модулюUnitForm.pas

С помощью ObjectInspectorустановите свойствоIntervalкомпонентаTimer1 равным 100, а свойствоenabled=False.

В модуле формы в секции publicклассаTForm1 определите переменные

dx,dy:integer;

Затем в обработчике события onCreateнапишите:

dx:=1; dy:=1;

В обработчике щелчка на SpeedButton1 напишите следующее:

Timer1.Enabled:=not(Timer1.Enabled);

if Timer1.Enabled=true then SpeedButton1.Caption:='СТОП'

else SpeedButton1.Caption:='ПУСК'

А после этого, как завершающий этап, в обработчике onTimerнапишите:

if (SpeedButton1.Width<=10) or (SpeedButton1.Width>=150)

then dx:=-dx;

if (SpeedButton1.Height<=10) or (SpeedButton1.Height>=150)

then dy:=-dy;

SpeedButton1.Width:=SpeedButton1.Width+dx;

SpeedButton1.Height:=SpeedButton1.Height+dy;

Form1.Width:=Form1.Width-dx;

Form1.Height:=Form1.Height-dy;

Таким образом, мы описали класс TForm1. Теперь осталось определить, опять же в модулеUnitForm, процедуру которая будет доступна внешнему приложению через библиотеку.

В модуле UnitFormв окне редактора кода, сразу чуть выше перед ключевым словомimplementationопишем прототип экспортируемой процедуры

procedureCreateMyForm(Cvet:TColor);stdcall; а также, здесь же, сразу чуть ниже директивы{$R *.dfm}опишем саму экспортируемую функцию (рис. 8).

Рис. 8Окно редактора кода с описанием прототипа и непосредственно самой экспортируемой процедурыCreateMyForm

Теперь переключитесь на файл библиотечного проекта MyForm.dpr.

Добавьте туда небольшую строчку определяющую: exports CreateMyForm (рис. 9):

Рис. 9Определяем процедуру CreateMyForm как экспортную

Вот и всё. Теперь, как и прежде можете скомпилировать библиотеку нажав Ctrl+F9. Взгляните в папку проекта. Там должен появиться файл“MyForm.dll”.

Закройте проект нажав CloseAll.

Задание 2.2. Далее, как и в задании 1.2. создадим внешнее приложение, вызывающее функцию создания формы и передадим ей в качестве параметра цвет который должна иметь создаваемая форма.

Таким образом, снова создайте новый проект и сохранитесь в той же папке (можете согласиться с именами файлов проекта project1.dprиunit1.pasпо умолчанию), где находится созданная ранее библиотека “MyForm.dll”.

В окне редактора кода модуля проекта unit1.pasподключите используемую библиотеку. Как вам уже известно, сразу после ключевого слова implementation нужно написать следующее:

procedure CreateMyForm(Cvet:TColor); stdcall;

external 'MyForm.dll';

Затем сбросьте на форму одну кнопку Button1, установите значение её свойстваCaptionв “Запустить функцию CreateMyForm(Cvet:TColor) создающую форму из библиотеки MyForm.dll”.

Также скиньте компонент ColorBox1 с палитры Additional. В нём будем выбирать передаваемый цвет.

Рис. 10Окно приложения использующее библиотеку MyForm.dll

А обработчик щелчка на Button1 должен быть следующим:

procedure TForm1.Button1Click(Sender: TObject);

var cvet:TColor;

begin

cvet:=ColorBox1.Selected;//определяем выбранный цвет

CreateMyForm(cvet);//создаём форму с этим цветом

end;

Вот и всё. Можно запускать проект на выполнение. Программа должна работать правильно.

Соседние файлы в папке Лабы IT