Тема: Как получить контроль над процессором AutoCAD из Delphi?
Народ, подскажите как можно проще получить конторль над процессором Автокада из Делфей...
Информационный портал для профессионалов в области САПР
Вы не вошли. Пожалуйста, войдите или зарегистрируйтесь.
Форумы CADUser → Программирование → Delphi → Как получить контроль над процессором AutoCAD из Delphi?
Страницы 1
Чтобы отправить ответ, вы должны войти или зарегистрироваться
Народ, подскажите как можно проще получить конторль над процессором Автокада из Делфей...
Вот небольшой пример. Скажу сразу дальше не разбирался, но это достаточно гимморно!
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.
Страницы 1
Чтобы отправить ответ, вы должны войти или зарегистрироваться
Форумы CADUser → Программирование → Delphi → Как получить контроль над процессором AutoCAD из Delphi?
Форум работает на PunBB, при поддержке Informer Technologies, Inc