Войти

Показать полную графическую версию : [решено] Определение кода нажатия кнопки


Win4ester
06-01-2015, 13:33
Здравствуйте. В общем проблема такая - делаю лабу по VBS. Задание такое:

Вывести примерно в правом нижнем углу экрана окно для ввода текстовой строки, показать эту строку в окне сообщений с кнопками Стоп,
Повтор и Пропустить и значком Question Mark. Затем в окне сообщений показать код нажатой кнопки при выходе из предыдущего окна.
Определить коды нажатия для всех кнопок.
В VBS я дуб дубом. Первую половину я сделал (окно вывел и все показал), а вот в последней части вообще допереть не могу - как показать код, и из какого окна. Перекопал хреналлион сайтов по сабжу - нигде ничерта нет( Помогите, плиз)

Iska
07-01-2015, 03:17
Первую половину я сделал (окно вывел и все показал), »
И где Ваш код?

с кнопками Стоп,
Повтор и Пропустить »
Не существует такого. Есть «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

Iska
07-01-2015, 14:33
Ваш почему-то ругается на .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 не остаётся. Я так понимаю, положение окна ввода текста будет одинаковое на любом мониторе с любым разрешением?

Iska
07-01-2015, 14:58
Нет, 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-ти элементам массива,
представляющим собой геометрическую прогрессию. Покажите все
данные в окне сообщений.

Iska
07-01-2015, 15:24
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