Delphi+acad

Тема в разделе "Delphi - СОМ", создана пользователем ShingelD, 27 июл 2005.

Статус темы:
Закрыта.
  1. ShingelD

    ShingelD Гость

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

    Barmutik Гость

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

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

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

    ShingelD Гость

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

    uses ComObj;

    ...

    A:variant;

    ...

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

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

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

    ShingelD Гость

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

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

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

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

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

    Barmutik Гость

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

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

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

    ShingelD Гость

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

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

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

    Project/Import Type Library/ ADD *.tlb

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

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

    Barmutik Гость

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

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

    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 как говорится "на ранней стадии".
     
  9. Barmutik

    Barmutik Гость

    :) Удачи в новых открытиях!
     
  10. mehdi

    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
     
  11. Barmutik

    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.
     
  12. Admiral

    Admiral Гость

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

Поделиться этой страницей