Подключение к Компас.
Предисловие: В тексте используются примеры работающие в Комапас V9 и Delphi 7.
Существует 2 способа работы с Компас:
1. Используя библиотеки .tlb
2. Используя Variant.
Второй способ более гибок, но ошибку в коде иногда можно определить только после запуска программы.
Выбор того или иного способа лежит за вами.
Рассмотрим оба способа.
1. Используя библиотеки .tlb.
Приведем пример кода.
…
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs,StdCtrls,ComObj, ksConstTLB, ksTlb;
…
procedure TForm1.Button1Click(Sender: TObject);
var
kompas:kompasobject;
n:integer;
begin
kompas:=KompasObject(GetActiveOleObject(‘Kompas.Application.5′));
n:=0;
n:=kompas.ksGetDocumentType(0);
case n of
1:button1.Caption:=’2D-чертеж’;
2:button1.Caption:=’Текстовый документ’;
3:button1.Caption:=’2D-фрагмент’;
4:button1.Caption:=’Спецификация’;
5:button1.Caption:=’3D’;
end;
end;
Первое что мы сделали — это подключили библиотеки ksConstTLB (основная библиотека) и ksTLB (библиотека констант), а
тaкже ComObj.
Оболочка Компаса имеет тип Kompasobject;
Модель, Сборка — ksdocument3d — 5;
Чертеж, Фрагмент — ksdocument2D — 1,3;
Текстовый документ — ksdocumentTXT — 2;
Спецификация — ksspcdocument — 4.
Подключение к Компас осуществляется функцией KompasObject(GetActiveOleObject(‘Kompas.Application.5’));.
2. Используя Variant.
Приведем пример кода.
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs,StdCtrls,comobj;
…
procedure TForm1.Button1Click(Sender: TObject);
var
kompas:variant;
n:integer;
begin
kompas:=GetActiveOleObject(‘Kompas.Application.5′);
n:=0;
n:=kompas.ksGetDocumentType(0);
case n of
1:button1.Caption:=’2D-чертеж’;
2:button1.Caption:=’Текстовый документ’;
3:button1.Caption:=’2D-фрагмент’;
4:button1.Caption:=’Спецификация’;
5:button1.Caption:=’3D’;
end;
end;
Первое что мы сделали — это подключили библиотеку ComObj.
Здесь все указатели имеют тип Variant;
Подключение к Компас осуществляется функцией KompasObject(GetActiveOleObject(‘Kompas.Application.5’));.
Далее все точно также, только тип указывать не надо.
В данном примере различия не очень видны, но они будут существенны при применении более сложных построений и
вычислений.
Желаем приятной работы.