Тема: Как на Delphi выбрать с каким релизом AutoCAD работать ?
Как в проге на Delphi выбрать с каким Акадом работать ?
К сожалению нет книги. Не кто не может привести код ?
Информационный портал для профессионалов в области САПР
Вы не вошли. Пожалуйста, войдите или зарегистрируйтесь.
Форумы CADUser → Программирование → Delphi → Как на Delphi выбрать с каким релизом AutoCAD работать ?
Страницы 1
Чтобы отправить ответ, вы должны войти или зарегистрироваться
Как в проге на Delphi выбрать с каким Акадом работать ?
К сожалению нет книги. Не кто не может привести код ?
алгоритм проверки установленных AutoCAD-ов:
1. проверять наличие ключей в реестре:
HKCR\AutoCAD.Application.XX
(где XX - версии AutoCAD)
2. далее "смотреть" по ключам:
HKCR\CLSID\XX...XXXX
(где XX...XXXX - ClassID взятый из HKCR\AutoCAD.Application.XX\CLSID)
3. проверить наличие файла AutoCAD-а, прописанного в
HKCR\CLSID\XX...XXXX\LocalServer32
(если файл присутствует - значит, с большой долей вероятности, можно утверждать, что данная версия AutoCAD присутствует на компутере).
ну, а окно выбора организовать несложно :)
> callisto
Я бы начал отсюда: HKEY_LOCAL_MACHINE\SOFTWARE\Autodesk\AutoCAD
Там есть (поглубже) переменные AcadLocation (каталог в котором acad.exe) и ProductName (имя AutoCAD или вертикального приложения)
Затем запустил бы соответствующий acad.exe и с ним бы работал.
procedure ruGetACADExePathNames(var lst: TStringList); procedure GetAcadReleaseList(const Rel: string); var r: TRegistry; s, rList: TStringList; i, c: integer; begin r := TRegistry.Create; r.RootKey := HKEY_LOCAL_MACHINE; s := TStringList.Create; rList := TStringList.Create; if r.OpenKey(keyAcadRegRoot, false) then begin r.GetKeyNames(s); r.CloseKey; for i := 0 to s.Count - 1 do if (AnsiStrLIComp(pchar(Rel), pchar(s[i]), length(Rel)) = 0) then rList.Add(keyAcadRegRoot + '\' + s[i]); for i := 0 to rList.Count - 1 do begin r.CloseKey; r.OpenKey(rList[i], false); s.Clear; r.GetKeyNames(s); for c := 0 to s.Count - 1 do begin if (AnsiStrLIComp('ACAD', pchar(s[c]), 4) = 0) then begin r.CloseKey; if r.OpenKey(rList[i] + '\' + s[c], false) then begin lst.Add(copy(rList[i], (LastDelimiter('\', rList[i]) + 1), maxInt) + '\' + s[c] + '=' + r.ReadString('ProductName') + ' ' + r.ReadString('Language') + ', ' + Rel); end; end; end; end; end; s.Free; rList.Free; r.CloseKey; r.Free; end; begin GetAcadReleaseList('R14'); GetAcadReleaseList('R15'); GetAcadReleaseList('R16'); GetAcadReleaseList('R17'); end;
Только желательно указать, что keyAcadRegRoot='SOFTWARE\Autodesk\AutoCAD' - так, кажется?
> kpblc
Сам догадается кому надо. Или как Shareware пойдет
Я слышал, что программа сделанная для одной версии AutoCAD работает с библиотекой данной версии.
А программа сделанная для другой версии AutoCAD работает с библиотекой данной версии.
Вот я сделал прогу для AutoCAD 2002, а с 2004 прога не заработала.
Где-то читал, что для 2004 уже используется другая библиотека типов или объектов. Эта библиотека подключается именно при компиляции
Как тогда быть ?
Гхм... Купить и прочитать "САПР на базе..." - там разобрано.
> Alexys
Не надо импортировать библиотеку типов. В ней происаны конкретные GUID для версии AutoCAD. В другой версии будут другие.
Надо использовать позднее связывание - то есть обращение к AutoCAD.Application, AutoCAD.Application.16 и т.д. Как определить нужный AutoCAD.Application в runtime - отдельный вопрос.
Не укладывать на форму никаких компонентов Acad*!
Если не использовать компонент акад, то помощь в выборе свойств и методов видна не будет. Вроде так ? И результат написания кода (ошибки) будут выявляться при запуске, а не при отладке. Это неудобно. Но с другой стороны можно сначала с компонентом что-то написать, а на заключительном этапе его убрать. Так уважаемые профи?
Страницы 1
Чтобы отправить ответ, вы должны войти или зарегистрироваться
Форумы CADUser → Программирование → Delphi → Как на Delphi выбрать с каким релизом AutoCAD работать ?
Форум работает на PunBB, при поддержке Informer Technologies, Inc