Тема: Как получить контроль над процессором AutoCAD из Delphi?

Народ, подскажите как можно проще получить конторль над процессором Автокада из Делфей...

Re: Как получить контроль над процессором AutoCAD из Delphi?

Вот небольшой пример. Скажу сразу дальше не разбирался, но это достаточно гимморно!

unit main;
interface
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ComCtrls, AutoCAD_TLB, ComObj, ActiveX;
type
  TForm1 = class(TForm)
    b_FACAD: TButton;
    b_line: TButton;
    StatusBar1: TStatusBar;
    b_Alert: TButton;
    b_Drawings: TButton;
    ListBox1: TListBox;
    Edit1: TEdit;
    procedure b_FACADClick(Sender: TObject);
    procedure b_AlertClick(Sender: TObject);
    procedure FormClick(Sender: TObject);
    procedure b_lineClick(Sender: TObject);
    procedure b_DrawingsClick(Sender: TObject);
    procedure ListBox1Click(Sender: TObject);
  private
    { Private declarations }
    AcadApp: IAcadApplication;
    function Get_AcadMy(var Acad:IAcadApplication):boolean;
  public
    { Public declarations }
  end;
var
  Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.b_FACADClick(Sender: TObject);
begin
  get_AcadMy(AcadApp);
end;
procedure TForm1.b_AlertClick(Sender: TObject);
begin
  //if get_AcadMy(AcadApp) then
  if AcadApp<>nil then
  begin
    application.MessageBox('Есть, ГАД!!','Warning',0);
    AcadApp.ActiveDocument.Activate;
    //Послылаем макрос в командную строку, добавляя нажатие Enter
    AcadApp.ActiveDocument.SendCommand(
      '(alert "Привет от Delphi")'+ chr(13));
  end else
  statusbar1.Panels[0].Text:='Уже нету !!';
end;
procedure TForm1.FormClick(Sender: TObject);
begin
  if AcadApp = nil then
    AcadApp :=nil;
end;
function TForm1.Get_AcadMy(var Acad: IAcadApplication): boolean;
begin
  Try
  //     Пытаемся найти активный AutoCAD
    Acad := GetActiveOleObject('AutoCAD.Application') as IAcadApplication;
  except
  //     Если работающий AutoCAD не найден
    result:=false
  end;
  if AcadApp <> nil then
  begin
  // делать, что надо
    statusBar1.Panels[0].Text:='Ура!! Мы нашли работающий AutoCAD!';
    statusBar1.Panels[0].Text:=statusBar1.Panels[0].Text+
      ' Файл = ' + AcadApp.ActiveDocument.Name;
    result:=true;
    //Послылаем макрос в командную строку, добавляя нажатие Enter
    //AcadApplication.ActiveDocument.SendCommand('(alert "Привет от Delphi")' + #13);
  end;
end;
procedure TForm1.b_lineClick(Sender: TObject);
var MS:IAcadBlock;//IAcadModelSpace;
    StartPoint, EndPoint: OleVariant;
begin
  //if get_AcadMy(AcadApp) then
  if AcadApp<>nil then
  begin
    //VT_R8:=5;
    StartPoint:=VarArrayCreate([0, 2], VT_R8);
    EndPoint:=VarArrayCreate([0, 2], VT_R8);
    StartPoint[0] := 1.0; // X
    StartPoint[1] := 1.0; // Y
    StartPoint[2] := 0.0; // Z
    EndPoint  [0] := 5.0;  EndPoint  [1] := 5.0;  EndPoint  [2] := 0.0;
    ms:=AcadApp.ActiveDocument.ModelSpace;
    ms.AddLine(StartPoint, EndPoint).Update;
  end;
end;
procedure TForm1.b_DrawingsClick(Sender: TObject);
var docs:IAcadDocuments;
    doc:IAcadDocument;
    i:integer;
    p:^integer;
begin
  if AcadApp<>nil then
  begin
    docs:=AcadApp.Documents;
    listBox1.Clear;
    for i:=0 to docs.Count-1 do
    begin
      doc:=docs.Item(i);// as IAcadDocument;
      new(p);
      p^:=i;
      listBox1.Items.AddObject(doc.Name, @p);
    end;
  end;
end;
procedure TForm1.ListBox1Click(Sender: TObject);
var doc:AcadDocument;
    p:pointer;
begin
  if AcadApp<>nil then
  if ListBox1.ItemIndex>=0 then
   if get_AcadMy(AcadApp) then
   begin
     //p :=listbox1.Items.Objects[ListBox1.ItemIndex];
     doc:=AcadApp.Documents.Item(ListBox1.ItemIndex);
     doc.Activate;//:=true;
     edit1.Text:=doc.Name;
   end;
end;
end.