Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Передача MSHFlexGrid в ActiveX DLL из Access (c WithEvents) / 11 сообщений из 11, страница 1 из 1
20.05.2005, 12:05:12
    #33076647
nibbles
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Передача MSHFlexGrid в ActiveX DLL из Access (c WithEvents)
Столкнулся с проблемой - делал 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
20.05.2005, 12:10:56
    #33076668
Konst_One
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Передача MSHFlexGrid в ActiveX DLL из Access (c WithEvents)
а зачем
Код: plaintext
as Object
, тогда уж сразу
Код: plaintext
as MSHierarchicalFlexGridLib.MSHFlexGrid
...
Рейтинг: 0 / 0
20.05.2005, 12:15:00
    #33076684
nibbles
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Передача MSHFlexGrid в ActiveX DLL из Access (c WithEvents)
Konst_Oneа зачем
Код: plaintext
as Object
, тогда уж сразу
Код: plaintext
as MSHierarchicalFlexGridLib.MSHFlexGrid

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

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

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

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
20.05.2005, 13:26:05
    #33076938
nibbles
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Передача MSHFlexGrid в ActiveX DLL из Access (c WithEvents)
дддпо существу вопроса - ну нету барсика под рукой и по памяти не помню...

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

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
20.05.2005, 14:02:07
    #33077085
ддд
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Передача MSHFlexGrid в ActiveX DLL из Access (c WithEvents)
про .Object Вы правы.
однако, в чем именно дело, не скажу.

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

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

а тут?

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

редактор форм так назвал бы "обычный" грид...
да и то - не так, а как-нибудь Me.FlexGrid1 или Me.FlexGrid(1)
...
Рейтинг: 0 / 0
20.05.2005, 14:17:52
    #33077155
nibbles
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Передача MSHFlexGrid в ActiveX DLL из Access (c WithEvents)
дддпро .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
20.05.2005, 14:33:41
    #33077217
ддд
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Передача MSHFlexGrid в ActiveX DLL из Access (c WithEvents)
ладно, переспрошу..
:))
Вы уверены
что в этот метод
Код: 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
20.05.2005, 15:37:27
    #33077475
nibbles
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Передача MSHFlexGrid в ActiveX DLL из Access (c WithEvents)
Ясно. Надежда спасти выходные еще была, по этому начал тестировать:

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


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