Определение кода нажатия кнопки
Здравствуйте. В общем проблема такая - делаю лабу по VBS. Задание такое:
Цитата:
Вывести примерно в правом нижнем углу экрана окно для ввода текстовой строки, показать эту строку в окне сообщений с кнопками Стоп,
Повтор и Пропустить и значком Question Mark. Затем в окне сообщений показать код нажатой кнопки при выходе из предыдущего окна.
Определить коды нажатия для всех кнопок.
|
В VBS я дуб дубом. Первую половину я сделал (окно вывел и все показал), а вот в последней части вообще допереть не могу - как показать код, и из какого окна. Перекопал хреналлион сайтов по сабжу - нигде ничерта нет( Помогите, плиз)
|
Цитата:
Цитата Win4ester
Первую половину я сделал (окно вывел и все показал), »
|
И где Ваш код?
Цитата:
Цитата Win4ester
с кнопками Стоп,
Повтор и Пропустить »
|
Не существует такого. Есть «Abort/Retry/Ignore» из наиболее близкого.
Код:
Option Explicit
Const InputBoxNearestWidthInTwips = 5495
Const InputBoxNearestHeightInTwips = 2390
With WScript.CreateObject("htmlfile").parentWindow.screen
MsgBox MsgBox(InputBox("Введите текстовую строку:", "Ввод текстовой строки", "Текстовая строка", (.availWidth / .deviceXDPI * 1440) - InputBoxNearestWidthInTwips, (.availHeight / .deviceYDPI * 1440) - InputBoxNearestHeightInTwips), vbAbortRetryIgnore + vbQuestion, "Окно сообщения"), vbOKOnly, "Код нажатой кнопки"
End With
WScript.Quit 0
|
Вложений: 1
Ой, пардоньте))
Цитата:
S = InputBox(vbLF & "Напишите строку текста:", _
"Окно ввода", , 20000, 12000)
Kod = MsgBox (S, vbAbortRetryIgnore+vbQuestion, _
"Окно сообщений")
|
Вот мой. Ваш почему-то ругается на .availWidth:
Файл 120835
|
Цитата:
Цитата Win4ester
Ваш почему-то ругается на .availWidth: »
|
Надо полагать, есть какие-то ограничения, связанные с безопасностью данного объекта Automation в Вашей версии ОС и/или Internet Explorer. У меня под Windows XP SP3 и IE6 отрабатывает.
Давайте попробуем так:
Код:
Option Explicit
Const READYSTATE_COMPLETE = 4
Const InputBoxNearestWidthInTwips = 5495
Const InputBoxNearestHeightInTwips = 2390
With WScript.CreateObject("InternetExplorer.Application")
.Navigate "about:blank"
Do
WScript.Sleep 100
Loop Until Not .Busy And .ReadyState = READYSTATE_COMPLETE
With .document.parentWindow.screen
MsgBox MsgBox(InputBox("Введите текстовую строку:", "Ввод текстовой строки", "Текстовая строка", (.availWidth / .deviceXDPI * 1440) - InputBoxNearestWidthInTwips, (.availHeight / .deviceYDPI * 1440) - InputBoxNearestHeightInTwips), vbAbortRetryIgnore + vbQuestion, "Окно сообщения"), vbOKOnly, "Код нажатой кнопки"
End With
.Quit
End With
WScript.Quit 0
Кстати, проверьте — не остаётся ли после отработки этого кода «висеть» в процессах «лишний» «iexplore.exe».
|
Цитата:
Цитата Iska
не остаётся ли после отработки этого кода «висеть» в процессах «лишний» «iexplore.exe» »
|
Сейчас всё работает) Нет, iexplore не остаётся. Я так понимаю, положение окна ввода текста будет одинаковое на любом мониторе с любым разрешением?
|
Цитата:
Цитата Win4ester
Нет, iexplore не остаётся. »
|
Это хорошо. А какая у Вас версия IE?
Цитата:
Цитата Win4ester
Я так понимаю, положение окна ввода текста будет одинаковое на любом мониторе с любым разрешением? »
|
Приблизительно. Точный размер окна InputBox зависит от настроек оформления (темы), от типа и размера системного шрифта, в случае длинного текста или заголовка — ещё и от их длины, я полагаю.
А так, да:
Код:
Const InputBoxNearestWidthInTwips = 5495
Const InputBoxNearestHeightInTwips = 2390
— пересчитанные в твипы размеры окна InputBox с некоторым запасом. Положение окна по ширине:
Код:
(.availWidth / .deviceXDPI * 1440) - InputBoxNearestWidthInTwips
текущий доступный размер для окна по ширине (в пикселях) делится на разрешение устройства вывода (пикселей на дюйм) и умножается на число твипов в дюйме. Из полученного значения отнимается приблизительный размер окна InputBox по ширине. Для вычисления положения окна по высоте:
Код:
(.availHeight / .deviceYDPI * 1440) - InputBoxNearestHeightInTwips)
— рассуждения аналогичные.
|
Цитата:
Цитата Iska
А какая у Вас версия IE? »
|
11.0.4. Спасибо огромное)
И ещё - я конечно понимаю, что наглею, но не могли бы вы помочь ещё с вот этим :angel::
Цитата:
Задайте с помощью функции Array значения 5-ти элементам массива,
представляющим собой геометрическую прогрессию. Покажите все
данные в окне сообщений.
|
|
Спасибо, ясно.
Код:
Option Explicit
Dim arrGeometricProgression
Dim i
Dim elem
arrGeometricProgression = Array(2, 4, 8, 16, 32)
MsgBox Join(arrGeometricProgression, vbLf)
For i = LBound(arrGeometricProgression) To UBound(arrGeometricProgression)
MsgBox arrGeometricProgression(i)
Next
For Each elem In arrGeometricProgression
MsgBox elem
Next
WScript.Quit 0
Три способа вывода: один — все элементы в одном окне, и два варианта вывода поэлементно.
|
Время: 00:40.
© OSzone.net 2001-