Delphi+acad

  • Автор темы ShingelD
  • Дата начала
Статус
Закрыто для дальнейших ответов.
S

ShingelD

Добрый День!
Уважаемые мастера программирования, подскажите пожалуйста молодому как из программы на Delphi 7 заставить AutoCad (AutoCad.Application) выполнить скрипт-файл (*.scr), расположенный по конкретному адресу.
Благодарю за внимание. :)
 
B

Barmutik

Можно двумя способами:

1. Запустить: AutoCad + /b + имя срипта
2. Использовать OLE(COM):
- Cоздать прилжение
- Взять у него активный документ
- У него выполнить Open Вашего скрипта

Сейчас нет под рукой Автокада .. и полный код написать не могу .. но там всё просто ...
 
S

ShingelD

Спасибо за ответ!
Но я настолько неопытен, что ответы рождают лишь новые вопросы. :)
Если есть время, внесите пожалуйста ясность в мои понятия:
С ACADом я связываюсь так:

uses ComObj;

...

A:variant;

...

A:=CreateOleObject('AutoCAD.Application');
A.visible:=true;
...

Далее взаимодействие не получается ни как.

Вариант 1) меня очень привлекает, но я не знаю как из Delphi-программы запустить другое приложение ( к тому же заранее месторасположение ACADa не известно )
Именно по-этому я пытаюсь взаимодействовать с ним через COM (способ 2).
Если, у Вас освободится немного времени, пришлите мне пожалуйста образцы кода для запуска скрипта через COM.
Заранее благодарю. :)
 
S

ShingelD

А еще у меня не хочет работать такая конструкция:

try
A:=GetActiveOleObject('AutoCad.Application');
except
A:=CreateOleObject('AutoCAD.Application');
A.visible:=true;
end;

Причем конструкция не работает ( если приложение не запущено программа просто ругается, а если запущено то все проходит лихо ) для всех приложений , что я пробовал:ACAD, Excel, Word.

Кому не трудно, поделитесь опытом.

С уважением, Дмитрий.
 
B

Barmutik

Запустить любое приложение можно к примеру ShellExecute

Ну а узнать где находится AutoCad я думаю легкоможно вычитав это из реестра :)

Ну с виду вы правильно пытаетесь создавать объект AutoCad. Мой Вам совет.. импортните библиотеку типов и посмотрите какие методы Вам требуются. Я думаю что большинтсво вопросов отпадёт...
 
S

ShingelD

Спасибо за ShellExecute, поищу о ней Help по Delphi.

А вот о чтении информации из реестра мне пока думать рановато, не тот, как говорится, уровень полета ( Но интересно очень, буду благодарен за инфу ).
Мой уровень - рисование кнопочек на FORMe, да и то не все гладко выходит.

Импорт библиотеки это я так понимаю:

Project/Import Type Library/ ADD *.tlb

Но (если так) несовсем ясно куда там дальше смотреть...

Если не трудно, и не жаль, и есть до боли простые примеры или инфа по этой тематике сбросте 'за спасибо' на ShingelD@yandex.ru
Или ткните, великодушно, носом в ссылку с простыми и понятными примерами.
 
B

Barmutik

Для чтения информаии из реестра обратите внимание на TRegistry... в хелпе всё понятно...

Насчт импорта библиотеи типов всё правило .. создаёте модуль с описание возможностей того сервера автотимазации к которому Вы хотите обратится.. ну а дальше смотрите на те методы которые Вам надо вызвать.
 
S

ShingelD

Хочу поделиться результатами своих поисков.
Возможно они пригодятся для начинающих "автоматизаторов" ACADa.

Вот пример реального кода:
На форме три кнопочки:
Button1 открывает AutoCAD
Button2 передает в коммандную строку ACADa комманду text
Button3 приводит к выполнению ACADом скрипт-файла


unit Victory;

interface

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

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


Обязательно нужно определить переменную через которую будет идти связь с ACADом

AutoCAD:variant;

{ Public declarations }
end;

var
Form1: TForm1;

implementation

Незабывайте подключить библиотеку СomObj

uses ComObj;
{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
try

Пытаемся определить запущен ли ACAD.Конструкция try except защищает от возникновения сообщения об шибке, если ACAD не пущен.При запуске программы из Delphi она в этом месте ругается, но стоит запустить проект после Build как уже готовый и все работает корректно !!!


AutoCAD := GetActiveOleObject('Autocad.Application');

except

Если ACAD еще не запущен, запускаем его.

AutoCAD := CreateOleObject('Autocad.Application');
AutoCAD.Visible := True;
end;
end;




procedure TForm1.Button2Click(Sender: TObject);
begin

Вот так вот в коммандную строку ACADа можно передать комманду для выполнения.(Безграничное поле возможностей LISPа)

AutoCAD.activeDocument.sendcommand('text 0,0 90 Приветик+#13+#13);
end;

procedure TForm1.Button3Click(Sender: TObject);
begin
AutoCAD.activeDocument.sendcommand('filedia 0'+#13);

А вот так запускается скрипт 111.scr, находящийся по адресу с:.
Для этого вполне годится комманда scr. При этом необходимо устанавливать переменную ACADa filedia в 0 , тогда адрес и имя передадутся через коммандную строку без открывания окна диалога.



AutoCAD.activeDocument.sendcommand('scr c:\111.scr'+#13);
AutoCAD.activeDocument.sendcommand('filedia 1'+#13);
end;

end.



Все проще простого !!!

Начинающим, как я, рекомендую форум на www.AutoCAD.ru - очень квалифицированные специалисты не поскупятся дать подробный ответ практически на любой вопрос.

Огромное спасибо Barmutikу, за то, что не дали пропасть моему интересу к Delphi как говорится "на ранней стадии".
 
M

mehdi

Dear sir

could you help me to export a dxf file from autocad (12-2005) by useing delphi (OLE)?

thanks soooooooooo much
regards
mehdi
 
B

Barmutik

It's so easy :p

1. Start AutoCad from Delphi
2. Export DFX file
3. Close AutoCad

Jouke : :)

Import TLB library and look for suitable method you need. If you have some expirience with DELPHI, COM and Autocad hope you will make it in 10 minutes.
 
A

Admiral

Ну если так разобраца, то если в AutoCad 2002 вытащить библиотечку Acad.tlb то из неё можно получить 3 компонента и продолжить работу с этими компонентами и не морочить себе голову :D ....А просто уже брать и писать то что нужно :D . Вот только у меня возникает вопрос, у кого нить получилось создать из под делфи штриховку в AutoCad. Если да то отпишитесь
 
Статус
Закрыто для дальнейших ответов.
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!