Динамическая загрузка UserForm / Forms.Form в VBS

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
ALX_2002
Мега гуру
Мега гуру
 
Сообщения: 2054
Зарегистрирован: 25.11.2002 (Пн) 20:03

Динамическая загрузка UserForm / Forms.Form в VBS

Сообщение ALX_2002 » 22.04.2008 (Вт) 12:03

Доброго времени суток жителям. :D

Пришёл к Вам со следующим вопросом: "Можно ли сделать динамическую загрузку
Forms.Form.1 или UserForm из VBS".

Конечная задача: Загрузить заранее сформированную форму, заполнить поля и по закрытию формы получить эти поля.

Почитав в инете - узнал следующее:

1) Сам объект Forms.Form.1 создать через CreateObject возможно и даже контролы на нём разместить, но вот в метод Show у созданного объекта напрочь отсутствует. Следовательно непонятно как его показать на экране.

2) Встроенные объектная модель Word / Excel - Word.Application имеет методы для динамической загрузки форм и их отображения, но использование этого механизма требует загрузки Excel.exe / Word.exe в пямять на что уходит довольно много времени.

Пока что мучаюсь со вторым методом. Т.е в дизайнере нагенерил множество формочек в одном вордовом документе. Из VBS-ка запускаю Word.Application и выполняю макрос по отображению формы. По закрытию формы шаманскими ухищрениями собираю данные из полей и передаю в VBS-ник в виде массива.

ИМХО КРИВО ДО УЖАСА.

Я думаю многие предложат сделать свой Activex и не мучаться, но проблема в том, что:
1) Форм довольно много, тогда придётся в один Activex засовывать штук 20 форм, либо делать 20 activex-ов, либо делать механизм по подгрузке формы из файла.( и это вообще хз как. )
2) формы часто редактируются
3) Т.к креплю эту функцию к внутренней банковской системе, то вызываться она будет из одной общей программы на разных рабочих местах, следовательно этот Activex должен быть зареген у всех и это тащит за собой огромное наследие гемора ((.

В общем - жду любых советов. Заранее очень благодарен. :roll:

Денис
Доктор VB наук
Доктор VB наук
Аватара пользователя
 
Сообщения: 2734
Зарегистрирован: 07.11.2006 (Вт) 13:55
Откуда: Ейск, Краснодарский край

Сообщение Денис » 22.04.2008 (Вт) 12:37

Погоди-погоди... А Visible = True разве не срабатывает? (после Load, естественно)
Программирование — богоизбранная дисциплина! Если бог и есть, то вселенную он скомпилировал, не иначе.

Antonariy
Повелитель Internet Explorer
Повелитель Internet Explorer
Аватара пользователя
 
Сообщения: 4824
Зарегистрирован: 28.04.2005 (Чт) 14:33
Откуда: Мимо проходил

Сообщение Antonariy » 22.04.2008 (Вт) 12:41

вызываться она будет из одной общей программы
После этого "огромное наследие гемора" уже не звучит. Почему нельзя сделать простенький dll-переходник, для работы с IE (как я уже говорил по аське), не несущий никакой бизнес-логики, и включить в состав дистрибутива этой "одной общей программы"?

Денис
У UserForm нет свойства Visible. Метода Show кстати тоже. И то и другое находится в скрытом классе _Form в неизвестно какой библиотеке (Unknown1), в который VBA заворачивает UserForm.
Последний раз редактировалось Antonariy 22.04.2008 (Вт) 12:52, всего редактировалось 1 раз.
Лучший способ понять что-то самому — объяснить это другому.

ALX_2002
Мега гуру
Мега гуру
 
Сообщения: 2054
Зарегистрирован: 25.11.2002 (Пн) 20:03

Сообщение ALX_2002 » 22.04.2008 (Вт) 12:49

2 Денис:
Погоди-погоди... А Visible = True разве не срабатывает? (после Load, естественно)


Неа. Говорит - объект не поддерживает данное свойство или метод.

:( Задумался.... - А как Load можно сделать ? Предполагал, что Результат выполнения CreateObject и есть аналог метода Load.

2 Antonariy:
Antonariy писал(а):
вызываться она будет из одной общей программы
После этого "огромное наследие гемора" уже не звучит. Почему нельзя сделать простенький dll-переходник для работы с IE (как я уже говорил по аське), а сам переходник включить в состав дистрибутива этой "одной общей программы"?


Пробывал. Неудобно до жути
1) Включить эту DLL в состав нельзя, потому что программа уже установлена на все компы + её дистрибут это закрытая от нас часть - Внутренняя банковская система. Разработана не нами. (

2) Делать формой HTML-страницу не устраивает.
а) InterDev-ом криво. Избыток кода. Ручками привычнее, но муторно.
б) Доп. функции объектов дописывать криво. (

Antonariy
Повелитель Internet Explorer
Повелитель Internet Explorer
Аватара пользователя
 
Сообщения: 4824
Зарегистрирован: 28.04.2005 (Чт) 14:33
Откуда: Мимо проходил

Сообщение Antonariy » 22.04.2008 (Вт) 13:02

1) Включить эту DLL в состав нельзя, потому что программа уже установлена на все компы + её дистрибут это закрытая от нас часть - Внутренняя банковская система. Разработана не нами. (
Однако же никто не мешает обернуть ее в еще один слой дистрибутива, содержащий dll. Хотя это уже попахивает извращениями. :)
б) Доп. функции объектов дописывать криво. (
Каких еще объектов? Ты же получаешь данные в VBS в виде массива. Что мешает вернуть тот же массив или, допустим, более удобный Scripting.Dictionary?
а) InterDev-ом криво. Избыток кода. Ручками привычнее, но муторно.
Тут уж дело вкуса...
Лучший способ понять что-то самому — объяснить это другому.

