С Новым годом! Форум программистов, компьютерный форум, киберфорум
VBA
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.60/25: Рейтинг темы: голосов - 25, средняя оценка - 4.60
52 / 0 / 1
Регистрация: 23.04.2012
Сообщений: 6
1

Программное создание контрола ActiveX библиотеки ocx

23.04.2012, 14:17. Показов 4589. Ответов 9
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Доброго времени суток, форумчане!
Возникла необходимость на форму MS Access кинуть компонент из библиотеки *.ocx...
через
Visual Basic
1
Application.CreateControl("Form_name", acCustomControl, , "", "MapCtrl1", 100, 100)
компонент создается, но исключительно как acCustomControl, т.е. не опознанный.
как можно указать для созданного контрола класс и библиотеку компонентов?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
23.04.2012, 14:17
Ответы с готовыми решениями:

Как работать с MSCHART20.OCX ActiveX в ASP?
В ASP обрабатываю рекордсет и хотелось бы показать юзеру результат не в таблице , а в этом...

Какой .ocx или .dll отвечает за работу контрола Data?
Народ, подскажите плиз, какой .ocx или .dll отвечает за работу этого стандартного контрола?

ActiveX MSCOMCT2.OCX в ASP на W2003 server не пашет
Господа, проблема такая - не отображается ActiveX компонент DatePicker (MSCOMCT2.OCX) на странице...

Опять про MSCOMCTL.OCX ActiveX (x86-x64)
MSCOMCTL.OCX гонял версий разных. Не хотят видеть x64 Access-ы (2010, 2013) ListView TreeView......

9
2785 / 717 / 106
Регистрация: 04.02.2011
Сообщений: 1,443
23.04.2012, 14:47 2
Ну, я полагаю обычным способом: зарегистрировать ocx в системе (если это ещё не было сделано), далее полключить его к ToolBox и потом уже вручную бросить на форму. В Access 2007 использовать кнопку "Элементы ActiveX" на вкладке конструктор в режиме конструктор.
0
52 / 0 / 1
Регистрация: 23.04.2012
Сообщений: 6
23.04.2012, 14:54  [ТС] 3
Это все превосходно, но дело в том, что я не хотел бы подключать библиотеку ocx к проекту, т.к. он открывается на компьютерах без этой библиотеки.
Меня интересует - как программно кинуть контрол из библиотеки ocx?
0
1123 / 235 / 37
Регистрация: 15.03.2010
Сообщений: 723
23.04.2012, 15:11 4
Лучший ответ Сообщение было отмечено как решение

Решение

Тут посмотри
http://www.msoffice.nm.ru/faq/... htm#faq179
0
2785 / 717 / 106
Регистрация: 04.02.2011
Сообщений: 1,443
23.04.2012, 16:15 5
Выше - пример подключения ActiveX DLL, автору требуется программное размещение контрола на форме из OCX-файла. Направление верное ) Надо использовать объектную модель VBProject (с доверием управлять VBA-проектами из VBA).

А зачем такие сложности, в чем вообще суть? Ведь у кого-то OCX не установлен, там он и не будет доступен любыми путем, если не зарегистрировать предварительно OCX в системе.
0
52 / 0 / 1
Регистрация: 23.04.2012
Сообщений: 6
23.04.2012, 16:46  [ТС] 6
mc-black, все верно.
те же библиотеки и сам уже регистрирую отдельно и обращаюсь к объектам и методам через
Visual Basic
1
2
Dim db As Object
Set db = CreateObject("Zb.Database")
а вот с компонентом не получается никак...
держать на форме сторонние ActiveX компоненты постоянно не могу, ибо при копировании/открытии формы - нежный до библиотек Access (да и VBA в нем) частенько вылетает на свободные просторы оперативной памяти и растворяется в них.
0
2785 / 717 / 106
Регистрация: 04.02.2011
Сообщений: 1,443
27.04.2012, 12:15 7
А насколько нестандартные контролы имеются ввиду? Назовите контролы или опишите, что они реализуют. Некоторые из них (типа прогрессбара) можно повторить встроенными средствами, другие (Rich Text Box, TreeView) можно динамически разместить на форме при помощи Win32 API (когда система не 64-bit).
0
52 / 0 / 1
Регистрация: 23.04.2012
Сообщений: 6
27.04.2012, 12:54  [ТС] 8
стандартный набор компонентов можно поставить функцией
Application.CreateControl Me.Name, acComboBox
где acComboBox и есть стандартный контрол... но в наборе есть только безымянный acCustomControl и как ему задать свойства моего контрола - т.е. указать класс и библиотеку компонентов не знаю.
или действительно используя WinAPI это сделать, но как? 64-bit систему не рассматриваю пока, нужно чтобы в 32 работало.
0
52 / 0 / 1
Регистрация: 23.04.2012
Сообщений: 6
11.05.2012, 12:25  [ТС] 9
Лучший ответ Сообщение было отмечено как решение

