Делая пример для новичков, я написал несколько строчек, которые напомнили мне об одной теме, где автор (Antonariy) искал способ создания экземпляров классов по имени этих классов. Ещё тогда я предложил верное направление, но на тот момент я недостаточно знал недокументированные подробности функционирования VB, а теперь же знаю их на порядок лучше, так что решил сделать кирпич.
Как известно, в VB можно создавать экземпляры форм и классов, но при этом оператор New принимает только явно указанное имя класса. Если имя класса (или формы) у вас содержится в строковой переменной — вы пролетели. Функция CreateObject делает что-то похожее: но она создаёт объект не по имени класса, а по ProgId-у, и главное — класс должен быть из стороннего зарегистрированного ActiveX-DLL-проекта и должен быть публичным. Приватные классы (а формы — тем более) пролетают.
Вернее, пролетали. Теперь можно спокойно создавать экземпляры форм и классов, имея строчку, содержащую имя нужного класса или формы. Никаких ограничений, полноценная отладка, работает и под IDE и в скомпилированном виде, должно работать с VB5.
В публикуемой мною сейчас (1.0.0) версии есть возможность создавать экземпляры внутрипроектных классов и форм, но нет возможности создавать экземпляры внутрипроектных User-Control-ов, хотя такая возможность планируется в версии 1.1.0. Как побочный эффект, будет требоваться подключение не только моего модуля, но ещё и моей специальной TLB-шки, которая будет сделана. Собственно, заранее напомню, что в TLB нет ничего страшного, и подключённые TLB даже не надо распространять вместе со скомпилированным проектом.
На самом деле, возможность создать экземпляр контрола есть и в этой версии, но работает она только в скомпилированном виде и только после снятия ключика DENY_USERCONTROLS, а возвращаемые ссылка — внутренний, не обёрнутый объект (читайте о разнице). Я уверен, что почти никто из пользователей кирпича не сумеет сам сделать правильное согласование такого объекта и контейнера. Так что ждём сл. версии.
Последняя версия:
Структура каталогов в архивах одинаковая. Пример ожидает, что вы положите модуль в папку «brickmod».
Для использования кирпича кроме подключения модуля ничего больше не требуется.
Переименовывать модуль (а не его файл) крайне не рекомендуется.