Форум: "Основная";
Текущий архив: 2004.04.04;
Скачать: [xml.tar.bz2];
ВнизКомпонент ActiveX Найти похожие ветки
← →
olookin © (2004-03-17 11:12) [0]После создания компонента ActiveX и его регистрации в системе (что, надеюсь, выполнено), в ряде приложений не могу увидеть его в списке установленных объектов ActiveX. Например, в Delphi, VBA и ActiveX Control Test Container свой объект вижу великолепно - это означает, что могу просматривать и редактировать его свойства. В Excel, Word и в ряде других программ я не вижу своего объекта в списке установленных объектов. При попытке загрузить его из файла (*.ocx) не вижу ни самого объекта, ни его свойств (хотя он и загружается), при этом объект именуется не так, как я его назвал при разработке (скажем, ACXCntrl1), а Пакет1(2,3 и т.д.).
Почему такое может происходить? Заранее спасибо.
← →
Digitman © (2004-03-17 11:22) [1]открываешь VBA-редактор любого приложения MSOffice
жмешь меню "Сервис -> Ссылки ..", открывается диал.окно со списком, находишь в списке свой объект, отмечаешь его галкой, жмешь ОК
← →
olookin © (2004-03-17 12:07) [2]Digitman © (17.03.04 11:22) [1]
Это как раз я и делал (чтобы убедиться что можно обращаться к свойствам компонента - убедился что можно). Однако даже и в этом случае мой компонент не присутствует в списке Available References (т.е. библиотек типов и компонентов), его призодится вручную грузить из файла. Не говоря уже о том, чтобы в том же офисе вставить "Объект". Там его тоже в списке нет, тоже приходится из файла грузить, но в отличие от VBA, тут я уже не могу обратиться к свойствам объекта. И кроме того, если в VBA он именуется как надо (например ACXCtrl1), то в офисе после вставки как "Объект"а он называется просто "Пакет".
Вероятно, недостаточно просто зарегистрировать Com-объект в реестре, нужно где то еще прописать его, чтобы он отображался в списке установленных компонент ActiveX (например, как это происходит для "Клип мультимедиа" или "Рисунок MSWord").
← →
Digitman © (2004-03-17 12:37) [3]проверь у себя в реестре
после корректной и полной регистрации реестр должен содержать след.ключи
1. Класс библ-ки типов, которая встроена в OCX
HKEY_CLASSES_ROOT\TypeLib\{06572E46-9B74-4949-8204-FF20AC603476}
HKEY_LOCAL_MACHINE\SOFTWARE\Classes\TypeLib\{06572E46-9B74-4949-8204-FF20AC603476}
2. GUID класса АХ-контрола
HKEY_CLASSES_ROOT\CLSID\{B3CD47FD-608F-4751-A854-AC35B6F93DB9}
3. ProgId твоего АХ-контрола
HKEY_CLASSES_ROOT\TypeLibName.AXControlName
← →
olookin © (2004-03-17 14:11) [4]Digitman © (17.03.04 12:37) [3]
Проверял, и не раз. Все на месте, но проблема как была так и осталась. Думаю, что либо нужно воспользоваться какой-то службой регистрации OLE-объектов, либо в том же реестре найти раздел, в котором размещены объекты, появляющиеся в списке по умолчанию.
← →
olookin © (2004-03-17 14:15) [5]Digitman © (17.03.04 12:37) [3]
Проверял, и не раз. Все на месте, но проблема как была так и осталась. Думаю, что либо нужно воспользоваться какой-то службой регистрации OLE-объектов, либо в том же реестре найти раздел, в котором размещены объекты, появляющиеся в списке по умолчанию.
← →
olookin © (2004-03-18 08:25) [6]Методом проб и ошибок нашел ответ на свой вопрос. Надо в реестр в разделы для моего компонента добавить еще и раздел Insertable в пустым значением. Обнаружил же я это следующим образом. Создал и зарегистрировал ActiveX объект через VC, и обнаружил, что в этом случае мой компонент отображается в списке установленных. Сравнил ветки в реестре для прежнего компонента, и для компонента, созданного через VC - и нашел, что в последнем случае имеется раздел Insertable. Вывод - хоть в плане удобства разработки программ VC сильно уступает (с моей точки зрения) Delphi, в ряде случаев VC помогает избежать лишних проблем, в частности при создании ActiveX компонентов.
← →
Cobalt © (2004-03-18 09:17) [7]Вывод, имхо, неправильный.
"В Excel, Word и в ряде других программ" имеется ряд особенностей, о которых ты не знал!
← →
Digitman © (2004-03-18 09:29) [8]не знаю почему, но разработанные мной AX-формы успешно взаимодействуют с любыми средами (в т.ч. - офисными приложениями) и никакого ключа Insertable при этом классом TActiveForm не создается в ходе регистрации
← →
olookin © (2004-03-18 12:21) [9]Digitman © (18.03.04 09:29) [8]
Я это заметил, что при разработке ActiveX через Delphi не создается ключ Insertable. А вот "успешно взаимодействуют с любыми средами" - хотелось бы уточнить что имеется в виду. Как я проверяю правильную с моей точки зрения регистрацию компонента? Запускаю Excel, выбираю "Вставка-Объект", выделяю вкладку "Новый", и если в списке "Тип объекта" вижу компонент - то считаю его зарегистрированным. Всего этого не происходит, если в Delphi 5 я создаю ActiveForm, выбираю в его меню "Run"->"Register ActiveX Server" и регистрирую (сообщение об этом появляется). Правда с помощью ActiveX Control Test Container я вижу свой компонент в списке сразу же.
Зато если теперь в реестре я добавляю поле Insertable, мой компонент появляется в искомом списке в Excel (равно как и в других программах).
← →
Digitman © (2004-03-18 12:35) [10]попробуй иные варианты
1. регистрировать готовый OCX с ком.строки "regsvr32 myAXctl.ocx"
2. переопределить метод TActiveXControl.UpdateRegistry, где собссно и вносить недостающий ключ в реестр
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2004.04.04;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.047 c