powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Передача MSHFlexGrid в ActiveX DLL из Access (c WithEvents)
11 сообщений из 11, страница 1 из 1
Передача MSHFlexGrid в ActiveX DLL из Access (c WithEvents)
    #33076647
Фотография nibbles
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Столкнулся с проблемой - делал ActiveX DLL для использования в Access 2000. В DLL предполагается передавать ссылку на объект класса MSHFlexGrid таким образом, чтобы можно было обрабатывать события этого объекта (т.е. c WithEvents). Пишу:
В описании ActiveX DLL в классе clsMyClass:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
Private mvarFlexGrid        As Object
Private WithEvents myGrid   As MSHFlexGrid

Public Property Set FlexGrid(ByVal vData As Object)
    Set mvarFlexGrid = vData
End Property

Public Property Get FlexGrid() As Object
    Set FlexGrid = mvarFlexGrid
End Property

Public sub TestMetod
    Set myGrid   = mvarFlexGrid
    ' А также Set myGrid   = Me.FlexGrid
end sub
В Access подключаю DLL и вот тут-то и получаю ошибку "Type mismatch" на выполнении метода myProdFace.TestMetod:
Код: plaintext
1.
2.
3.
4.
Private sub cmdFacadeEdit_Click()
dim myProdFace  as new aProductVirtualGrid.clsProductVirtual
    Set myProdFace.FlexGrid = myGrid
    myProdFace.TestMetod
end sub
Кто сталкивался и чем лечили?
...
Рейтинг: 0 / 0
Передача MSHFlexGrid в ActiveX DLL из Access (c WithEvents)
    #33076668
Фотография Konst_One
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а зачем
Код: plaintext
as Object
, тогда уж сразу
Код: plaintext
as MSHierarchicalFlexGridLib.MSHFlexGrid
...
Рейтинг: 0 / 0
Передача MSHFlexGrid в ActiveX DLL из Access (c WithEvents)
    #33076684
Фотография nibbles
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Konst_Oneа зачем
Код: plaintext
as Object
, тогда уж сразу
Код: plaintext
as MSHierarchicalFlexGridLib.MSHFlexGrid

тогда будет Type mismatch при использовании в Access
...
Рейтинг: 0 / 0
Передача MSHFlexGrid в ActiveX DLL из Access (c WithEvents)
    #33076821
ддд
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
по существу вопроса ничего не скажу.

а вообще соображения такие
1) Акцесс может и сам установить ссылку на MSHFlexGrid
(это, видимо, не то, что Вам надо)

2) В рамках Вашей библиотеки нужно просто инкапсулировать MSHFlexGrid
в свой ActiveX контрол. Его и отдавать Акцессу. (Если акцессу нужен именно
контрол, стандартными средстами размещаемый на форме Акцесса)
В рамках этого контрола Вам придется определить соответствующие MSHFlexGrid события. См. создание ActiveX контролов.

3) Если речь идет о модальной форме в dll и некотором объекте-менеджере,
управляющим ею, то в таком менеджере нужные события придется и определить и позаботиться об их распространении.

В любом случае
Public Property Get [my]FlexGrid() As I[my]FlexGrid

Set [my]FlexGrid = mvarFlexGrid
End Property

превратится либо в метод GlobalmultiUse класса, где mvarFlexGrid
реализует один из публично заявленных в dll интерфейсов,
либо в нечто типа

Implements I[my]FlexGrid
...
Public Property Get [my]FlexGrid() As I[my]FlexGrid
Set [my]FlexGrid = Me
End Property

так я думаю...
...
Рейтинг: 0 / 0
Передача MSHFlexGrid в ActiveX DLL из Access (c WithEvents)
    #33076853
Фотография nibbles
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
дддпо существу вопроса ничего не скажу.
...
2) В рамках Вашей библиотеки нужно просто инкапсулировать MSHFlexGrid
в свой ActiveX контрол. Его и отдавать Акцессу. (Если акцессу нужен именно
контрол, стандартными средстами размещаемый на форме Акцесса)
В рамках этого контрола Вам придется определить соответствующие MSHFlexGrid события. См. создание ActiveX контролов.
...
Хотелось бы все-таки по существу вопроса - о создании контрола ActiveX я уже думал, но это займет много больше времени, чем я хотел бы уделить этому проекту - сами понимаете, на выходных хочется отдохнуть, а не корпеть над клавиатурой :))
...
Рейтинг: 0 / 0
Передача MSHFlexGrid в ActiveX DLL из Access (c WithEvents)
    #33076887
ддд
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
по существу вопроса - ну нету барсика под рукой и по памяти не помню...

очень может быть что

Public sub TestMetod
Set myGrid = mvarFlexGrid
' А также Set myGrid = Me.FlexGrid
end sub

должен выглядеть так

Public sub TestMetod
Set myGrid = mvarFlexGrid
' А также Set myGrid = Me.FlexGrid.Object
end sub

