Страницы: 1
RSS
Подскажите про позднее связывание MSMASK32
 
Добрый вечер!
Возник вопрос такого порядка...
Есть форма, на которой есть поля MSMASK32, штук так несколько...юри статической линковке все работает нормально.
Задумал перевести подключение этих элементов динамически (позднее связывание).
Но в сети есть только примеры, где открывается приложение Word/
А как поступить мне?
Создавать объекты по количеству используемых элементов?
Или создавать один объект и получать на него ссылки?
Допустим, имеются 3 элемента MaskEdit на одной форме, прилинкованные статически при разработке.
Как мне их перевести на позднее связывание?
Если ГУРУ покажут пример кода - буду безмерно благодарен! ;)  
Изменено: edward_sh - 08.08.2019 20:44:30
 
Сначала Вы приложите пример со своим кодом (с ранним связыванием).
Изменено: sokol92 - 08.08.2019 18:10:47
Владимир
 
Tools->Addiditioanl Controls галка на Microsoft Masked Edit Contorls, как-то так :)
 
Не нашел в конфигурациях Win10 + Excel 2016 (32- и 64-), а также в WinXP + Excel 2007.
Позднее связывание тоже не найдет (как и раннее).
Изменено: sokol92 - 08.08.2019 18:22:49
Владимир
 
У меня в офисе 2007 на win7 x64 данное меню располагается в меню VBA->Tools-> Additional controls и я могу в ToolBox видеть эту библиотеку
Изменено: edward_sh - 08.08.2019 18:42:02
 
Это понятно. Если Вы хотите, чтобы Ваш проект использовал "нестандартный" OCX (который не входит в штатную поставку Windows/Office), то Вам придется для каждой возможной конфигурации (с учетом того, что офис может быть 32- и 64-разрядным) описать перечень действий пользователя по поиску и установке (включая регистрацию) OCX. С учетом этого, особой разницы между ранним и поздним связыванием нет. Позднее связывание удобно, если Вы хотите, чтобы Ваш код работал на различных конфигурациях без дополнительных усилий со стороны пользователя.
Владимир
 
Именно для того, чтобы не напрягать пользователя (а как следствие и меня), я просто перетаскиваю с собой нужный мне OCX, если он не зарегистрирован, пробую
его зарегистрировать. После чего динамически подключаю OCX для работы.
Мне остался непонятен принцип работы с поздним связыванием, когда элементов несколько на форме.
В примерах позднего связывания у всех используется один и тот же пример - создание документа Word.
 
Ваш вопрос (мне) не понятен. Постарайтесь его сформулировать подробнее в терминах первоисточника.
Не понятно и про "примеры позднего связывания", в которых "создание документа Word". Почти любой макрос, содержащий вызов CreateObject, является таким примером.
Владимир
 
Добрый день, Владимир!
Давайте разберемся, чего я хочу :)
В приведенном примере в статье создается  и возвращается ссылка на объект Excel.
Код
' No reference to a type library is needed to use late binding.
' As long as the object supports IDispatch, the method can 
' be dynamically located and invoked at run-time.

' Declare the object as a late-bound object
  Dim oExcel As Object

  Set oExcel = CreateObject("Excel.Application")

' The Visible property is called via IDispatch
  oExcel.Visible = True
Теперь представим себе, что таким образом (кстати как?) я хочу подключить библиотеку MSMASK32.OCX, зарегистрированную в системе через
regsvr32 (в идеале не зарегистрированной и лежащей рядом с файлом xls).

Теперь собственно сам вопрос, который поставил меня в ступор...
На форме Excel у меня 8 (восемь) элементов MSMASK.
Как мне надо переделать обращение к этим элементам на форме при позднем связывании?
Если при раннем связывании (через диспетчер дополнительных элементов) я обращался к этому элементу как
me.txtMask1.Value=0, то как будет выглядеть обращение к этому элементу при позднем связывании, а к последующим элементам?
Вот тут и порылась непонятка. Даже в приведенном выше примере создается один объект типа Excel. Что далее с ним в коде - непонятно.
Отсюда и мой вопрос.
Изменено: edward_sh - 11.08.2019 15:48:20
 
Здравствуйте.
Зарегистрировать не проблема.
Ниже код для vbs.
для MSMASK32 ещё нужно установить лицензию на работу с ней - если лицензии DesignTime нет,
то она не заработает, даже если вы её правильно зарегистрируете.
Скрытый текст
 
Добрый день, doober!
Зарегистрировать библиотеку для меня не проблема (ручками или кодом).
Мне не понятно как работать с библиотекой после позднего связывания, когда элементов из этой библиотеки несколько экземпляров на форме.
Вот в чем проблема...
 
Цитата
edward_sh написал:
На форме Excel у меня 8 (восемь) элементов MSMASK.Как мне надо переделать обращение к этим элементам на форме при позднем связывании?
Еще раз призываю Вас к точным формулировкам.
Вы хотите создавать динамически (во время выполнения) элементы управления на Userform? Это непростой путь. См. описание метода Controls.Add. Метод вернет Вам ссылку на вновь созданный объект.
Изменено: sokol92 - 11.08.2019 19:39:08
Владимир
 
