Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Тотосько 31-45.doc
Скачиваний:
1
Добавлен:
01.05.2025
Размер:
678.4 Кб
Скачать

Примітка

У нашому випадку файл бібліотеки типів в синтаксисі мови Object Pascal створюється при розробці COM-об'єкта. У разі використання будь-яких інших СОМ-серверів (які можуть бути написані на будь-якій алгоритмічній мові) такого файлу може не бути. Однак файл бібліотеки типів в синтаксисі мови Object Pascal може бути згенерований Delphi. Для цього використовується команда меню Project ► Import Type Library. При виборі цієї команди відкривається вікно діалогу, що містить список всіх зареєстрованих в системі серверів ActiveX. Для генерації файлу бібліотеки типів слід вибрати в цьому списку необхідний сервер і клацнути на кнопці Install.

Щоб викликати методи COM-об'єкта в додатку, слід оголосити змінні, які будуть покажчиками на відповідні інтерфейси об'єкта. Оголошення таких змінних найзручніше помістити в розділ private або public класу форми:

TForml = class(TForm)

private

Stat: ITestCom;

MinMax : IMinMax: public end:

При завантаженні нашого додатка необхідно створити екземпляр СОМ-об'єкту і отримати посилання на його інтерфейс. Ці дії краще всього виконати з допомогою методу-обробника події OnShow головної форми додатка. У цьому випадку буде гарантія того, що до моменту відображення головного вікна додаток на екрані екземпляр СОМ-об'єкту вже буде створений.

Для створення екземпляра СОМ-об'єкту використовується метод Create складеного класу об'єкта. Даний метод повертає покажчик на основний інтерфейс СОМ-об'єкту (в нашому випадку це інтерфейс ITestCom). Для отримання покажчика на який-небудь інший інтерфейс слід скористатися методом Querylnterface основного інтерфейсу. Код обробника події OnShow, що створює екземпляр СОМ-об'єкту і одержує покажчики на його інтерфейси, для нашого прикладу має наступний вигляд:

procedure TForml.FormShow (Sender: TObject); begin

Stat: = CoTestCom.Create:

Stat.QueryInterface (IMinMax, Mi nMax): end;

Залишилося тільки поставити код методів-обробників події OnClick кнопок, при клацанні на яких викликаються методи інтерфейсів. Виклик методів інтерфейсів СОМ-об'єкту нічим не відрізняється від виклику методів звичайного об'єкта Delphi. Наведемо повний лістинг головного модуля клієнтського додатка:

unit ClientUnit;

interface

uses

Windows, Messages. SysUtils. Classes. Graphics.

Controls. Forms. Dialogs, TestComServer_TLB.

StdCtrls. ExtCtrls;

type

TForml = class (TForm)

ListBoxl: TListBox;

Panel 1: TPanel:

GroupBoxl: TGroupBox;

Buttonl: TButton:

Label 1: TLabel:

Label2: TLabel:

Label3: TLabel;

Label4: TLabel;

GroupBox2: TGroupBox;

Label5: TLabel;

Label6: TLabel;

Label7: TLabel;

Label8; TLabel;

Button2: TButton:

procedure FormShow (Sender: TObject);

procedure Button1С1ick (Sender: TObject): procedure Button2Click (Sender: TObject): private

// Оголошуємо змінні - покажчики на інтерфейси

Stat: ITestCom:

MinMax: IMinMax; public

{Public declarations} end:

var

Forml: TForml: implementation {$ R * .0 FH}

procedure TForml.FormShow (Sender: TObject);

begin

// Створюємо екземпляр COM-об'єкта і отримуємо покажчик

// на інтерфейс I TestCom

Stat: = СоТestCom.Create;

// Отримуємо покажчик на інтерфейс IMinMax

Stat.QueryInterface (IMi nMax.Mi ​​nMax);

end:

procedure TForml.ButtonlClick (Sender: TObject);

var

V: OleVariant; i: Integer; begin

// Створюємо варіантний масив

V; = varArrayCreate ([0.

L i stBoxl.Items.Count-1]. VarS i ng1e);

// Заповнюємо створений масив значеннями із списку

for i: = 0 to Li stBoxl.Items.Count-1 do

V [i]: = StrToFloat (ListBoxl.Items [i]):

// Викликаємо методи інтерфейсу ITestCom і виводимо

/ / результати на форму

Label 3.Caption: = F1oatToStrF (Stat.Avg (V), ffGeneral, 4.2);

Label 4.Capti on: = F1oatToStrF (Stat.Vari ance (V),

ffGeneral, 2.2);

end;

procedure TForml.Button2Click (Sender: TObject);

var

V: OleVariant; i: Integer;

begin

// Створюємо варіантний масив

V: = varArrayCreate ([0.

ListBoxl.Items.Count-1]. VarSingle);

// Заповнюємо масив значеннями із списку ListBoxl

for i: = 0 to ListBoxl.Items.Count-1 do

V [i]: = StrToFloat (L i stBoxl.Items [i]):

// Викликаємо методи інтерфейсу IMinMax і виводимо

/ / Результати на форму

Label 7.Capti on: = F1oatToStrF (Mi nMax.Mi ​​n (V).

ffGeneral, 4,2):

Label 8.Capti on: = F1oatToStrF (Mi nMax.Max (V).

ffGeneral.2.2);

end;

end.

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