ALX_2002
Мега гуру
Мега гуру
 
Сообщения: 2054
Зарегистрирован: 25.11.2002 (Пн) 20:03

Сообщение ALX_2002 » 22.04.2008 (Вт) 14:43

1) Включить эту DLL в состав нельзя, потому что программа уже установлена на все компы + её дистрибут это закрытая от нас часть - Внутренняя банковская система. Разработана не нами. (


Однако же никто не мешает обернуть ее в еще один слой дистрибутива, содержащий dll. Хотя это уже попахивает извращениями. :)


Вот именно как раз так извращаться и не хочется ). Более того - всё равно заного переставлять. Какой смысл ? :)

б) Доп. функции объектов дописывать криво. (
Каких еще объектов? Ты же получаешь данные в VBS в виде массива. Что мешает вернуть тот же массив или, допустим, более удобный Scripting.Dictionary?


Я про внутреннюю логику работы самой формы. VB-ная форма всё таки привычнее.

а) InterDev-ом криво. Избыток кода. Ручками привычнее, но муторно.
Тут уж дело вкуса...


Не могу не согласиться. Но всё же VB-ная форма - лакомый кусок. :)

Antonariy
Повелитель Internet Explorer
Повелитель Internet Explorer
Аватара пользователя
 
Сообщения: 4824
Зарегистрирован: 28.04.2005 (Чт) 14:33
Откуда: Мимо проходил

Сообщение Antonariy » 22.04.2008 (Вт) 15:23

Я про внутреннюю логику работы самой формы. VB-ная форма всё таки привычнее.
Не могу не согласиться. Но всё же VB-ная форма - лакомый кусок.
Вам шашечки или ехать? (ц) :wink:
Лучший способ понять что-то самому — объяснить это другому.

Vi
Постоялец
Постоялец
 
Сообщения: 739
Зарегистрирован: 25.01.2002 (Пт) 11:03
Откуда: Россия, Ижевск

Сообщение Vi » 23.04.2008 (Ср) 7:07

http://bbs.vbstreets.ru/viewtopic.php?t=36414

PS
Antonariy, что ж не предложишь Активные Объекты? По-моему, они прекрасно решат проблему. Я, кстати, своему коллеге тоже предложу этот механизм.

