Тема: нужен пример OCX
Нужен любой сэмпл осх написанный на VB, который умеет хотябы рисовать линию в автокаде. т.е. чтоб я на VBA написал myActivex.Line. и начал вести линию.
Информационный портал для профессионалов в области САПР
Вы не вошли. Пожалуйста, войдите или зарегистрируйтесь.
Форумы CADUser → Программирование → VBA → нужен пример OCX
Страницы 1
Чтобы отправить ответ, вы должны войти или зарегистрироваться
Нужен любой сэмпл осх написанный на VB, который умеет хотябы рисовать линию в автокаде. т.е. чтоб я на VBA написал myActivex.Line. и начал вести линию.
Не плохой ответ :)
смысл в том, чтоб основной код держать в ocx, его не так просто просмотреть и откорректировать как dvb, это защитит, от бонального копирования как dvb.
Напиши dll на VB. В семплах есть пример как это сделать.
Можно запаролить dvb. Но как-бы я уже страдал от своей пранои ...
> Сергей
Да как прицепить dll я знаю, я видел там один сэмпл который возвращает вроде сумму двух чесел. Мне это не потходит, мне нужен доступ к ThisDrawing
Можно запаролить dvb
это конечно круто, но что с ним, что без него это почти одно и то же.
Ну и вчем проблема? Так-же получишь ThisDrawing из dll. Ты просто в референсах не забудь библиотеку акадовскую показать.
Ты ThisDrawing я так понимаю в dll можешь передавать как переменную ...
Может ерунду сказал но exe файл для работы с акадом на VB я писал...
Спасибо всем вот решение.
Листинг ActiveX dll (ExternalFunction.dll) + в реферансах AutoCAD
Public Sub ss(ac As Object) ac.ActiveLayer.Color = acCyan End Sub
Листинг VBA
Dim VB6DLL As Object Set VB6DLL = ThisDrawing.Application.GetInterfaceObject("ExternalFunction.MyClass") VB6DLL.ss ThisDrawing
Результат окрашен текущий лэер в цвет acCyan
А дальше уже дело техники :)
SmeL, спасибо, Ваш код проясняет ситуацию. У меня теперь возникла очередная проблема. Мой код выполняется, но спустя некоторое время после выполнения (буквально несколько секунд), а иногда и во время выполнения, получаю FATALL ERROR. Код принципиально отличается совершенно незначительно.
Листинг ActiveX dll
Public Sub TestDllSub(Element As Object) Dim ssetObj As AcadSelectionSet Dim mode As Integer Dim gpCode(0) As Integer Dim dataValue(0) As Variant Dim groupCode As Variant, dataCode As Variant Set ssetObj = AcadApplication.ActiveDocument.SelectionSets.Add("SelSet") mode = acSelectionSetAll ssetObj.Select mode If (ssetObj.Count > 0) Then For Each Element In ssetObj 'перебор элементов Next Element End If ssetObj.Delete End Sub
Листинг VBA
Private Function dll_test() Dim VB6DLL As Object Set VB6DLL = ThisDrawing.Application.GetInterfaceObject("TestDllSub.Class1") VB6DLL.TestDllSub ThisDrawing Set VB6DLL = Nothing End Function
Заранее спасибо.
Вот что мне нут не нравится. Вы передаете ThisDrawing в функции TestDllSub в ней он становится Element.
А дальше вы пишете
For Each Element In ssetObj 'перебор элементов Next Element
Если есть у Вас возможность перейти на .NET переходите время окупится с лихвой. Я писал под ACAD только на VB6, если сейчас пришлось бы что то написать то точно бы смотрел вначале на .NET
Страницы 1
Чтобы отправить ответ, вы должны войти или зарегистрироваться
Форумы CADUser → Программирование → VBA → нужен пример OCX
Форум работает на PunBB, при поддержке Informer Technologies, Inc