powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Не могу перехватить событие от ActiveX
8 сообщений из 8, страница 1 из 1
Не могу перехватить событие от ActiveX
    #32605689
SpaceDescent
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Необходимо обрабатывать события от ActiveX, ссылку на который получаю во время выполнения. Делаю так:

Вариант 1)

Private WithEvents ptable As OWC10.PivotTable

Public Sub SetPivotTable(a_ptable As Object) ' вот эта самая ссылка
Dim obj As Object
Set ptable = a_ptable ' <- Вот тут валится с "Type Mismatch"
LabelText.Caption = ptable.Version
End Sub

Вариант 2) (пробуем избежать Type Mismatch)

Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" _
(pDst As Any, pSrc As Any, ByVal ByteLen As Long)
Private WithEvents ptable As OWC10.PivotTable

Public Sub SetPivotTable(a_ptable As Object)
Dim obj As Object
Set obj = a_ptable
CopyMemory ptable, obj, 4
LabelText.Caption = ptable.Version
End Sub

' ругается "Object variable or With block variable is not set"


Вариант 3) (пробуем избежать Type Mismatch и предыдущего глюка)

Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" _
(pDst As Any, pSrc As Any, ByVal ByteLen As Long)
Private WithEvents ptable As OWC10.PivotTable
Private ptabletmp As OWC10.PivotTable

Public Sub SetPivotTable(a_ptable As Object)
Dim obj As Object
Set obj = a_ptable
CopyMemory ptabletmp, obj, 4
Set ptable = ptabletmp ' <- ругается "Object or class does not support the set of events"
LabelText.Caption = ptable.Version
End Sub



Что делать?
...
Рейтинг: 0 / 0
Не могу перехватить событие от ActiveX
    #32606158
Processor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Public Sub SetPivotTable(a_ptable As Object)
Попробуй
Код: plaintext
a_ptable As Variant
...
Рейтинг: 0 / 0
Не могу перехватить событие от ActiveX
    #32607457
SpaceDescent
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Processor Public Sub SetPivotTable(a_ptable As Object)
Попробуй
Код: plaintext
a_ptable As Variant


Та же фигня. Либо Type Mismatch, либо уже на CopyMemory валится :(
...
Рейтинг: 0 / 0
Не могу перехватить событие от ActiveX
    #32607629
Processor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Поставь точку останова на
Код: plaintext
Set ptable = a_ptable ' <- Вот тут валится с "Type Mismatch"
и посмотри свойства объекта-параметра a_ptable
...
Рейтинг: 0 / 0
Не могу перехватить событие от ActiveX
    #32608224
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Попробуй
1) Public Sub SetPivotTable(a_ptable As OWC10.PivotTable)
2)
Public Sub SetPivotTable(a_ptable As Object)
Dim ptr as Long
ptr = ObjPtr(a_ptable)
CopyMemory ptable, ptr, 4
LabelText.Caption = ptable.Version
End Sub
...
Рейтинг: 0 / 0
Не могу перехватить событие от ActiveX
    #32610091
SpaceDescent
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
AntonariyПопробуй
1) Public Sub SetPivotTable(a_ptable As OWC10.PivotTable)
2)
Public Sub SetPivotTable(a_ptable As Object)
Dim ptr as Long
ptr = ObjPtr(a_ptable)
CopyMemory ptable, ptr, 4
LabelText.Caption = ptable.Version
End Sub

1) Не проходит - "Private object modules cannot be used in public object modules as parameters or return types..."

2) Оно нормально, если объект объявлен без "Withevents", а так - "Object variable or With block variable not set" :(
...
Рейтинг: 0 / 0
Не могу перехватить событие от ActiveX
    #32610178
SpaceDescent
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
..и ещё вопрос в кучу..

Почитал http://www.ftponline.com/wss/2002_07/online/exchange_pcardoza_07_22_02/default.aspx

Решил сделать по образу и подобию..
Вот так:

Implements OWC10.IPivotControlEvents
.....

Private Sub IPivotControlEvents_SelectionChange()
End Sub

Private Sub IPivotControlEvents_ViewChange(ByVal Reason As PivotViewReasonEnum)
End Sub
....


И тут самое интересное - доходим до метода CommandEnabled(...).
Далее цитирую из MS OWC VB Reference:

"Private Sub object_CommandEnabled (ByVal Command As Variant, ByVal Enabled As ByRef)"

Как вам последний параметр? Точнее его тип?
Object Browser такой же тип показывает..
Естественно это не компилится.

А если через OleView посмотреть - то :

[id(0x000003e8), helpcontext(0x0701910f)]
void CommandEnabled(
VARIANT Command,
ByRef* Enabled);

Вопрос: как сие ("ByRef* Enabled") на VB выразить?
...
Рейтинг: 0 / 0
Не могу перехватить событие от ActiveX
    #32611162
SpaceDescent
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
SpaceDescent

"Private Sub object_CommandEnabled (ByVal Command As Variant, ByVal Enabled As ByRef)"

Как вам последний параметр? Точнее его тип?
Object Browser такой же тип показывает..
Естественно это не компилится.

А если через OleView посмотреть - то :

[id(0x000003e8), helpcontext(0x0701910f)]
void CommandEnabled(
VARIANT Command,
ByRef* Enabled);

Вопрос: как сие ("ByRef* Enabled") на VB выразить?

Этот вопрос отпал.. Чего стоит определение "interface ByRef : IDispatch" из OWC10.dll !!!
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Не могу перехватить событие от ActiveX
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]