Как связать delphi autocad
Сейчас нет под рукой Автокада .. и полный код написать не могу .. но там всё просто .
ShingelD
Спасибо за ответ!
Но я настолько неопытен, что ответы рождают лишь новые вопросы.
Если есть время, внесите пожалуйста ясность в мои понятия:
С ACADом я связываюсь так:
Далее взаимодействие не получается ни как.
Вариант 1) меня очень привлекает, но я не знаю как из Delphi-программы запустить другое приложение ( к тому же заранее месторасположение ACADa не известно )
Именно по-этому я пытаюсь взаимодействовать с ним через COM (способ 2).
Если, у Вас освободится немного времени, пришлите мне пожалуйста образцы кода для запуска скрипта через COM.
Заранее благодарю.
ShingelD
А еще у меня не хочет работать такая конструкция:
try
A:=GetActiveOleObject('AutoCad.Application');
except
A:=CreateOleObject('AutoCAD.Application');
A.visible:=true;
end;
Причем конструкция не работает ( если приложение не запущено программа просто ругается, а если запущено то все проходит лихо ) для всех приложений , что я пробовал:ACAD, Excel, Word.
Кому не трудно, поделитесь опытом.
С уважением, Дмитрий.
Barmutik
Запустить любое приложение можно к примеру ShellExecute
Ну а узнать где находится AutoCad я думаю легкоможно вычитав это из реестра
Ну с виду вы правильно пытаетесь создавать объект AutoCad. Мой Вам совет.. импортните библиотеку типов и посмотрите какие методы Вам требуются. Я думаю что большинтсво вопросов отпадёт.
ShingelD
Спасибо за ShellExecute, поищу о ней Help по Delphi.
А вот о чтении информации из реестра мне пока думать рановато, не тот, как говорится, уровень полета ( Но интересно очень, буду благодарен за инфу ).
Мой уровень - рисование кнопочек на FORMe, да и то не все гладко выходит.
Импорт библиотеки это я так понимаю:
Project/Import Type Library/ ADD *.tlb
Но (если так) несовсем ясно куда там дальше смотреть.
Barmutik
Для чтения информаии из реестра обратите внимание на TRegistry. в хелпе всё понятно.
Насчт импорта библиотеи типов всё правило .. создаёте модуль с описание возможностей того сервера автотимазации к которому Вы хотите обратится.. ну а дальше смотрите на те методы которые Вам надо вызвать.
ShingelD
Хочу поделиться результатами своих поисков.
Возможно они пригодятся для начинающих "автоматизаторов" ACADa.
Вот пример реального кода:
На форме три кнопочки:
Button1 открывает AutoCAD
Button2 передает в коммандную строку ACADa комманду text
Button3 приводит к выполнению ACADом скрипт-файла
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ом
var
Form1: TForm1;
Незабывайте подключить библиотеку СomObj
procedure TForm1.Button1Click(Sender: TObject);
begin
try
Если ACAD еще не запущен, запускаем его.
AutoCAD := CreateOleObject('Autocad.Application');
AutoCAD.Visible := True;
end;
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
Вот так вот в коммандную строку ACADа можно передать комманду для выполнения.(Безграничное поле возможностей LISPа)
А вот так запускается скрипт 111.scr, находящийся по адресу с:.
Для этого вполне годится комманда scr. При этом необходимо устанавливать переменную ACADa filedia в 0 , тогда адрес и имя передадутся через коммандную строку без открывания окна диалога.
Все проще простого .
Огромное спасибо Barmutik у, за то, что не дали пропасть моему интересу к Delphi как говорится "на ранней стадии".
Для увеличения производительности и расширения возможностей AutoCAD многие проектировщики пользуются программами, написанными на встроенном языке AutoLISP (назовем их для краткости LISP-программами). Недостатком в работе с такими программами является неудобство, особенно для неопытных пользователей, ввода-вывода информации через командную строку AutoCAD. Добавление диалоговых окон решает проблему лишь отчасти, поскольку их возможности ограничены и они значительно увеличивают объем исходного кода самой LISP-программы.Более практичным решением этой задачи является использование связки AutoCAD и системы программирования Delphi, где AutoCAD выполняет роль сервера, а программа-приложение - роль клиента.
В статье рассматривается пример такой связки. Это простое приложение к AutoCAD, имеющее интерфейс обычных Windows-приложений.
Оно запускается из AutoCAD, после ввода параметров формирует внешний текстовой INI-файл и загружает LISP-программу, которая отрисовывает деталь по данным из текстового файла, в нашем примере - трехмерную пружину.
По сравнению с технологией черчения из Delphi напрямую, без промежуточных файлов, описываемый метод имеет свои положительные особенности.
Во-первых, с минимальными переделками можно использовать наработанные библиотеки LISP-программ, которые отлично "заточены" под AutoCAD, к тому же код LISP-программы намного проще и короче аналогичного кода на Object Pascal.
Во-вторых, в приложении основную работу выполняет LISP-программа с открытым кодом, она доступна для настройки под определенную задачу, а редактирование откомпилированного EXE-файла уже невозможно при отсутствии исходного кода.
В-третьих, внешние текстовые INI-файлы можно использовать как простые и удобные базы данных для записи координат точек элементов детали, информации о материале, цвете, стоимости и других данных.
Разработка приложения.
Все файлы приложения удобнее размещать в одной директории, в нашем примере это будет C:\Unit_1. Сюда мы поместим два файла helix.exe (исполняемый файл приложения) и helix.lsp (LISP-программа), сюда же будет записываться и промежуточный файл helix.ini.
Создание приложения начнем с построения его оболочки в Delphi.
На форме размером 440х580 pix размещаются следующие компоненты:
- Image1 для загрузки иллюстрации-подсказки (файл JPG размером 300х350 pix);
- четыре текстовых поля Edit1, Edit2, Edit3, Edit4 для ввода параметров пружины - высоты, радиуса, шага и толщины витка;
- переключатель RadioGroup1 для изменения направления витков (по часовой или против часовой стрелки, если смотреть сверху);
- две кнопки Button1 и Button2 - одна из них запускает построение детали, другая закрывает приложение.
Можно было бы предусмотреть построение технологически более сложных пружин растяжения и сжатия, но для понимания принципа работы приложения достаточно будет самой простой пружины-спирали.
Перед разработкой приложения в Delphi следует импортировать библиотеку типов AutoCAD:
Пункт меню Project - Import Type Library - Add, указать файл C:\Program Files\Autodesk Shared\acax16enu.tlb. В окне Import Type Library выбрать строку AutoCAD (Version 1.1) и нажать кнопку Instal.
Теперь все готово для разработки приложения. Установите на форму указанные выше компоненты, свойству ItemIndex переключателя RadioGroup1 присвойте значение 0, удалите исходный текст из текстовых полей, свойствам Caption кнопок Button1 и Button2 присвойте значение "ПОСТРОИТЬ" и "ЗАКРЫТЬ".
Перейдем к редактированию кода. В раздел USES необходимо добавить IniFiles, ActiveX,ComObj, Jpeg, в раздел объявления переменных var Form1: TForm1; добавить ModelSpace, Acad: OleVariant;
Все следующие действия для лучшего понимания можно разбить на три этапа.
Этап1.Формирование текстового файла - базы данных детали.
Основную работу приложения выполняет процедура, обрабатывающая событие Button1Click - щелчек на кнопке "ПОСТРОИТЬ". В раздел описания переменных процедуры TForm1.Button1Click запишем новую переменную rec для работы с файлом
Далее в указанной директории (в нашем примере - 'C:\Unit_1') создается INI-файл helix.ini, в который с помощью процедуры WriteString происходит построчная запись пареметров детали.
В INI-файл в секциях записываются значения радиуса и высоты пружины, толщины ее профиля, которые считываются из соответствующих текстовых полей Edit1, Edit2, Edit3 и Edit4. В последней строке записывается признак направления витков пружины (0 - против и 1 - по часовой стрелке). В конце записи закрывается сеанс работы с файлом:
После записи INI-файл будет иметь примерно такой вид:
Обратите внимание на соотношение двух параметров: вертикального шага витка Step_v и толщины профиля RP. Когда толщина профиля будет больше, чем половина шага, то витки сольются и деталь уже не будет выглядеть пружиной, а превратится в резьбу с круглым профилем, эту ситуацию можно использовать для построения резьбовых деталей.
Следующее действие - проверка, запущен AutoCAD или нет. Если нет - запускается, если да - посылается команда на загрузку LISP-файла.
В коде программы нашего приложения приложения есть еще две процедуры. Одна из них TForm1.Edit1KeyPress защищает от ошибок при вводе данных. Она позволяет вводить в цифровые поля только цифры от 0 до 9 и точку - десятичный разделитель:
Другая процедура (Button2Click) просто закрывает приложение без построения детали. Ниже приведет полный листинг программы, добавленные нами операторы подчеркнуты.
Далее запускается LISP-программа, под управлением которой AutoCAD отрисовывает деталь.
Способ №1 – раннее связывание.
В Delphi из меню Project выберите Import Type Library…, в окне Import Type Library нажмите Add и укажите acad.tlb в каталоге AutoCAD (для AutoCAD 2000 — 2002) или acax16enu.tlb в каталоге …Common Files\Autodesk Shared (для AutoCAD 2004 — 2006). Нажмите Install и установите предлагаемые компоненты.
Итак, для AutoCAD 2002 на палитре ActiveX появятся компоненты: TAcadDatabase, TAcadDocument, TAcadLayerStateManager из которых наибольшую ценность представляет TAcadDocument. Теперь, когда подготовительные операции завершены, начните новое приложение, добавьте на форму компонент TAcadDocument, поставьте его свойство AutoConnect в True, добавьте кнопку и на ее событие Click следующий код:
- чтобы иметь представление о том, как объектная модель AutoCAD выглядит на Object Pascal;
- чтобы иметь возможность использовать механизм Code Completion;
- чтобы узнать значения констант;
- чтобы иметь доступ к событиям документа.
Имеется и недостаток: вы всегда жестко привязаны именно к той версии AutoCAD, от которой взяли tlb за счет включенных в Type Library GUID. По этой причине далее я не буду использовать библиотеку типов.
Важно!
В основновном по этой причине приводимые в статьях определения методов и свойств не всегда имеют типы данных, совпадающие с определенными в импортированной AutoCAD Type Library. Так, например, в AutoCAD_TLB.pas определение метода AddLine таково:
function AddLine(StartPoint: OleVariant; EndPoint: OleVariant): IAcadLine; safecall;
Я буду приводить его как:
function AddLine(StartPoint: OleVariant; EndPoint: OleVariant): OleVariant;
Где-то в программе:
Но сначала посмотрим как спрятать:
А теперь покажем. Вот здесь начинаются хитрости. Казалось бы надо просто написать:
Тип AcWindowState определен в AutoCAD_TLB.pas как TOleEnum. Сам же TOleEnum определен в ActiveX.pas. В Delphi 5 он был определен как Integer, что неверно и создавало трудности, например при задании весов линий (LineWeight) по-слою, когда LineWeight = acLnWtByLayer ($FFFFFFFF). В Delphi 7 TOleEnum верно определен как синоним LongWord.- Перед обращением к переменной Acad я всегда проверяю ее с помощью VarIsClear. Это помогает избавиться от ошибок когда подключения еще не было. Но если вы запустили AutoCAD, присоединились и закрыли (через меню "File/Exit" или крестиком), то проверка VarIsClear не предотвращает ошибку и обращение к переменной Acad вызывает EOleSysError with message "Сервер RPC не доступен".
- Если в AutoCAD открыто модальное окно, то обращение к переменной Acad или попытка подключения вызывает EOleSysError with message "Вызов был отклонен".
Если AutoCAD-ов несколько, то в функции AcConnect параметру acClassName необходимо задать соответствующее значение имени класса. Мне известны такие версии под Windows:
Autocad - широко известный графический пакет для построения чертежей. Не секрет, что autocad очень удобен для предприятий, специализирующихся на строительстве, продаже или аренде коммерческих и жилых площадей. В данной статье мы поговорим о ситуации, когда требуется расширить стандартные возможности пакета за счет написания программы на языке delphi. Например, это очень удобно, когда необходимо хранить информацию по чертежу в базе данных, осуществить привязку к чертежу документации, отражающей сдачу в аренду площадей различным организациям или предоставить рядовому пользователю, не владеющему знаниями autocad, простой механизм получения точной информации о размере площади, предоставляемой клиенту, и различные сопутствующие числовые показатели. Объектная модель autocad базируется на visual basic for application, ее использование позволяет получить доступ ко всем элементам как чертежа, так и самой оболочки autocad. В данной статье рассматривается связка delphi 7 и autocad 2004. Если у вас более поздняя версия какого-то из программных продуктов, то это не страшно, так как принцип работы останется тем же самым.
Сначала импортируем библиотеку AutoCAD в Delphi. Для этого выберем пункт меню ProjectMmportType Library, нажмем кнопку Add и добавим файл acax16enu.tlb (найти его можно по адресу C:\Program Files\ Common Files\Autodesk Shared), после чего инсталлируем новый набор ActiveX компонентов в систему (рис. 1).
Нам станет доступно 5 новых компонентов:
Разместим на форме компонент TAcadDocument, далее создадим обработчик события OnCreate для формы. В нем мы проверим, запущен ли на машине AutoCAD или нет (если нет, его придется запускать). Обязательно подключим модуль ComObj.
Подключение к AutoCAD
AutoCAD: OleVariant; begin
//Если AutoCAD запущен, то подсоединяемся к нему
AcadDocument l.ConnectTo((IDisp atch (AutoCAD) as lAcadApplication). ActiveDocument) ; ZI except
//Иначе запускаем его AcadDocument 1. Connect; end; ZZ end;
Поговорим о следующей строчке кода:
Обязательно загляните в модуль AutoCADJLB.pas, который появится после установки новых компонентов: как разработчик, вы сможете почерпнуть из него много полезной информации, а также в файл справки AutoCAD-acad. chm. Особенное внимание уделите разделам ActiveX and VBA Developer's Guide и ActiveX and VBA Reference, где можно найти сведения о методах, свойствах и объектах AutoCAD (рис.2).
ch(AutoCAD) as lAcadApplication). ActiveDocument);
В ней мы приводим переменную AutoCAD к типу lACadApplication, используя для этого специальный интерфейс IDispatch. Теперь разместите на форме кнопку, назовите ее «Имя текущего документа» и напишите для нее в обработчике: ShowMessage('l/ta текущего документа: '+AcadDocument1 .Name); Идем дальше — начертим линию с помощью стандартного метода AutoCAD -AddLine():
АddLine(НачальныеКоординаты, КонечныеКоординаты), где НачальныеКоординаты — массив из трех точек (ось X, Y, I), определяющий координаты начала линии, где КонечныеКоординаты — массив из трех точек (ось X, Y, I), определяющий координаты конца линии.
Прежде чем передать массив в качестве аргумента, воспользуемся функцией VarArrayCreate, которая создаст его:
УаrАrrауСrеаtе([Размерность],Тип данных) Создание массива с заданной размерностью и заданным типом значений его элементов. Пример:
V:= VarArrayCreate([0,2], varDouble) Создание массива, состоящего из трех элементов типа Double.
Итак, необходимо разместить на форме еще одну кнопку. Назовем ее «Линия» и объявим две переменные FirstPoint и SecondPoint типа OleVariant. Теперь нам понадобится следующий код:
varDouble); //массив начальной точки SecondPoint:=VarArrayCreate([0, 2],
varDouble); //массив конечной точки
А сейчас можно задать и сами координаты линий, делается это таким образом:
FirstPoint[0]:=10; //начальная X координата
FirstPoint [1] :=10; //начальная Y координата
FirstPoint[2]:=10; //начальная Z координата
Далее нам будет нужна переменная AutoCadLine типа lAcadLine (хотя можно ее сделать и OleVariant, такой вариант тоже будет работать). В ней мы сохраним ссылку на созданную линию, чтобы в дальнейшем обращаться к этой фигуре, внося нужные изменения (о том, как это сделать, вы обязательно узнаете далее). А пока осталось начертить линию с помощью следующей строчки кода:
AutoCadLine:=AcadDocumentl. ModelSpace.AddLine(FirstPoint, SecondPoint);
Стоит отметить, что для работы с графическими объектами я использовал коллекцию ModelSpace, которая позволяет обращаться ко всем графическим объектами чертежа. Можно также воспользоваться коллекцией PaperSpace, правда, в этом случае нам будут доступны только объекты, содержащиеся в активном на данный момент слое. На рисунке 3 вы можете видеть упрощенную схему объектной структуры AutoCAD.
Итак, продолжаем. Линия у нас уже есть, теперь проведем над ней одну манипуляцию: покрасим ее в красный цвет с помощью всего одной строчки кода:
После того как работа с чертежом окончена, нужно сообщить об этом AutoCAD. Делается это следующим образом:
AcadDocumentl. Application. Update;
Полный листинг для обработчика события OnClick кнопки «Линия» вы найдете в исходнике программы, расположенной на компакт-диске.
Разместим на форме еще одну кнопку, назовем ее «Линия с запросом». С помощью нее мы нарисуем такую же обычную линию, предварительно запросив координаты у пользователя. Для этого используется объект Utility и его метод GetPointQ. Снова зададим две локальные переменные StartPoint и SecondPoint с типом OleVariant. Сделаем для них такие же массивы и напишем код:
FirstPoint :=AcadDocumentl. Utility.
GetPoint(EmptyParam, 'Укажите начальную координату: ');
SecondPoint :=AcadDocumentl. Utility. GetPoint(EmptyParam, 'Укажите конечную координату: ');
Как начертить линию, имея ее координаты, вы уже знаете, и разбирать этот процесс нет смысла, поэтому протестируем готовый код. Запустите программу, нажмите кнопку «Линия с запросом» и переключитесь в окно AutoCAD. Обратите внимание: в командной строке, расположенной в нижней части окна AutoCAD, появился текст «Укажите начальную координату», рис. 4.
Сделаем это, щелкнув мышью в понравившемся нам месте на холсте чертежа. Появится надпись «Укажите конечную координату». В результате из указанных нами точек появится линия. Вот оно, чудо взаимодействия программы и программиста! Однако не будем отступать от главного — перейдем на следующий уровень. На подходе фигура посложнее — полилиния. С помощью нее можно строить всевозможные многоугольники. Для начала построим четырехугольник. Стоит отметить, что в этом случае нам достаточно задать две координаты X и Y. Размещаем на форме кнопку, назовем ее «Четырехугольник», далее создадим вариантный массив Points, рассчитанный на 10 значений, и зададим нужные координаты, например:
Объявим переменную AutoCADPolyline типа OleVariant и последний штрих:
Протестируем программу и нарисуем новую фигуру. Пришло время поговорить немного и о самом AutoCAD. Кликнем по только что сформированному прямоугольнику (в чертеже), он станет активным и на экране появиться окно свойств, рис.5. Обратите внимание на содержимое выпадающего списка, расположенного в самом верху. В нем мы имеем честь наблюдать тип своей фигуры: в данном случае это polyline, т.е. что мы и рисовали. Если кликнуть мышкой по свойству Vertex, в нем появятся две стрелки, с помощью которых вы можете переключаться между отдельными вершинами фигуры. Соответственно, в этот момент будут меняться свойства VertexX и VertexY, отвечающие за координаты. А вот в свойстве Area можно получить значение площади созданной вами фигуры, удобно, не так ли? Я думаю, имеет смысл вывести эту информацию в окне нашей программы:
ShowMessage('Площадь фигуры: :'+FloatT oStr(AutoCADPolyline.Area));
Добавим еще одну кнопку на форму, назовем ее «Круг». Для работы с этой фигурой надо задать три точки — координаты центра круга и его радиус, а затем использовать следующий метод:
AddCircle (КоординатыЦентра, Радиус) ;
Разнообразим чертеж текстом, добавляющимся с помощью процедуры AddText():
AddText(Teкст, Координаты, Высота), где Текст— выводимый текст, заключенный в кавычки, где Координаты — это две точки: X и Y, в которых начнется вывод текста, где Высота — высота текста.
При работе с чертежом может возникнуть необходимость присвоения имени отдельным объектам или их группам, что позволит быстро обращаться к ним в дальнейшем. Этот механизм реализован в AutoCAD посредством слоев. Итак, создайте новый чертеж, нарисуйте в нем два прямоугольника и многогранник (с помощью полилинии), а в каждой фигуре проставьте текст «Комната1», «Комната2», «Комната 3» (вы можете найти чертеж в исходниках программы, он называется Планировка.dwg), рис. 6.
for i:=0 to AcadDocumentl.ModelSpace. Count-1 do
Проверяя название фигуры, мы будем осуществлять необходимые действия. Так как отдельные фигуры имеют разный набор свойств и количество координат, например, линия задается двумя точками, каждая из которых проецируется в трехмерной системе (ось X,Y,Z), а вот каждая точка полилинии позиционируется лишь в оси X и Y, то эти моменты обязательно надо учитывать. Поэтому для каждой фигуры придется писать свой собственный обработчик. Я рассмотрю описанный выше момент на следующем примере:
EntityName='AcDbCircle' then begin
//Координаты центра круга
t:=(AutoCadObject as lAcadCircle). Center;
Li stBoxl. Items. Add ('Координаты центра X-'+IntToStr(t[0])+' Y-'+IntToStr (t [1]) +' Z-'+IntToStr (t [2])) ;
t:=(AutoCadObject as lAcadCircle). Radius;
ListBoxl.Items.АсШСРадиус круга R='+IntToStr(t)); end;
Круг по понятиям AutoCAD называется AcDBCircle. Чтобы обратиться к его свойствам, нужно привести объект AutoCADObject, который ссылается на обрабатываемую в данный момент фигуру к типу lAcadCircle, а далее все просто: из свойства Center вытаскиваем координаты центра, из свойства Radius — длину радиуса. Обратите внимание, в процессе обработки полилинии перед нами встанет практически философский вопрос: «Как узнать количество точек, из которых она состоит?». Дело в том, что это может быть обычный прямоугольник, который будет содержать 4 точки или ломаная фигура, состоящая из 10. Способ решения прост — для вариантного массива есть специальная функция VarArrayHighBoundQ, которой в качестве первого параметра передаем имя массива, а в качестве второго — единицу.
Предлагаю не останавливаться на достигнутом. Нарисуем круг и заштрихуем его. Для этого служит метод AddHatch(), принадлежащий коллекции ModelSpace. Итак, разместим на форме кнопку, назовем ее
«Штриховка» и впишем в ее обработчик следующий код:
AutoCADHatch, Zalivka: OleVariant;
TypeColorl, TypeColor2: OleVariant;
Points:= VarArrayCreate([0, 2], VarDouble);
Points[0]:= 400; Points[l]:= 700; Points[2]:= 500;
//Задаем границы штриховки
Zalivka:= VarArrayCreate([0, 0], varDispatch);
Zalivka[0]:= AcadDocumentl. ModelSpace.AddCircle(Points,500);
//Задаем параметры штриховки
AutoCADHatch:= AcadDocumentl. ModelSpace. AddHatch (acPreDefinedGradie nt, 'LINEAR', True, acGradientObject);
//Задаем цвета заливки
TypeColorl:= AutoCADHatch. GradientColorl;
TypeColorl.SetRGB(200, 50, 200);
TypeColor2:= AutoCADHatch. GradientColor2;
TypeColor2.SetRGB(0, 250, 0);
//Передаем границы заливки
AutoCADHatch. AppendOuterLoop(Zal ivka);
//Сообщаем о совершенных изменениях в AutoCAD
Обратите внимание на второй параметр функции AddHatch(). Он отвечает за шаблон штриховки и может принимать следующие значения:
Методом RGB() мы задаем два цвета штриховки, которые затем смешаются в соответствии с указанным шаблоном. Рассмотрим создание собственного слоя с возможностью рисования в нем фигуры. В решении этой задачи нам поможет следующая строчка кода:
AcadDo cumentl. Layers. AddTMyLayer');
Вот и все — разве чтоперед рисованием будет нужно его активировать. Для нашего следующего примера понадобится кнопка с названием «Выберите объект», нажатие на нее позволит пользователю простым щелчком мыши указывать фигуру на чертеже, после чего она будет выделена желтым цветом. Необходимый листинг вы найдете в исходниках программы. И на закуску: разместите две кнопки «Проверить наличие изменений» и «Сохранить». С помощью первой мы будем узнавать, был ли изменен текущий чертеж с момента его открытия,используя системную переменную AutoCAD — DBMOD. Если она содержит 0, то чертеж не был изменен, иначе — был. Вторая кнопка позволит нам сохранить чертеж.
Из истории создания AutoCAD
В апреле 1982 года была организованна компания Autodesk - автор ныне популярного программного продукта для автоматизированного проектирования AutoCAD. В то время она состояла всего лишь из 15 программистов. Новый продукт кардинально изменил положение дел в сфере разработки конструкторской документации. В настоящее время AutoCAD используют миллионы людей по всему миру, он переведен более чем на 18 языков. Кстати, одним из факторов популярности, которую AutoCAD приобрел в России, является то обстоятельство, что компания Autodesk перевела свой продукт на русский язык еще в начале продвижения первых версий программы.
Версия 1.0 (Release 1)Декабрь1982г
Версия 1.2 (Release 2) Апрель 1983 г
Версия 1.3 (Release 3)Август1983г
Версия 1.4 (Release 4) Октябрь 1983 г
Версия 2.0 (Release 5) Октябрь 1984 г
Версия 2.1 (Release 6) Май 1985 г
Версия 2.5 (Release 7) Июнь 1986 г
Версия 2.6 (Release 8) Апрель 1987 г
Версия 9 - Сентябрь 1987 г
Версия 10 - Октябрь 1988 г
Версия 11 - Октябрь 1990 г
Версия 12-Июнь 1992 г (последний выпуск для Apple Macintosh)
Версия 13-Ноябрь 1994 г (последний выпуск для Unix, MS-DOS и Windows 3.11)
Как я понимаю основная проблема в подключении нужной библиотеки в реал тайм.
Пробовал в uses прописать все подключенные библиотеки
Библиотеки AutoCAD_2012_TLB, AutoCAD_2015_TLB естественно были предварительно подключены
Как решить эту задачку ?
А как он сейчас запускается?
Вангую, что если программа запускается на машине с 2012-м AutoCAD-ом, а падает только на попытке его запуска, в программе нужно через точку писать:
Не стоит путать форумы с богадельнями. © Bargest
А как он сейчас запускается?
Вангую, что если программа запускается на машине с 2012-м AutoCAD-ом, а падает только на попытке его запуска, в программе нужно через точку писать:
НАСМЕШИЛ
МАХАЛАЙ-БАХАЛАЙ АВТОКАДА ЗАПУСТИСЬ
Забыл ; поставить
МАХАЛАЙ-БАХАЛАЙ АВТОКАДА ЗАПУСТИСЬ;
До конструкции IF - ELSE я бы как ни будь сам додумался ))
видишь ли тут всё немного сложнее .
- На машине с AutoCAD 2012 приложение запускается? Динамический вызов интерфейсов, стало быть?
- Как конкретно выглядит код запуска?
Не стоит путать форумы с богадельнями. © Bargest
Смотри второй скриншот, там справа в менеджере проекта подключены 2 библиотеки AutoCAD_2012_TLB и AutoCAD_2015_TLB
в uses они прописаны
uses Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs, ComObj, Vcl.StdCtrls, Vcl.OleServer, AutoCAD_2012_TLB, AutoCAD_2015_TLB, Vcl.Menus; |
вот в таком виде запускается только на машине где установлен Acad2015, на машине где установлен Acad2012 не запускается.
теперь если из uses убрать AutoCAD_2015_TLB, то будет запускаться на машине где установлен Acad2012.
Редактируя uses я пока и запускаю нужную версию, т.е. я пока не знаю как это реализовать нормально т.е. программно.
В этом и проблема я не пойму как это сделать .
Запускается автокад по нажатию кнопки <Запустить Автокад>
но запускается только та версия библиотека которой прописана в uses
Читайте также: