Тема: Как создать таблицу в AutoCAD 2005 из Delphi?

Привет!
Подскажите пожалуйста как создать таблицу в AutoCAD 2005 из дельфийского приложения.

Re: Как создать таблицу в AutoCAD 2005 из Delphi?

Кто-нибуууууудь, отзовитесь...
Я пробовала создать таблицу следующим образом:
1. Импортировала библиотеку типов AutoCAD из файла acax16enu.tlb. В файле AutoCAD_TLB.pas содержится класс

CoAcadTable = class
    class function Create: IAcadTable;
    class function CreateRemote(const MachineName: string): IAcadTable;
  end;

2.Пытаюсь создать таблицу

...
var AcadTbl:IAcadTable;
...
AcadTbl:=CoAcadTable.Create;

На этой строчке вываливается ошибка "Не найден указанный модуль"
Скажите, что не так???

Re: Как создать таблицу в AutoCAD 2005 из Delphi?

Лично я примитивно нарисовал с помощью линий :).
и текст вставлял в виде МТекст. Не очень изящное решение, но сработало. Делал на промежуточный рабочий слой (про который я точно знаю что пустой), потом выделял объекты с этого слоя и юзер тащит туда, где ему надо размещать эту таблицу. Потом менял аттрибуты объектов (для очистки промежуточного слоя).

Re: Как создать таблицу в AutoCAD 2005 из Delphi?

Я сейчас посмотрел AutoCad_TLB. В моем такого класса нет. Но если и есть то по аналогии надо бы:
AcadTbl:=AcDoc.Table.add (...);
что то подобное. А лучше доки почитать, но так как я сам слабо их читаю, советовать не буду :).

Re: Как создать таблицу в AutoCAD 2005 из Delphi?

Спасибо, Marat:))))
Я уже думала, что мне никто не ответит

Re: Как создать таблицу в AutoCAD 2005 из Delphi?

Разобралась!!!!!
У класса

IAcadModelSpace2Disp

есть метод

function AddTable(InsertionPoint: OleVariant; NumRows: SYSINT; NumColumns: SYSINT;
                      RowHeight: Double; ColWidth: Double): IAcadTable;

Re: Как создать таблицу в AutoCAD 2005 из Delphi?

> Drozdik
кусок кода не покажете? с IAcadModelSpace2Disp

Re: Как создать таблицу в AutoCAD 2005 из Delphi?

У меня чего-то не выходит

Re: Как создать таблицу в AutoCAD 2005 из Delphi?

ВНИМАНИЕ!!!!!!!
БОЙТЕСЬ ТАБЛИЦ В АТОКАДЕ 2005, 2006!!!
Печальный опыт уже есть - выгрузка многострочной таблицы (200-300 строк) из дельфи приводит к аварийному завершению автокада. Не умеет он работать с таблицами, точнее умеет но с маленькими :) У себя решил проблему так: создаю dxf-файл открываю его в акаде и сохраняю в dwg программно, потом пользователю показываю уже dwg. Скорость такого решения на порядок выше, чем при работе с com-объектами. Но бредовость формата dxf и скудность его описания - просто поражают.

Re: Как создать таблицу в AutoCAD 2005 из Delphi?

вот это так как не надо делать! Это в принципе правильный код, НО для небольших таблиц. В предыдущей теме я уже предупредил. Удачи!
unit Unit1;
interface
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs,AutoCad_Tlb, COMobj, StdCtrls;
type
  TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
var
  Form1: TForm1;
  Function GetAcadApplication(Visible: Boolean): IAcadApplication;
implementation
{$R *.dfm}
Function GetAcadApplication(Visible: Boolean): IAcadApplication;
var
  v : OleVariant;
begin
  Result := nil;
  Try
// пытаемся присоединиться к уже запущенной копии AutoCad
    v := GetActiveOleObject('AutoCAD.Application');
  Except
// если не получилось присоединиться, то запускаем новую копию AutoCad
    v:= CreateOleObject('AutoCAD.Application');
  end;
// приводим переменную типа OleVariant к типу IAcadApplication
  Result := IDispatch(v) as IAcadApplication;
// далее проверяем, надо ли делать приложение AutoCad видимым
  if Visible then Result.Visible := True;
end;
procedure TForm1.Button1Click(Sender: TObject);
var v : OleVariant;
AcadApp:IAcadApplication;
MdSpace:IAcadModelSpace;
MdSpace2:IAcadModelSpace2Disp;
tbl:IAcadTable;
pt:OleVariant;
rezhim:OleVariant;
docName:WideString;
currLayer: AcadLayer;
acaddoc:IAcadDocument;
k:integer;
begin
//1 присоеденимся к приложению AutoCAD
AcadApp:=GetAcadApplication(true);
AcadApp.WindowState:=acMin;
//2 открываем шаблон
rezhim:='False';
docName:=ExtractFileDir(Application.ExeName)+'\shablon.dwg';
AcadApp.Documents.Open(docname,rezhim,'');
AcadDoc:=AcadApp.ActiveDocument;
//3 Выбираем активный слой
//.*****************************
//4 Создаем таблицу AutoCAD
mdspace:=acaddoc.ModelSpace;
mdspace2:=idispatch(mdspace) as IAcadModelSpace2Disp;
pt:=VarArrayCreate([0, 2], varDouble);
pt[0]:=0;
pt[1]:=0;
pt[2]:=0;
tbl:=idispatch(mdspace2.AddTable(pt,2,9,15,15))as IAcadTable;
for k:=1 to 800 do
  begin
  acaddoc.SendCommand('(print "'+inttostr(k)+'") ');
  tbl.InsertRows(k,8,1);
  end;
for k:=1 to 800 do
  begin
  acaddoc.SendCommand('(print "split - '+inttostr(k)+'") ');
  tbl.MergeCells(k,k,1,3);
  end;
acaddoc.Regen(acAllViewPorts);
end;