Показать полную графическую версию : [решено] Определение кода нажатия кнопки
Win4ester
06-01-2015, 13:33
Здравствуйте. В общем проблема такая - делаю лабу по VBS. Задание такое:
Вывести примерно в правом нижнем углу экрана окно для ввода текстовой строки, показать эту строку в окне сообщений с кнопками Стоп,
Повтор и Пропустить и значком Question Mark. Затем в окне сообщений показать код нажатой кнопки при выходе из предыдущего окна.
Определить коды нажатия для всех кнопок.
В VBS я дуб дубом. Первую половину я сделал (окно вывел и все показал), а вот в последней части вообще допереть не могу - как показать код, и из какого окна. Перекопал хреналлион сайтов по сабжу - нигде ничерта нет( Помогите, плиз)
Первую половину я сделал (окно вывел и все показал), »
И где Ваш код?
с кнопками Стоп,
Повтор и Пропустить »
Не существует такого. Есть «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
Win4ester
07-01-2015, 13:47
И где Ваш код? »
Ой, пардоньте))
S = InputBox(vbLF & "Напишите строку текста:", _
"Окно ввода", , 20000, 12000)
Kod = MsgBox (S, vbAbortRetryIgnore+vbQuestion, _
"Окно сообщений")
Вот мой. Ваш почему-то ругается на .availWidth:
120835
Ваш почему-то ругается на .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».
Win4ester
07-01-2015, 14:43
не остаётся ли после отработки этого кода «висеть» в процессах «лишний» «iexplore.exe» »
Сейчас всё работает) Нет, iexplore не остаётся. Я так понимаю, положение окна ввода текста будет одинаковое на любом мониторе с любым разрешением?
Нет, iexplore не остаётся. »
Это хорошо. А какая у Вас версия IE?
Я так понимаю, положение окна ввода текста будет одинаковое на любом мониторе с любым разрешением? »
Приблизительно. Точный размер окна InputBox зависит от настроек оформления (темы), от типа и размера системного шрифта, в случае длинного текста или заголовка — ещё и от их длины, я полагаю.
А так, да:
Const InputBoxNearestWidthInTwips = 5495
Const InputBoxNearestHeightInTwips = 2390
— пересчитанные в твипы размеры окна InputBox с некоторым запасом. Положение окна по ширине:
(.availWidth / .deviceXDPI * 1440) - InputBoxNearestWidthInTwips
текущий доступный размер для окна по ширине (в пикселях) делится на разрешение устройства вывода (пикселей на дюйм) и умножается на число твипов в дюйме. Из полученного значения отнимается приблизительный размер окна InputBox по ширине. Для вычисления положения окна по высоте:
(.availHeight / .deviceYDPI * 1440) - InputBoxNearestHeightInTwips)
— рассуждения аналогичные.
Win4ester
07-01-2015, 15:05
А какая у Вас версия IE? »
11.0.4. Спасибо огромное)
И ещё - я конечно понимаю, что наглею, но не могли бы вы помочь ещё с вот этим :angel::
Задайте с помощью функции Array значения 5-ти элементам массива,
представляющим собой геометрическую прогрессию. Покажите все
данные в окне сообщений.
11.0.4. »
Спасибо, ясно.
с вот этим »
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
Три способа вывода: один — все элементы в одном окне, и два варианта вывода поэлементно.
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.