Ошибка при использовании метода quit для IApplication. Как исправить?

Автор Pass_OK, 28.07.09, 14:34:54

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

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

Pass_OK

При закрытии IApplication через метод Quit возникает стандартное windows окно с ошибкой. После его закрытия процесс Kompas.Exe  пропадает.

Предварительно я создал обьект и передал его окно панели.

Цитировать
unit Ukompas;

interface

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

type
  TForm1 = class(TForm)
    Panel2: TPanel;
    Button1: TButton;
    Panel1: TPanel;
    OpenDialog1: TOpenDialog;
    Button2: TButton;
    procedure Button1Click(Sender: TObject);
    procedure FormResize(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure Button2Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
Form1: TForm1;
implementation
var
wd:hwnd;
distp  : IDispatch;
KOMPAS :IApplication;
ksDocs :IDocuments;
sdfg:Variant;
fileadr:string;
{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
OpenDialog1.Execute();
fileadr:=OpenDialog1.FileName;

TRY
distp := IDispatch(CreateOleObject('KOMPAS.Application.7'));
EXCEPT
KOMPAS:=nil;
end;

if distp<>nil then  begin
try
KOMPAS:= distp as  IApplication;
ksDocs:=KOMPAS.Documents;
ksDocs.Open(fileadr,true,true);

wd:=KOMPAS.ActiveDocument.DocumentFrames.Item[0].GetHWND;
windows.SetParent(wd,panel1.Handle);
MoveWindow(wd, 0, 0, panel1.Width, panel1.Height, true);
finally
end;
end;
end;


procedure TForm1.Button2Click(Sender: TObject);
begin
  if Kompas <> nil then
  begin
    //принудительно закрыть
    Kompas.Quit;
    Kompas := nil;
  end;
end;

procedure TForm1.FormResize(Sender: TObject);
begin
MoveWindow(wd, 0, 0, panel1.Width, panel1.Height, true);
if KOMPAS<>nil then
KOMPAS.ActiveDocument.DocumentFrames.Item[0].RefreshWindow;
end;
end.

Pass_OK

Еще, если просто открыть IApplication, а потом использовать Quit  то IApplication закрывается, но Кompas.Exe остается в процессах. Как его убить?