I love VB! (COM/ActiveX как реализовать события?)

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
VisualFreeBasic
Начинающий
Начинающий
 
Сообщения: 12
Зарегистрирован: 14.02.2021 (Вс) 20:28

Re: I love VB! (COM/ActiveX как реализовать события?)

Сообщение VisualFreeBasic » 16.02.2021 (Вт) 21:28

how to get args name,args type,can you test?

Код: Выделить всё
Private WithEvents m    As clsObjectExtender
Private c               As Object
Private Sub LoadExcel_Click()
     Set m = New clsObjectExtender


    Set c = CreateObject("excel.application")
  If Not m.Attach(c) Then
        MsgBox "couldn't connect to c", vbExclamation
        Exit Sub
    End If

    c.Visible = True
    c.WorkBooks.Add
End Sub

Private Sub m_EventRaised(ByVal strName As String, params() As Variant)
    On Error Resume Next
    Dim i    As Long

    MsgBox "Event " & strName

    ' event name
    Debug.Print "m_Event: " & strName, ;

    ' test the bounds
    i = UBound(params)
    If Err Then
        Debug.Print ""
        Exit Sub
    End If

    ' parameters values
    For i = 1 To UBound(params)
        If IsObject(params(i)) Then
             Debug.Print "Param " & i & ": IS OBJECT "
        Else
            Debug.Print "Param " & i & ": " & params(i), ;
        End If
    Next

    Debug.Print ""
End Sub


change sub for support object Params(args) :
Код: Выделить всё
Private Function pvGetParamArray(ByVal Ptr As Long) As Variant()
    Dim tDPAR           As DISPPARAMS
    Dim SafeArray       As SAFEARRAY_1D
    Dim aTmpParams()    As Variant
    Dim aParams()       As Variant
    Dim lIdx            As Long

    ' DISPPARAMS structure
    CpyMem tDPAR, ByVal Ptr, Len(tDPAR)
    If tDPAR.cArgs = 0 Then Exit Function

    ' array pointing to the param array
    With SafeArray
        .Bounds(0).cElements = tDPAR.cArgs
        .Bounds(0).lLBound = 0
        .cDims = 1
        .cbElements = 16
        .pvData = tDPAR.rgPointerToVariantArray
    End With
    CpyMem ByVal VarPtrArray(aTmpParams), VarPtr(SafeArray), 4&

    ' copy elements
    ReDim aParams(1 To tDPAR.cArgs)
    For lIdx = 1 To tDPAR.cArgs
       
        If IsObject(aTmpParams(tDPAR.cArgs - lIdx)) Then
       
            Set aParams(lIdx) = aTmpParams(tDPAR.cArgs - lIdx)
        Else
            aParams(lIdx) = aTmpParams(tDPAR.cArgs - lIdx)
        End If
    Next

    ' return the parameters
    pvGetParamArray = aParams

    ' destroy the array
    CpyMem ByVal VarPtrArray(aTmpParams), 0&, 4&
End Function
Вложения
events for late-bound objects.zip
(8 Кб) Скачиваний: 104

kibernetics
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 945
Зарегистрирован: 03.05.2006 (Ср) 13:31
Откуда: Minsk

Re: I love VB! (COM/ActiveX как реализовать события?)

Сообщение kibernetics » 26.02.2021 (Пт) 23:18

А что VisualFreeBasic тут навыкладывал, кто мог бы прояснить?

Пред.

Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: Yandex-бот и гости: 6

    TopList