Delphi

Delphi+acad

Добрый День!
Уважаемые мастера программирования, подскажите пожалуйста молодому как из программы на Delphi 7 заставить AutoCad (AutoCad.Application) выполнить скрипт-файл (*.scr), расположенный по конкретному адресу.
Благодарю за внимание.
Можно двумя способами:
1. Запустить: AutoCad + /b + имя срипта
2. Использовать OLE(COM):
- Cоздать прилжение
- Взять у него активный документ
- У него выполнить Open Вашего скрипта
Сейчас нет под рукой Автокада .. и полный код написать не могу .. но там всё просто ...
Спасибо за ответ!
Но я настолько неопытен, что ответы рождают лишь новые вопросы.
Если есть время, внесите пожалуйста ясность в мои понятия:
С ACADом я связываюсь так:
uses ComObj;
...
A:variant;
...
A:=CreateOleObject('AutoCAD.Application');
A.visible:=true;
...
Далее взаимодействие не получается ни как.
Вариант 1) меня очень привлекает, но я не знаю как из Delphi-программы запустить другое приложение ( к тому же заранее месторасположение ACADa не известно )
Именно по-этому я пытаюсь взаимодействовать с ним через COM (способ 2).
Если, у Вас освободится немного времени, пришлите мне пожалуйста образцы кода для запуска скрипта через COM.
Заранее благодарю.
А еще у меня не хочет работать такая конструкция:
try
A:=GetActiveOleObject('AutoCad.Application');
except
A:=CreateOleObject('AutoCAD.Application');
A.visible:=true;
end;
Причем конструкция не работает ( если приложение не запущено программа просто ругается, а если запущено то все проходит лихо ) для всех приложений , что я пробовал:ACAD, Excel, Word.
Кому не трудно, поделитесь опытом.
С уважением, Дмитрий.
Запустить любое приложение можно к примеру ShellExecute
Ну а узнать где находится AutoCad я думаю легкоможно вычитав это из реестра
Ну с виду вы правильно пытаетесь создавать объект AutoCad. Мой Вам совет.. импортните библиотеку типов и посмотрите какие методы Вам требуются. Я думаю что большинтсво вопросов отпадёт...
Спасибо за ShellExecute, поищу о ней Help по Delphi.
А вот о чтении информации из реестра мне пока думать рановато, не тот, как говорится, уровень полета ( Но интересно очень, буду благодарен за инфу ).
Мой уровень - рисование кнопочек на FORMe, да и то не все гладко выходит.
Импорт библиотеки это я так понимаю:
Project/Import Type Library/ ADD *.tlb
Но (если так) несовсем ясно куда там дальше смотреть...
Если не трудно, и не жаль, и есть до боли простые примеры или инфа по этой тематике сбросте 'за спасибо' на ShingelD@yandex.ru
Или ткните, великодушно, носом в ссылку с простыми и понятными примерами.
Для чтения информаии из реестра обратите внимание на TRegistry... в хелпе всё понятно...
Насчт импорта библиотеи типов всё правило .. создаёте модуль с описание возможностей того сервера автотимазации к которому Вы хотите обратится.. ну а дальше смотрите на те методы которые Вам надо вызвать.
Хочу поделиться результатами своих поисков.
Возможно они пригодятся для начинающих "автоматизаторов" 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 как говорится "на ранней стадии".
Удачи в новых открытиях!
Dear sir
could you help me to export a dxf file from autocad (12-2005) by useing delphi (OLE)?
thanks soooooooooo much
regards
mehdi
It's so easy
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.
Ну если так разобраца, то если в AutoCad 2002 вытащить библиотечку Acad.tlb то из неё можно получить 3 компонента и продолжить работу с этими компонентами и не морочить себе голову ....А просто уже брать и писать то что нужно . Вот только у меня возникает вопрос, у кого нить получилось создать из под делфи штриховку в AutoCad. Если да то отпишитесь