Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Не могу перехватить событие от ActiveX / 8 сообщений из 8, страница 1 из 1
15.07.2004, 12:33
    #32605689
SpaceDescent
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не могу перехватить событие от ActiveX
Необходимо обрабатывать события от 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
15.07.2004, 14:55
    #32606158
Processor
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не могу перехватить событие от ActiveX
Public Sub SetPivotTable(a_ptable As Object)
Попробуй
Код: plaintext
a_ptable As Variant
...
Рейтинг: 0 / 0
16.07.2004, 10:28
    #32607457
SpaceDescent
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не могу перехватить событие от ActiveX
Processor Public Sub SetPivotTable(a_ptable As Object)
Попробуй
Код: plaintext
a_ptable As Variant


Та же фигня. Либо Type Mismatch, либо уже на CopyMemory валится :(
...
Рейтинг: 0 / 0
16.07.2004, 11:34
    #32607629
Processor
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не могу перехватить событие от ActiveX
Поставь точку останова на
Код: plaintext
Set ptable = a_ptable ' <- Вот тут валится с "Type Mismatch"
и посмотри свойства объекта-параметра a_ptable
...
Рейтинг: 0 / 0
16.07.2004, 14:23
    #32608224
Antonariy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не могу перехватить событие от ActiveX
Попробуй
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
19.07.2004, 11:12
    #32610091
SpaceDescent
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не могу перехватить событие от ActiveX
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
19.07.2004, 11:38
    #32610178
SpaceDescent
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не могу перехватить событие от ActiveX
..и ещё вопрос в кучу..

Почитал 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
19.07.2004, 17:04
    #32611162
SpaceDescent
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не могу перехватить событие от ActiveX
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
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Не могу перехватить событие от ActiveX / 8 сообщений из 8, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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