Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Загрузить ActiveX Control с помощью CreateObject без подключения библиотеки типов / 5 сообщений из 5, страница 1 из 1
05.10.2010, 12:43
    #36882097
BCP
BCP
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Загрузить ActiveX Control с помощью CreateObject без подключения библиотеки типов
Есть ActiveX Control, написанный на VB6.
Хочу вставить его на форму Borland C++Builder () без создания bpl и использования библиотеки типов.

следующий код работает (если не ошибся с paste):
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
// в объявлении класса формы "f.h"
class F: public TForm
{
//........
    Variant m_Object;
    HANDLE m_HWND;
};
// в f.cpp

    m_Object = Variant::CreateObject("XContrlCreateTest.UserControl1");
    m_HWND = (void*)int(m_Object.OlePropertyGet("ControlHWND")); //свойство, которое возвращает HANDLE контрола

    ::SetParent( m_HWND, pnlControl->Handle); // pnlControl - родительское окно, куда будет положен мой контрол
    ::SetWindowPos ( m_HWND,  0 ,  0 ,  0 , pnlControl->Width, pnlControl->Height, SWP_SHOWWINDOW);

//    int iStyle = ::GetWindowLong(pnlControl->Handle, GWL_STYLE);
//    iStyle |= WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS | WS_BORDER | WS_TABSTOP;
Похожий код и при подключении с VB6, только синтаксис другой.

Контрол создаётся, кладётся на форму и почти работает.
"Почти" - потому, что у контрола :
1. Не работает Tab Stop
2. Не работает OleDrop
3. Не срабатывают события UserControl_Show и UserControl_Resize .

Особенно важно UserControl_Resize.

Пробовал вызывать
Код: plaintext
1.
::MoveWindow(m_HWND,  0 , 0 , pnlControl->Width -  20 , pnlControl->Height -  20 , true);
- результат - контрол ресайзится, но обработчик "UserControl_Resize" не вызывается :(

Пожалуйста, помогите советом: как сделать, чтобы это окошко стало работать полноценно?

P.S. В примере также проект для VB
...
Рейтинг: 0 / 0
05.10.2010, 12:56
    #36882152
Antonariy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Загрузить ActiveX Control с помощью CreateObject без подключения библиотеки типов
BCPПожалуйста, помогите советом: как сделать, чтобы это окошко стало работать полноценно?Забить на UserControl_Resize и обрабатывать изменение размера через WM_SIZE.
...
Рейтинг: 0 / 0
05.10.2010, 13:21
    #36882258
Загрузить ActiveX Control с помощью CreateObject без подключения библиотеки типов
BCP,

почитайте , что должен уметь ActiveX Control Container.
...
Рейтинг: 0 / 0
05.10.2010, 14:26
    #36882501
BCP
BCP
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Загрузить ActiveX Control с помощью CreateObject без подключения библиотеки типов
Antonariy , да, спасибо, об этом я забыл. Только там сложности с возвратом в контрол из оконной функции, и с удалением не всё ясно

13-й квартал , спасибо, это навело на мысль поюзать специальный "TOleContainer"
Код: plaintext
1.
2.
3.
    OleContainer1->CreateObject("XContrlCreateTest.UserControl1",false);
    m_Object = OleContainer1->OleObject;
    m_HWND = (void*)int(m_Object.OlePropertyGet("ControlHWND"));
Тогда "UserControl_Resize" срабатывает только 1 раз при создании объекта, но в дальше при ресайзе TOleContainer-а не работает.

Возможно, тему стоило завести в ветке C++ ...
...
Рейтинг: 0 / 0
05.10.2010, 15:27
    #36882723
Загрузить ActiveX Control с помощью CreateObject без подключения библиотеки типов
BCP,

ContainersAn ActiveX Control container is an OLE container that supports the following additional features...Т. е. функциональности TOleContainer скорее всего будет недостаточно. Попробуйте поискать компонент типа этого (работоспособность не проверял, сужу по описанию).
...
Рейтинг: 0 / 0
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Загрузить ActiveX Control с помощью CreateObject без подключения библиотеки типов / 5 сообщений из 5, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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