Хотя простенький DLL объект, управляющий формами, тоже прекрасно подходит. :wink:
Vita
Выше головы не прыгнешь, ниже земли не упадешь, дальше границы не убежишь! (с) КВН

Antonariy
Повелитель Internet Explorer
Повелитель Internet Explorer
Аватара пользователя
 
Сообщения: 4824
Зарегистрирован: 28.04.2005 (Чт) 14:33
Откуда: Мимо проходил

Сообщение Antonariy » 23.04.2008 (Ср) 7:40

Потому что у автора предполагается постоянно изменяющаяся бизнес-логика, постоянно перекомпилировать ее нерационально. Проблемы с распространением и совместимостью тоже имеют место, автор их подчеркнул. Самый "дешевый" выход из ситуации - воспользоваться всем готовым. Набор готовых интерфейсов невелик - VBA, к которому можно получить доступ напрямую из скрипта, героически преодолевая кучу сложностей, и IE, к которому напрямую из скрипта получать доступ бессмысленно, потому что скрипт не умеет DoEvents. Простенький объект, управляющий формами, будет совсем не прост, а вот объект, тупо ждущий загрузки IE и команды на выход, когда работа закончена, будет просто одноклеточен.
Одноклеточные активиксы автора тоже не радуют :)

ALX_2002
:) Типа профессиональный совет: в банке нужно не технологии любить, а задачи решать. Эффективно.
Лучший способ понять что-то самому — объяснить это другому.

Денис
Доктор VB наук
Доктор VB наук
Аватара пользователя
 
Сообщения: 2734
Зарегистрирован: 07.11.2006 (Вт) 13:55
Откуда: Ейск, Краснодарский край

Сообщение Денис » 23.04.2008 (Ср) 9:42

ALX_2002
Погоди-погоди, а после срабатывания CreateObject форма загружается в память? К какому процессу она принадлежит, если загружается? wscript.exe/cscript.exe? Если да, то по идее можно послать сообщение...
Программирование — богоизбранная дисциплина! Если бог и есть, то вселенную он скомпилировал, не иначе.

Antonariy
Повелитель Internet Explorer
Повелитель Internet Explorer
Аватара пользователя
 
Сообщения: 4824
Зарегистрирован: 28.04.2005 (Чт) 14:33
Откуда: Мимо проходил

Сообщение Antonariy » 23.04.2008 (Ср) 9:50

У него не wscript/cscript, а vbs-подобный интерпретатор, поддерживающий CreateObject, встроенный в клиента банковской системы.
Лучший способ понять что-то самому — объяснить это другому.

Konst_One
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
Аватара пользователя
 
Сообщения: 3041
Зарегистрирован: 09.04.2004 (Пт) 13:47
Откуда: Химки

Сообщение Konst_One » 23.04.2008 (Ср) 13:08

осталось только автору выдать название этой системы и проблема сразу я думаю разрешиться, так как обычно разработчики таких систем предоставляют поддержку и можно их спросить, как можно и как нужно делать

Денис
Доктор VB наук
Доктор VB наук
Аватара пользователя
 
Сообщения: 2734
Зарегистрирован: 07.11.2006 (Вт) 13:55
Откуда: Ейск, Краснодарский край

Сообщение Денис » 23.04.2008 (Ср) 15:01

Antonariy
Не суть важно. Допустим, интерпретатор самодельный (часть ИС) ну, значит смотреть чем-то вроде Spy++ в его процесс на наличие загруженного искомого окна. Если есть - значит посылаем ему команду... эээ ... типа WM_VISIBLE? да?
Программирование — богоизбранная дисциплина! Если бог и есть, то вселенную он скомпилировал, не иначе.

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 23.04.2008 (Ср) 15:13

Денис писал(а):Если есть - значит посылаем ему команду... эээ ... типа WM_VISIBLE? да?

Глупость.
Lasciate ogni speranza, voi ch'entrate.


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 81

    TopList