Добрый вечер!
Либо я ничего не понимаю, либо лыжи не едут летом! :)
Прикладываю скрины и сам файл (только макет) с контролами на форме.
При раннем (статическом) связывании библиотеки с файлом все работает чудесно. Написаны обработчики событий, инициализация начальных значений и т.д.
Теперь мне надо изменить код так, чтобы отвязаться от статического связывания (отключение галки на MSMASK в окошке инструментов).
Теперь я хочу перенести этот файл в моего компьютера на другой, где нет этой библиотеки.
Регистрирую эту библиотеку на чужом компьютере.
Внимание, вопрос - что надо изменить в коде, чтобы это все работало?
Какая последовательность кода должна быть до и во время загрузки формы, чтобы проект заработал на другой машине?
Т.е. вместо простого Me.maskedit1.Value=0 что я должен написать?
В архиве сама библиотека с ключами
Еще раз для ясности...
Элементы на форме есть, но нет привязки к библиотеки.
При раннем (статическом связывании) - все работает нормально.
Вопрос состоит в том, как переделать код, чтобы при загрузке формы при позднем связывании все работало как и раньше.
Мне не надо создавать НОВЫЕ элементы на форме, мне надо просто изменить обращение к ним так, чтобы при динамическом присоединении библиотеки все работало, как при статическом.

Картинки удалены. Об ограничении вложения ничего не читали?
Зачем писать все предложения в сообщении с новой строки? Не видели, как умные люди в книжках пишут?
[МОДЕРАТОР]
Изменено: edward_sh - 13.08.2019 17:50:03
 
To Модератор:
Боюсь навлечь гнев ..., но...
Вы почитайте Дюма-старшего и задайте вопрос-зачем он писал каждое предложение с новой строки?
Я думаю, для ясности (хотя причина в другом :) )
 
Причина в другом.  И на форуме пишите нормально,  абзацами. А для тренировки отредактируйте свое сообщеие.
 
Цитата
edward_sh написал:
Регистрирую эту библиотеку на чужом компьютере.Внимание, вопрос - что надо изменить в коде, чтобы это все работало?
Ответ: ничего. После того, как пользователь успешно зарегистрирует msmask32.ocx на своем компьютере, он может без ошибок открыть Ваш файл (Книга1.xlsm) (естественно, в 32-разрядном офисе).
Владимир
 
Если ранее связывание - еще в референсах надо подключить. Ручками или программно кодом это сделать.
«Бритва Оккама» или «Принцип Калашникова»?
 
Регистрация библиотеки автоматически не подключает ее к проекту.
Более того, мне интересен частный случай именно с этой библиотекой о порядком действий.
Вот уже длительное время я пытаюсь выяснить вроде простой вопрос, но пока нет конструктивных ответов.
Неужели никто не пользовался поздним связыванием в своих проектах?
Про автоматической подключении библиотеки я задавал отдельный вопрос, но могу повторить его и здесь.
Как поведет себя проект, если исходно была подключена библиотека для x86,  а работа производится на x64?
 
Специально для ответа Вам:
1. Зарегистрировал msmask32.ocx на своем компьютере (regsvr32.exe следует запустить от имени администратора)
2. Открыл Ваш файл Книга1.xlsm, содержащий ссылку на указанный элемент управления ActiveX. Я вижу в файле 5 элементов управления типа MaskEdBox2 и могу работать с их свойствами, методами, событиями.
Моя конфигурация: Win10 (64-разрядная), Office 2016 (32-, ru)

Вы постоянно употребляете термин "позднее связывание" в неправильном контексте. В Вашем примере Книга1.xlsm используется раннее связывание, что никак не препятствует использованию книги на других компьютерах с установленными 32-разрядными версиями Office при условии регистрации msmask32.ocx.

Что касается 64-разрядных версий MS Office, то для них требуются 64-разрядные версии ActiveX. В существовании таковой версии msmask32.ocx  я сомневаюсь.
Изменено: sokol92 - 14.08.2019 17:42:33
Владимир
 
Владимир все четко разложил :)
«Бритва Оккама» или «Принцип Калашникова»?
 
Виталий, спасибо, Ваше мнение эксперта весьма значимо. :)  
Владимир
 
Итак, джентельмены!
Владимир, я про РАНЕЕ связывание твердил с начала топика. Меня интересует ПОЗДНЕЕ связывание и работа в этой ситуации.
Так как мне все-таки работать с элементами при позднем связывании?

Моя конфигурация Excel 2007 (32) Win 7 (64)
 
Позднее связывание (в общепринятом понимании, включая разработчика) - не для Вашей ситуации.
Изменено: sokol92 - 14.08.2019 19:10:31
Владимир
 
Простите, невежду! А зачем тогда позднее связывание?
Особенно если учесть, что сама Микрософт скрипя зубами предлагает разработчикам на стадии написания проекта использовать раннее связывание,
а клиенту поставлять с поздним связыванием.
 
Я не видел рекомендаций о применении позднего связывания в случае использования пользовательских форм с нестандартными элементами управления.
О преимуществах и недостатках раннего и позднего связывания на форуме есть много материалов, например, здесь.
Владимир
 
Уважаемые джентельмены!
я ЗНАЮ что такое раннее и позднее связывание.
Я представляю себе какие накладные расходы по быстродействию это несет.
Но ПРОШУ:
а) не переливать из пустого в порожнее
б) у кого есть опыт работы с элементами, как в моей ситуации - откликнетесь
в) не надо мне говорить как мне НАДО действовать.
г) что конкретно мне надо сделать в моей ситуации (именно так, а не иначе)
д) если у кого нет реальных советов - может не загрязнять конференцию не нужными сообщениями?

PS: Откровенно говоря, меня здесь пытаются научить азам программирования. Поверьте, после 15 лет программирования на CBuilder  я многие вещи знаю и представляю.
Страницы: 1
Наверх