Однако, если у Вас получится номер с перехватом событий в Акцессе
(чего я никак не ожидаю), пожалуйста, обязательно сообщите об этом отдельно.


ЗЫ
про выходные - тут как раз дождь пошел...
Может все таки подумать, как провести время?
...
Рейтинг: 0 / 0
Передача MSHFlexGrid в ActiveX DLL из Access (c WithEvents)
    #33076938
Фотография nibbles
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
дддпо существу вопроса - ну нету барсика под рукой и по памяти не помню...

очень может быть что

Public sub TestMetod
Set myGrid = mvarFlexGrid
' А также Set myGrid = Me.FlexGrid
end sub

должен выглядеть так

Public sub TestMetod
Set myGrid = mvarFlexGrid
' А также Set myGrid = Me.FlexGrid.Object
end sub

Однако, если у Вас получится номер с перехватом событий в Акцессе
(чего я никак не ожидаю), пожалуйста, обязательно сообщите об этом отдельно.

Использование свойства .Object не поможет (уже пробовал - так можно выкрутиться, если класс описан в модуле класса Access). Судя по всему дело в различном способе хранения информации о контролах на формах - Access хранит (если ошибаюсь - поправьте) не сам объект, а свободную рамку (читай, изображение) объекта.
Так что придется перепланировать выходные... :((
ддд
ЗЫ
про выходные - тут как раз дождь пошел...
Может все таки подумать, как провести время?

Читаете мысли, батенька...
...
Рейтинг: 0 / 0
Передача MSHFlexGrid в ActiveX DLL из Access (c WithEvents)
    #33077085
ддд
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
про .Object Вы правы.
однако, в чем именно дело, не скажу.

Имена классов у Вас там не попутаны часом?

настораживает
Private WithEvents myGrid As MSHFlexGrid
-это иерархический грид

а тут?

' А также Set myGrid = Me.FlexGrid

редактор форм так назвал бы "обычный" грид...
да и то - не так, а как-нибудь Me.FlexGrid1 или Me.FlexGrid(1)
...
Рейтинг: 0 / 0
Передача MSHFlexGrid в ActiveX DLL из Access (c WithEvents)
    #33077155
Фотография nibbles
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
дддпро .Object Вы правы.
однако, в чем именно дело, не скажу.

Имена классов у Вас там не попутаны часом?

настораживает
Private WithEvents myGrid As MSHFlexGrid
-это иерархический грид

а тут?

' А также Set myGrid = Me.FlexGrid

редактор форм так назвал бы "обычный" грид...
да и то - не так, а как-нибудь Me.FlexGrid1 или Me.FlexGrid(1)
это свойство класса - путанницы тут нет
Код: plaintext
1.
2.
Public Property Get FlexGrid() As Object
    Set FlexGrid = mvarFlexGrid
End Property
...
Рейтинг: 0 / 0
Передача MSHFlexGrid в ActiveX DLL из Access (c WithEvents)
    #33077217
ддд
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ладно, переспрошу..
:))
Вы уверены
что в этот метод
Код: plaintext
1.
2.
Public Property Set FlexGrid(ByVal vData As Object)
    Set mvarFlexGrid = vData
End Property

отдаете экземпляр MSHFlexGrid?

поставьте что-то такое ( уточните у F1)

Код: plaintext
1.
2.
3.
4.
5.
Public Property Set FlexGrid(ByVal vData As Object)
  If TypeOf vData Is MSHFlexGrid then
    Set mvarFlexGrid = vData
  else
   msgBox "Не туда попали!"
endif
End Property
...
Рейтинг: 0 / 0
Передача MSHFlexGrid в ActiveX DLL из Access (c WithEvents)
    #33077475
Фотография nibbles
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ясно. Надежда спасти выходные еще была, по этому начал тестировать:

при Set myProdFace.FlexGrid = myGrid тип контрола равен "CustomContorl" и если в классе использовать переменную типа Object или Variant, то через нее можно работать со свойствами от MSHFlexGrid. При попытке передать ссылку на эту переменную переменной класса MSHFlexGrid - "несоответствие типов" или "объект не поддерживает указанное свойство/метод".

при Set myProdFace.FlexGrid = myGrid.Object тип контрола равен "MSHFlexGrid" и при использовании переменных любых типов происходят исключения "несоотв. типов" или "объект не поддерживает...".

Член-свойство FlexGrid класса myProdFace объявлялся и через Get Property и (прости, Билли) через Let Prpperty и через Public. Классы выбирались Object, Variant и MSHFlexGrid.

Залез в Access'е в F2 и обнаружил, что вообще любые объектные переменные моей библиотеки вне зависимости от того, как они объявлены, в Access предоставляются, как Object.
...
Рейтинг: 0 / 0
11 сообщений из 11, страница 1 из 1
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Передача MSHFlexGrid в ActiveX DLL из Access (c WithEvents)
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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