Как использовать Базовый объект КОМПАС API IKompasAPIObject из KompasAPI7_TLB???

Автор NikOpoL, 22.07.09, 17:31:48

« назад - далее »

0 Пользователи и 1 гость просматривают эту тему.

NikOpoL

Ситуация следующая:
На панель формы необходимо вывести рабочую область окна Компас с открытием определенного документа с компасовским функционалом (управление мышью, увеличтить уменьшить переместить, повернуть, а на будущее коекакие панели инструментов).
Варианты с OLEContainer не подходять сразу (не подгружается функционал).

Примерный код:

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, KompasAPI7_TLB, ComObj;

type
  TForm1 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    Button3: TButton;
    Button4: TButton;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
    procedure Button4Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation
var

  IKompasApi_:IKompasAPIObject;
  IKompas:IApplication;

{$R *.dfm}

procedure TForm1.Button3Click(Sender: TObject);
begin
  IKompasApi_:=IKompasAPIObject( CreateOleObject('KOMPAS.Application.7'));
  IKompas:=IKompasApi_.Application;
  end;

end.

В дереве процессов стартует процесс Kompas.exe.
А Delphi выдает сообщение "First chance exception at $7C812AEB. Exception class EAccessViolation with message 'Access violation at address 771211E0 in module 'oleaut32.dll'. Write of address 03056DC9'. Process Project1.exe (2952)"

Базовый объект КОМПАС API IKompasAPIObject мне необходим из-за свойства parent которому я и хочу присвоить panel.
Как к нему обратиться?

Помогите кто чем может.

Заранее спасибо.

NikOpoL


NikOpoL


kepter

Посмотрите примеры из SDK
\SDK\Pascal\DELPHIAUTO\ksActiveX
\SDK\Pascal\DELPHIAUTO\ksContrl

Maxagg

Возможно тебе поможет этот пример...

З.Ы. В примере перед запуском программы должен быть открыт компас

//-------------------------------------------------------------------------------
// Получить доступ к новому API
// ---
procedure GetNewKompasAPI;
var
  disp : IDispatch;
begin
   if newKompasAPI = nil then
  begin
    disp := IDispatch(CreateKompasApplication);
    newKompasAPI := disp As IApplication;
  end;
end;

подробнее пример 12, 13

Andreych

А что так сложно то? Просто можно использовать компонент KGAX и все. Кинул его на форму, на панель, можно сразу нужный файл там отобразить, а можно и в runtime.
KGAX1.AddDocument ( file );
Весь описанный функционал там есть, кроме панелей инструментов.
Прямо там же в открытом документе или в новом можно свое что-нибудь рисовать и т.д.

sorockinalex1

Супер! Пригодится! А как сделать тоже самое, только чтобы при просмотре спецификации она была без штампа, а редактируемая??? То есть, не для просмотра а для редактирования? Код пока не смотрел, но возможно ли это?