Решение

проблема решена:
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
Dim myctl As Control
    DoCmd.OpenForm "Форма1", acDesign
    Set myctl = CreateControl("Форма1", acCustomControl, acDetail, "Q_Container", "", 30, 30)
    myctl.Class = "ZuluOcx.MapCtrl.1"
    myctl.OLEClass = "Zulu Map Control" 'или ctl.Properties("OLEClass") = "Slider"
    myctl.Properties("Name") = "MapCtrl0"
    myctl.Properties("Enabled") = True
    DoCmd.Restore
    myctl.TOP = 620
    myctl.Left = 220
    myctl.Width = 7200
    myctl.Height = 7600
    DoCmd.Save acForm, "Форма1"
    DoCmd.Close acForm, "Форма1"
остается зарегистрировать библиотеку http://www.vbaccelerator.com/h... ib_bas.asp и задать нужные свойства этому контролу.
всем спасибо, тему можно закрывать.
0
52 / 0 / 1
Регистрация: 23.04.2012
Сообщений: 6
16.05.2012, 17:32  [ТС] 10
не совсем до конца раскрыта тема... дело в том, что при создании acCustomControl создается пустой контейнер ActiveX компонента... соответственно его нужно наполнить его OleData.
сделать это можно двумя способами:
1) скопировать наполнитель из компонента другой формы:
Visual Basic
1
2
3
4
5
6
7
8
9
Function СозданиеАктивХ()
DoCmd.OpenForm "Template", acDesign, , , , acHidden
Set ctlLabel = CreateControl("Проба", acCustomControl, , _
, , , 1000, 3000, 300)
ctlLabel.OleData = Forms!Template!DTPicker0.OleData
ctlLabel.Properties("ControlSource") = "Дата заполнения"
DoCmd.Restore
DoCmd.Close acForm, "Template"
End Function
2) заранее сохранить OleData вручную размещенного компонента в таблицу с полем типа "Поле объекта OLE"
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
Dim rst As Recordset
Dim db As Database
 
    Set db = CurrentDb
    Set rst = db.OpenRecordset("Zulu_OLE")
    rst.MoveFirst
    rst.Edit
    rst(1) = Me!MapCtrl1.OleData
    rst(2) = Me!MapToolBar1.OleData
    rst(3) = Me!MapNavCtrl1.OleData
    rst.Update
    rst.Close
и потом уже пустой контейнер наполнять из таблицы
Visual Basic
1
MapCtrl.OleData = rst(1)
0
16.05.2012, 17:32
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
16.05.2012, 17:32
Помогаю со студенческими работами здесь

Подключение OCX ActiveX элемента НЕ в MFC приложение Win32
Привет. Подскажите пожалуйста, каким образом можно подключить ActiveX элемент в формате OCX к...

Как сделать св-во ActiveX контрола?
Привет All!!!!! Как сделать св-во ActiveX контрола что бы открывался CommonDialog 'OpenFile'...

Просмотр ActiveX контрола на другом компьютере
Moget kto-to stalkivalsya s etoi problemoi, posle packaging ActiveX Controla, ya ego pytajus'...

Использование ActiveX контрола не в форме, а в классе
Есть ActiveX контрол, предоставляющий определенный функционал. Есть ли возможность в .NET...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru