' Пытаюсь средствами WSH создать форму с контролами:
' С контролами проблем нет - у любого имеющего MS Office есть FM20.DLL вот и использую ее:Dim objForm
Set objForm = WScript.CreateObject("Forms.Form.1")
'Set objUForm = objForm.Add ("Forms.UserForm.1", "MyForm", True)
'Не работает: "Недопустимая строка с указанием класса" :(((
'Поэтому формы, как таковой, нетWith objForm
.Caption = "MyForm"
.Enabled = True
End With
Set objLabel = objForm.Add ("Forms.Label.1", "MyLabel", True)
With objLabel
.Caption = "Label"
.Top = 10
.Left = 10
.Width = 200
.Height = 20
.Enabled = True
End With
Set objTextBox = objForm.Add ("Forms.TextBox.1", "MyTextBox", True)
With objTextBox
.Text = "TextBox"
.Top = 40
.Left = 10
.Width = 200
.Height = 20
.Enabled = True
End With
Set objComboBox = objForm.Add ("Forms.ComboBox.1", "MyComboBox", True)
With objComboBox
.Text = "ComboBox"
.Top = 70
.Left = 10
.Width = 200
.Height = 20
.Enabled = True
End With'Контролы создаются но их НЕ ВИДНО! (очевидно, потому что нет формы)For Each objCnt In objForm.Controls
MsgBox objCnt.Name
Next
Set objForm = Nothing
Set objLabel = Nothing
Set objTextBox = Nothing
Set objComboBox = Nothing
WScript.Quit
'Как же все таки создать ВИДИМУЮ ФОРМУ С КОНТРОЛАМИ ???
Re: Создание формы из воздуха (WSH)
От:
Аноним
Дата:
18.05.04 09:52
Оценка:
Ах, да:
Пример РЕАЛЬНЫЙ! (т.е. копируем код в файл и запускаем)
Контролы есть только ИХ НЕ ВИДНО ((
Как же эту форму с контролами увидеть???
(Список всех Свойств и Методов FM20.DLL — http://arial.net.ru/user/96489246964/FM20.htm )
Использовать другую библиотеку (самодельную — видал такие) не хочу, т.к. условие — "Только стандартные библиотеки, имеющиеся в ЛЮБОЙ версии Windows"
Здравствуйте, dimzon, Вы писали:
D>a HTA использовать не хочешь? Работает с IE 5+
Вообще то можно попробовать... Был бы ОЧЕНЬ благодарен за код выполняющий аналогичные действия.
Но, все таки, КАК без HTA ?
Вот тут http://www.borncity.de/WSHBazaar/WSHForm.htm какой то Гюнтер Борн сляпал свою COM-компоненту с помощью которой из скрипта можно создавать простенькие формы. Попробовал я... ХУДО.
Во первых — убого (TextBox, да Label)
Во вторых — чужую OCX-сину за собой таскать и регистрировать
И это в то время, когда практически у каждого есть шикарная и многофункциональная FM20.DLL !
Не вижу я принципиальной разницы между Гюнтеровской WSHForm.ocx и Майкрософтовской FM20.DLL
Или чой то туплю я?
Здравствуйте, Аноним, Вы писали:
А>Ах, да: А>Пример РЕАЛЬНЫЙ! (т.е. копируем код в файл и запускаем) А>Контролы есть только ИХ НЕ ВИДНО (( А>Как же эту форму с контролами увидеть???
А>(Список всех Свойств и Методов FM20.DLL — http://arial.net.ru/user/96489246964/FM20.htm ) А>Использовать другую библиотеку (самодельную — видал такие) не хочу, т.к. условие — "Только стандартные библиотеки, имеющиеся в ЛЮБОЙ версии Windows"
Вот ...
Dim objWord
Set objWord = WScript.CreateObject("Word.Application")
objWord.ShowVisualBasicEditor = True
Dim objVBE
Set objVBE = objWord.VBE
Dim objVBComp
Set objVBComp = objVBE.ActiveVBProject.VBComponents.Add(vbext_ct_MSForm)
Set objForm = objVBComp.Designer
With objForm
.Caption = "MyForm"
End With
Set objLabel = objForm.Add ("Forms.Label.1", "MyLabel", True)
With objLabel
.Caption = "Label"
.Top = 10
.Left = 10
.Width = 200
.Height = 20
.Enabled = True
End With
Set objTextBox = objForm.Add ("Forms.TextBox.1", "MyTextBox", True)
With objTextBox
.Text = "TextBox"
.Top = 40
.Left = 10
.Width = 200
.Height = 20
.Enabled = True
End With
Set objComboBox = objForm.Add ("Forms.ComboBox.1", "MyComboBox", True)
With objComboBox
.Text = "ComboBox"
.Top = 70
.Left = 10
.Width = 200
.Height = 20
.Enabled = True
End With
'For Each objCnt In objForm.Controls
' MsgBox objCnt.Name
'Next
Set objForm = Nothing
Set objLabel = Nothing
Set objTextBox = Nothing
Set objComboBox = Nothing
WScript.Quit
Re[3]: Создание формы из воздуха (WSH)
От:
Аноним
Дата:
21.05.04 15:55
Оценка:
Здравствуйте, Alexander_Drugakov, Вы писали:
A_D>Set objVBComp = objVBE.ActiveVBProject.VBComponents.Add(vbext_ct_MSForm)
Вот на этой строке орет:
Ошибка: Ошибка программирования объектов
Код: 800A01B8
Источник: Ошибка выполнения Microsoft VBScript
В общем — "Method 'Add' of object '_VBComponents' failed"
Но идея — понятна (создать форму в дизайнере VBA)...
А может быть пустую форму можно создать как нибудь иначе? (Не обязательно с использованием FM20.DLL)
Создать, а потом натыкать в нее контролы из MSForms ?
Здравствуйте, Аноним, Вы писали:
А>Здравствуйте, Alexander_Drugakov, Вы писали:
A_D>>Set objVBComp = objVBE.ActiveVBProject.VBComponents.Add(vbext_ct_MSForm)
А>Вот на этой строке орет: А>
Ошибка: Ошибка программирования объектов
А>Код: 800A01B8
А>Источник: Ошибка выполнения Microsoft VBScript
А>В общем — "Method 'Add' of object '_VBComponents' failed"
Ну а оболочка VBE(Visual Basic Editor) запускается и видима ? Попоробуй для начала просто в ней поиграться — создать форму(модуль) там...
А>Но идея — понятна (создать форму в дизайнере VBA)... А>А может быть пустую форму можно создать как нибудь иначе? (Не обязательно с использованием FM20.DLL) А>Создать, а потом натыкать в нее контролы из MSForms ?
Думаю не получится. Я перерыл MSDN — нигде нет примеров использования MSForms(есть только файлик fm.chm). В описании объектов MSForms где то нашел, что компоненты вставляются в UserForm, но создать ее нельзя напрямую, можно взять у окна Designer в VBE, который сам берется у объектов MS Office. Хотя конечно это не вся правда — создать то форму и натолкать в ее компонентов можно — но вот показать... В интерфейсах typelibrary нет ничего похожего на свойства и методы управления visible. Так что из воздуха можно взять только азот, кислород...
Re[5]: Создание формы из воздуха (WSH)
От:
Аноним
Дата:
25.05.04 05:00
Оценка:
Здравствуйте, Другаков Александр, Вы писали:
ДА>Ну а оболочка VBE(Visual Basic Editor) запускается и видима ?
Запускается. Видима.
ДА>Попоробуй для начала просто в ней поиграться — создать форму(модуль) там...
Ну можно... Но ТОЛЬКО поиграться
А>>Но идея — понятна (создать форму в дизайнере VBA)... А>>А может быть пустую форму можно создать как нибудь иначе? (Не обязательно с использованием FM20.DLL) А>>Создать, а потом натыкать в нее контролы из MSForms ? ДА>Думаю не получится.
Ох как жаль ((
ДА>Я перерыл MSDN — ДА> В интерфейсах typelibrary нет ничего похожего на свойства и методы управления visible.
У MSForms — нет.
Ну а если ПУСТУЮ ФОРМУ создавать НЕ С ПОМОЩЬЮ FM20.DLL, а с помощью КАКОЙ ТО ДРУГОЙ библиотеки?
Создать, а потом натыкать в нее контролы из MSForms ?
Здравствуйте, Аноним, Вы писали:
ДА>>Попоробуй для начала просто в ней поиграться — создать форму(модуль) там... А>Ну можно... Но ТОЛЬКО поиграться
Форма создается ? Модуль ?
Когда я разбирался с VBE у меня были проблемы с security на запуск макросов. Я устанавливал разрешения в настройках Word.
Попробуй может поможет.
ДА>>Я перерыл MSDN — ДА>> В интерфейсах typelibrary нет ничего похожего на свойства и методы управления visible. А>У MSForms — нет. А>Ну а если ПУСТУЮ ФОРМУ создавать НЕ С ПОМОЩЬЮ FM20.DLL, а с помощью КАКОЙ ТО ДРУГОЙ библиотеки? А>Создать, а потом натыкать в нее контролы из MSForms ?
1. Все контролы в MSForms — это компоненты ActiveX. Можно создать другой ActiveX, который бы создавал окно с поддержкой хостинга компонентов ActiveX. Через интерфейс выставляемый твоим компонентом можно будет добавлять(удалять) контролы MSForms на это окно.
2. Еще можно поковырять UserForm на предмет выяснения методов для показа формы на экране. Задача это будет трудоемкая.
Ты гуглем не искал примеров использования контролов в MSForms ?
Здравствуйте, Другаков Александр, Вы писали:
ДА>Здравствуйте, Аноним, Вы писали:
ДА>>>Попоробуй для начала просто в ней поиграться — создать форму(модуль) там... А>>Ну можно... Но ТОЛЬКО поиграться ДА>Форма создается ? Модуль ? ДА>Когда я разбирался с VBE у меня были проблемы с security на запуск макросов. Я устанавливал разрешения в настройках Word. ДА>Попробуй может поможет.
ДА>>>Я перерыл MSDN — ДА>>> В интерфейсах typelibrary нет ничего похожего на свойства и методы управления visible. А>>У MSForms — нет. А>>Ну а если ПУСТУЮ ФОРМУ создавать НЕ С ПОМОЩЬЮ FM20.DLL, а с помощью КАКОЙ ТО ДРУГОЙ библиотеки? А>>Создать, а потом натыкать в нее контролы из MSForms ? ДА>1. Все контролы в MSForms — это компоненты ActiveX. Можно создать другой ActiveX, который бы создавал окно с поддержкой хостинга компонентов ActiveX. Через интерфейс выставляемый твоим компонентом можно будет добавлять(удалять) контролы MSForms на это окно.
Это работает — уже проверил.
Re[8]: Создание формы из воздуха (WSH)
От:
Аноним
Дата:
26.05.04 12:57
Оценка:
Здравствуйте, Другаков Александр, Вы писали:
ДА>>Форма создается ? Модуль ?
Открывается окно VBE и все. Можно создать форму (ручками). Программно — хрен на рыло.
ДА>>Когда я разбирался с VBE у меня были проблемы с security на запуск макросов.
Здравствуйте, Аноним, Вы писали:
А>Если не жалко — можно РАБОЧИЙ пример?
Давай мыло — вышлю...
А вообще смысл такой...
1. Можешь попробовать создать объект MS Forms Frame в ActiveX Control Test Container. В режиме Design (свойство DesignMode = True )
появляется еще и Toolbar с контролами, которые можно перетаскивать на frame. При отключенном режиме Design получаем рабочий run-time
frame.
2. Я сделал на ATL-проект ActiveX компонента, вставил в него ATL-объект Dialog и в это окно поместил ActiveX c progid — Forms.Frame.1 . В интерфейсе создал свойство для возврата IDispatch от Forms.Frame.1 и метод для показа этого диалогового окна.
3. Вот код скрипта:
'Dim objWord
'Set objWord = WScript.CreateObject("Word.Application")
Set objForm = Nothing
Set objLabel = Nothing
Set objTextBox = Nothing
Set objComboBox = Nothing
WScript.Quit
Хотелось бы знать для чего вся эта бадяга ? Может есть другие более простые пути решения проблемы ?
Re[10]: Создание формы из воздуха (WSH)
От:
Аноним
Дата:
27.05.04 05:49
Оценка:
Здравствуйте, Другаков Александр, Вы писали:
ДА>Давай мыло — вышлю...
mozers(собака)mail.ru
ДА>А вообще смысл такой... ДА>1. Можешь попробовать создать объект MS Forms Frame в ActiveX Control Test Container. В режиме Design (свойство DesignMode = True ) ДА>появляется еще и Toolbar с контролами, которые можно перетаскивать на frame. При отключенном режиме Design получаем рабочий run-time ДА>frame. ДА>2. Я сделал на ATL-проект ActiveX компонента, вставил в него ATL-объект Dialog и в это окно поместил ActiveX c progid — Forms.Frame.1 . В интерфейсе создал свойство для возврата IDispatch от Forms.Frame.1 и метод для показа этого диалогового окна.
Попробовать то я могу... Но примерчик бы ОЧЕНЬ был кстати (дубоват я в этом деле )
ДА>Хотелось бы знать для чего вся эта бадяга ? Может есть другие более простые пути решения проблемы ?
Просто пишу скрипты. Но отсутствие каких бы то ни было форм в WSH убивает 90% идей.
Поэтому видится 3 решения:
— Либо добавлять возможности по созданию форм в чужой COM-сервер (утопия, т.к. исходников нет).
— Либо использовать что то общедоступное.
— Либо пытатся написать свою COM-компоненту, обладающую, помимо остальных, еще и способностями создавать пользовательские формы.
Здравствуйте, Аноним, Вы писали:
А>mozers(собака)mail.ru
ушло
А>Просто пишу скрипты. Но отсутствие каких бы то ни было форм в WSH убивает 90% идей. А>Поэтому видится 3 решения: А> — Либо добавлять возможности по созданию форм в чужой COM-сервер (утопия, т.к. исходников нет). А> — Либо использовать что то общедоступное. А> — Либо пытатся написать свою COM-компоненту, обладающую, помимо остальных, еще и способностями создавать пользовательские формы.
Простейшие диалоговые окошки есть — message box и input message box (для ввода строки). Думаю этого достаточно для WSH, а если что надо покруче то Visual Basic ждет
ДА>Простейшие диалоговые окошки есть — message box и input message box (для ввода строки). Думаю этого достаточно для WSH, а если что надо покруче то Visual Basic ждет
HTA поможет
Re: Создание формы из воздуха (WSH)
От:
Аноним
Дата:
28.05.04 16:26
Оценка:
А>Файл CreateUserControl.vbs
А может в консерватории что то не так .....
Ведь VBScript сделан как нечто связывающее объекты в Win.
Объекти являются приложения оформленые и зарегистрированиые как COM.
Форма или что тоже самое — главное окно приложения — является частью приложения то есть COMа.
Значит нужно искать подходящее приложение а затем попытаться его понять с точки зрения автоматизации.
На мой взгляд приложение которое есть всегда ( начиная с W98) это InternetExploer
Оно загружается как COM и работает с автоматизацией.
Set oIE = WScript.CreateObject("InternetExplorer.Application", "ie_")