Тема: нужен пример OCX

Нужен любой сэмпл осх написанный на VB, который умеет хотябы рисовать линию в автокаде. т.е. чтоб я на VBA написал myActivex.Line. и начал вести линию.

Re: нужен пример OCX

Смысл? Почему ocx?

Re: нужен пример OCX

Не плохой ответ :)
смысл в том, чтоб основной код держать в ocx, его не так просто просмотреть и откорректировать как dvb, это защитит, от бонального копирования как dvb.

Re: нужен пример OCX

Напиши dll на VB. В семплах есть пример как это сделать.

Re: нужен пример OCX

Можно запаролить dvb. Но как-бы я уже страдал от своей пранои ...

Re: нужен пример OCX

> Сергей
Да как прицепить dll я знаю, я видел там один сэмпл который возвращает вроде сумму двух чесел. Мне это не потходит, мне нужен доступ к ThisDrawing

Можно запаролить dvb

это конечно круто, но что с ним, что без него это почти одно и то же.

Re: нужен пример OCX

Ну и вчем проблема? Так-же получишь ThisDrawing из dll. Ты просто в референсах не забудь библиотеку акадовскую показать.

Re: нужен пример OCX

Ты ThisDrawing я так понимаю в dll можешь передавать как переменную ...
Может ерунду сказал но exe файл для работы с акадом на VB я писал...

Re: нужен пример OCX

Спасибо всем вот решение.
Листинг 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
А дальше уже дело техники :)

(изменено: Durimar, 2 декабря 2009г. 09:38:37)

Re: нужен пример OCX

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

Заранее спасибо.

Re: нужен пример OCX

Вот что мне нут не нравится. Вы передаете ThisDrawing в функции TestDllSub в ней он становится Element.
А дальше вы пишете

            For Each Element In ssetObj 
            'перебор элементов 
            Next Element

Re: нужен пример OCX

Если есть у Вас возможность перейти на .NET переходите время окупится с лихвой. Я писал под ACAD только на VB6, если сейчас пришлось бы что то написать то точно бы смотрел вначале на .NET