Примітка
У нашому випадку файл бібліотеки типів в синтаксисі мови 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.
