Підключення до компаса з DELPHI

Для того щоб працювати з компасом нам потрібно спочатку якось до нього підключитися

Сама система КОМПАС надає інтерфейс KompasObject Це ключовий інтерфейс системи, з якого можуть бути отримані всі інші Отримати цей інтерфейс можна за допомогою функції CreateOleObject, описаної в модулі ComObj Ось прототип цієї функції:

function CreateOleObject(const ClassName: string): IDispatch

У неї всього один параметр – строкове імя класу обєкта Для використання системи КОМПАС з інтерфейсом версії 5 в якості такого рядка потрібно вказати KompasApplication5.

У разі успіху дана функція поверне нам інтерфейс, з яким ми зможемо працювати При цьому в списку процесів зявиться процес

«Kompasexe»

Якщо ж вона не змогла успішно завершитися з якоїсь причини (наприклад, в системі не встановлено додаток КОМПАС), то вона згенерує виключення класу EOleSysError

Нижче наводиться фрагмент лістингу програми, що демонструє підключення до системи КОМПАС:

uses

/ / Модулі, необхідні нам для роботи

ksTLB, ComObj

………………………

var

/ / Змінна – інтерфейс системи КОМПАС

kompas: KompasObject

…………………………

begin

try

/ / Намагаємося підключитися до компаса

kompas:=KompasObject(CreateOleObject(‘KompasApplication5’))

except

/ / Помилка зєднання із компасів

…………………………

Тут ми виконуємо перетворення типів Справа в тому, що функція CreateOleObject повертає значення типу IDispatch, а ми перетворюємо його до типу KompasObject, який нам і потрібен

По ідеї після отримання інтерфейсу KompasObject на екрані має зявитися вікно компаса, але воно не зявляється Чому Справа в тому, що воно невидимо Ні, серйозно, невидимо Для того щоб зробити його

видимим, потрібно властивості Visible інтерфейсу KompasObject присвоїть значення true У підсумку, остаточний код підключення до компаса буде виглядати так (обробка помилок опущена, але вона мається на увазі):

kompas:=KompasObject(CreateOleObject(‘KompasApplication5’)) kompasVisible:=true

Тепер ви точно повинні побачити вікно додатка КОМПАС (якщо звичайно все правильно зробили) Йдемо далі

Що відбудеться, якщо на момент виклику функції CreateOleObject у користувача вже буде запущений один або кілька примірників додатка КОМПАС Буде створено ще один екземпляр цього додатка

Якщо ви цього не хочете, тобто, якщо ви хочете отримати інтерфейс вже запущеного екземпляра додатку КОМПАС, тоді замість функції CreateOleObject вам потрібно використовувати функцію GetActiveOleObject з того ж модуля Ось її прототип:

function GetActiveOleObject(const ClassName: string): IDispatch

Як бачите, вона має точно такий же прототип В якості єдиного параметра вона очікує отримати строкове імя класу обєкта

У випадку помилки (наприклад, на момент її виклику не запущене жодного примірника додатка КОМПАС) вона генерує виняток з класом EOleSysError

Код підключення до вже запущеного екземпляру додатки КОМПАС може виглядати так:

kompas:=KompasObject(GetActiveOleObject(‘KompasApplication5’)) kompasVisible:=true

«А навіщо тут потрібно встановлювати видимість» – Напевно питаєте ви Тут установка видимості виконує іншу задачу: зробити активним той екземпляр додатку КОМПАС, до якого ми підключилися

Добре, ми розібралися з тим, як запускати КОМПАС і підключатися до нього Тепер поговоримо про те, як коректно завершити його роботу

В принципі ви можете цього і не робити Дійсно, в тому, що після завершення роботи вашої програми, система КОМПАС продовжить свою роботу, особисто я не бачу нічого поганого (хоча все залежить від розвязуваної задачі) Втім, все це лірика, повернемося на землю

Для завершення роботи системи КОМПАС у інтерфейсу KompasObject є спеціальний метод Quit () Якщо в даному екземплярі додатки був відкритий один або декілька документів, то перед закриттям користувачеві буде видано повідомлення з пропозицією зберегти зміни Параметрів, як і повертаються значень у даного методу немає Начебто все просто

Тоді таке питання: «що станеться, якщо користувач закриє додаток КОМПАС до того, як ми викличемо метод Quit» У цьому випадку спроба виклику даного методу завершиться помилкою з уже знайомим нам класом EOleSysError Тому будьте уважними

У інтерфейсу KompasObject є чудовий метод GetParamStruct, з яким ми не раз зіткнемося надалі Даний метод повертає інтерфейс параметрів обєктів потрібного типу За допомогою нього можуть бути отримані інтерфейси, що описують параметри документа, штрихування, позначення бази та багато іншого Ось прототип цього методу:

GetParamStruct(structType: Smallint): IDispatch

В якості єдиного параметра даний метод приймає тип обєкта, інтерфейс параметрів якого ми хочемо отримати Тип виражається у вигляді цілого числа Допустимі типи представлені у вигляді констант в відповідному модулі

У випадку помилки (якщо, наприклад, вказано помилковий тип обєкта), даний метод повертає значення nil

Так як метод GetParamStruct повертає значення IDispatch, ми будемо змушені щоразу вручну преобразовивать1 тип інтерфейсу точно так само, як це робили при підключенні до компаса

Досить часто програмі необхідно знати, з компасом якої версії вона зараз працює Для визначення цього може бути використаний метод ksGetSystemVersion інтерфейсу KompasObject Нижче представлений прототип цього методу

ksGetSystemVersion(

var iMajor: Integer  / / Старше слово версії

var iMinor: Integer  / / Молодше слово версії

var iRelease: Integer / / Номер випуску всередині однієї версії

var iBuild: Integer   / / Номер складання всередині одного випуску

): Integer

У разі успіху даний метод повертає значення 1

Нижче представлений ключовий фрагмент вихідного тексту програми, яка демонструє використання цього методу

1 Взагалі кажучи явне перетворення типів ми змушені будемо робити при отриманні будь-якого інтерфейсу системи КОМПАС

var

kompas: KompasObject Major,Minor,Release,Build: integer str: string

begin

/ / Підключаємося до компаса

kompas:=KompasObject(CreateOleObject(KompasApplication5))

/ / Отримуємо версію компаса

kompasksGetSystemVersion(Major,Minor,Release,Build)

/ / Завершуємо роботу компаса (він більше не потрібний) kompasQuit() str:=IntToStr(Major)+.’+IntToStr(Minor)

+ Release + IntToStr(Release)

+ Build  + IntToStr(Build) ShowMessage(str)

end

На малюнку нижче показаний приклад виведення цієї програми для КОМПАС 8

У більшості випадків достатньо знати старше слово версії (iMajor)

Джерело: Норсеев Сергій, «розробка програм під КОМПАС У DELPHI»

Схожі статті:


Сподобалася стаття? Ви можете залишити відгук або підписатися на RSS , щоб автоматично отримувати інформацію про нові статтях.

Коментарів поки що немає.

Ваш отзыв

Поділ на параграфи відбувається автоматично, адреса електронної пошти ніколи не буде опублікований, допустимий HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

*

*