ActiveX форма
От: denser  
Дата: 23.08.05 03:23
Оценка:
Доброе время суток.

Имеется одна библиотека, в которой есть форма и класс.

Необходимо из другой библиотеки (приложения)
взять эту форму со всеми её (и её контролов) свойствами и методами.

Именно "Взять" как объект (ссылку на объект), а не вызвать,
так как при взятии требуется только hWnd уже созданного объекта

Библиотеки работют из под ArcGis 9x (моет кто сталкивался)

вот код вызова:

Private Property Get IContentsView_hWnd() As esriSystem.OLE_HANDLE
IContentsView_hWnd = Form1.Frame1.hWnd
End Property

form1 находится в этом же проекте и такой способ работает,
а мне надо взять форму из другого проекта

Спасибо.
Re: ActiveX форма
От: rockandroll Казахстан  
Дата: 23.08.05 07:58
Оценка:
Здравствуйте, denser, Вы писали:

D>Доброе время суток.


D>Имеется одна библиотека, в которой есть форма и класс.


...

D>form1 находится в этом же проекте и такой способ работает,

D>а мне надо взять форму из другого проекта

Библиотеку надо оформить как ActiveX DLL или ActiveX control, скомпилировать и зарегистрировать.
В другом проекте установить reference на библиотеку
Создавать объекты можно через new или CreateObject
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[2]: ActiveX форма
От: denser  
Дата: 23.08.05 10:51
Оценка:
Здравствуйте, rockandroll, Вы писали:

R>Библиотеку надо оформить как ActiveX DLL или ActiveX control, скомпилировать и зарегистрировать.


да да, конечно, это сделано.

R>В другом проекте установить reference на библиотеку


и это да.

R>Создавать объекты можно через new или CreateObject


через new, знаю.

Но вот тоьлко в чём засада:

в классе нельзя объявить public переменную типа userформы, да и ваще ни одной public переменной

можно объявить публичную функцию, но и она не может вернуть объект типа формы.
Re[3]: ActiveX форма
От: rockandroll Казахстан  
Дата: 23.08.05 11:30
Оценка:
Здравствуйте, denser, Вы писали:


D>Но вот тоьлко в чём засада:


D>в классе нельзя объявить public переменную типа userформы, да и ваще ни одной public переменной


D>можно объявить публичную функцию, но и она не может вернуть объект типа формы.


Так тебе же hwnd нужен а не сама форма?
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[4]: ActiveX форма
От: denser  
Дата: 23.08.05 11:37
Оценка:
Здравствуйте, rockandroll, Вы писали:

R>Так тебе же hwnd нужен а не сама форма?


да, но форма должна быть создана до обращения,

пробовал так:
Private Sub Class_Initialize()
переменная=новая форма
End Sub

а Class_Initialize почему-то срабатывает каждый раз при попадании
фокуса на форму или компонент с формы или при изменении размера (?)
и она создаётся каждый раз новая
Re[4]: ActiveX форма
От: denser  
Дата: 23.08.05 11:52
Оценка:
rockandroll спасибо.

допёрло, вопрос можно считать закрытым.

может кому пригодится:

это в классе, который надо вызвать:

class MyClass

Public Property Get phWnd() As Variant
phWnd = Form1.Frame1.hWnd
End Property

Public Property Let phWnd(ByVal vNewValue As Variant)
phWnd = Form1.Frame1.hWnd
End Property

тут конечно логическая ошибка, но всё равно сработает, Let и Get надо различить, но это мелочи


а вот как вызвать form1 из другой библиотеки (повторю всё делается для работы из под arcgis):

class MyClass2

Private pForm As MyClass

Private Sub Class_Initialize()
Set pForm = New MyClass
End Sub

Private Property Get IContentsView_hWnd() As esriSystem.OLE_HANDLE
IContentsView_hWnd = pForm.phWnd
End Property

форма ж уже и сама создаётся при инициализации, но только нельзя ничего писать в
Class_Initialize для MyClass, ато срабатывает постоянно (это точно).
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.