PDA

Показать полную графическую версию : Общие вопросы по AutoIt


Страниц : [1] 2

bugmenotagain
15-07-2012, 13:35
После чтения основной справки появился вопрос, буду рад если вы на него подскажите ответ.
Есть в справке вот такой пример скрипта

#include <GUIConstants.au3>

$mainwindow = GUICreate("Hello World", 200, 100)
GUICtrlCreateLabel("Hello world! How are you?", 30, 10)
$okbutton = GUICtrlCreateButton("OK", 70, 50, 60)

$dummywindow = GUICreate("Dummy window for testing ", 200, 100)

GUISwitch($mainwindow)
GUISetState(@SW_SHOW)

While 1
$msg = GUIGetMsg(1)

Select
Case $msg[0] = $okbutton
MsgBox(0, "GUI Event", "You pressed OK!")

Case $msg[0] = $GUI_EVENT_CLOSE And $msg[1] = $mainwindow
MsgBox(0, "GUI Event", "You clicked CLOSE on the main window! Exiting...")
ExitLoop
EndSelect
WEnd

$dummywindow = GUICreate("Dummy window for testing ", 200, 100)
создает ложное окошко? что оно делает если при его комментировании ничего не изменяется?
$msg = GUIGetMsg(1)
вызывает запрос о получении сообщений о событиях, 1 для массивов, но каких массивов если их не задано?
Case $msg[0] = $GUI_EVENT_CLOSE And $msg[1] = $mainwindow
как это переменую msg[0] без запроса о массивах приравняли к кнопке закрытия и запросу о массивах? и тем более что это за условие такое?
спасибо

AZJIO
15-07-2012, 13:55
Вы скачайте справку на русском языке (http://forum.oszone.net/post-1945634.html#post1945634), там по русски написано, что это тестовое окно и пример как GUISwitch делает указанное окно текущим.
Прочтите описание GUIGetMsg и станет понятным что $msg = GUIGetMsg(1) это массив.

bugmenotagain
15-07-2012, 14:35
что это тестовое окно »
там написано для чего оно и почему его не видно?

bugmenotagain
15-07-2012, 15:20
кажется разобрался с тест окном

bugmenotagain
22-07-2012, 16:18
почему такой код

$asResult = StringRegExp("Это тестовый пример", '(тест)', 1)
If @error == 0 Then
MsgBox(0, "SRE, пример 4", $asResult[0])
EndIf
$asResult = StringRegExp("Это тестовый пример", '(те)(ст)', 1)
If @error == 0 Then
MsgBox(0, "SRE, пример 4", $asResult[0] & ",," & $asResult[1])
EndIf

выдает во 2м сообщении "те,,те", а вот такой

$asResult = StringRegExp("Это тестовый пример", '(тест)', 1)
If @error == 0 Then
MsgBox(0, "SRE, пример 4", $asResult[0])
EndIf
$asResult = StringRegExp("Это тестовый пример", '(те)(ст)', 1)
If @error == 0 Then
MsgBox(0, "SRE, пример 4", $asResult[0] & ",," & $asResult[0])
EndIf

выдает во 2м сообщении "те,,ст"

$asResult[0] это типа возврат без массива, но разве "ст" это массив?

и почему такой код

$asResult = StringRegExp("Были 18 листов оставшихся в пачке бумаги.", '([0-9]{1,3})', 0)
If @error == 0 Then
MsgBox(0, "SRE, пример 5", $asResult[0])
EndIf

выдает ошибку?
flag [опционально] = Указывает функции, хотите ли вы узнать найдено совпадение по шаблону или нет, или вы хотите получить первое совпадение с шаблоном, или вы хотите получить все совпадения с шаблоном в тексте "test".
ну вот ставлю 0, а не получаю первое совпадение, в чем косяк?

bugmenotagain
22-07-2012, 16:35
вот здесь тоже не работает flag

$asResult = StringRegExp("Вы использовали 36 из 279 страниц.", '([0-9]{1,3})(?: страниц)', 0)
If @error == 0 Then
MsgBox(0, "SRE, пример 6", $asResult[0])
EndIf



$asResult = StringRegExp("15, 16, 17", '([0-9]{1,2})', 0)
If @error == 0 Then
MsgBox(0, "SRE, пример 6", $asResult[0])
EndIf

если писать так StringRegExp("15, 16, 17", '([0-9]{1,2})', 0), то я "хочу получить все совпадения с шаблоном в тексте "15, 16, 17""
но вылазит ошибка, почему?

я хочу чтобы числа 15, 16 и 17 выводились в сообщении

$asResult = StringRegExp("15, 16, 17", '([0-1]{1,2})', 0)
If @error == 0 Then
MsgBox(0, "SRE, пример 6", $asResult[0])
EndIf

как мне это сделать если StringRegExp("15, 16, 17", '([0-1]{1,2})', 0) не работает?

bugmenotagain
22-07-2012, 16:51
вот даже простую строку пишу
MsgBox(0, "SRE, пример 6", StringRegExp("151617 после 111", '1', 1))
вылазит пустое окошко, это как понимать?

в чем различие между $asResult[0] и $asResult[1], это че второе выдает просто совпадение, а второе массив? или как вообще? в справке не могу найти описание этой непонятной фичи

ferget
22-07-2012, 17:23
вот даже простую строку пишу
« скрыть
MsgBox(0, "SRE, пример 6", StringRegExp("151617 после 111", '1', 1))
вылазит пустое окошко, это как понимать? »
Это естественно, Возвращаемое значение не массив

в чем различие между $asResult[0] и $asResult[1], это че второе выдает просто совпадение, а второе массив? »
$asResult[0] первый элемент массива, $asResult[1] второй и т.д.

bugmenotagain
22-07-2012, 17:25
чем $msg[0] отличается от $msg[1] ?
первое это переменная сообщения, а второе тоже самое но в массиве?
вот тут
#include <GUIConstantsEx.au3>

$mainwindow = GUICreate("Привет Мир", 200, 100)
GUICtrlCreateLabel("Привет Мир! Как дела?", 30, 10)
$okbutton = GUICtrlCreateButton("OK", 70, 50, 60)

$dummywindow = GUICreate("Dummy window for testing ", 200, 100)

GUISwitch($mainwindow)
GUISetState(@SW_SHOW)

While 1
$msg = GUIGetMsg(1)

Select
Case $msg[0] = $okbutton
MsgBox(0, "Событие GUI", "Вы нажали OK!")

Case $msg[0] = $GUI_EVENT_CLOSE And $msg[1] = $mainwindow
MsgBox(0, "Событие GUI", "Вы нажали ЗАКРЫТЬ в главном окне! Завершаем...")
ExitLoop
EndSelect
WEnd
почему не работает так?
Case $msg[1] = $GUI_EVENT_CLOSE And $msg[1] = $mainwindow
я не могу понять суть, объясните пожалста, в справку не отправляйте, я это там и нашел, просто она рассчитана на программистов, коим я не являюсь.

ferget
22-07-2012, 17:37
вот возвращаемый массив
$array[0] = 0 или ID-события или идентификатор элемента управления
$array[1] = Дескриптор окна события
$array[2] = Указатель элемента события (если имеется)
$array[3] = Текущая X-координата курсора мыши (относительно GUI-окна)
$array[4] = Текущая Y-координата курсора мыши (относительно GUI-окна)

msg - этот самый массив и есть

bugmenotagain
22-07-2012, 17:38
$asResult[0] первый элемент массива, $asResult[1] второй и т.д. »
не похоже, вот так пробую

$asResult = StringRegExp("Были 18 листов и 19 листов оставшихся в пачке бумаги", '([0-9]{1,3})', 1)
If @error == 0 Then
MsgBox(0, "SRE, пример 5", $asResult[0] & "," & $asResult[1])
EndIf

и не канает, должно быть так "18, 19", а выходит ошибка

ferget
22-07-2012, 17:41
потому-что у вас флаг 1 и возвращается массив из одного элемента, то есть только $asResult[0]

сделайте флаг 3 и будет работать

bugmenotagain
22-07-2012, 17:50
сделайте флаг 3 и будет работать »
все понятно, спасибо.
$array[1] = Дескриптор окна события »
$GUI_EVENT_CLOSE это разве не спец значение, которое операционная система присваивает каждому создаваемому окну?
чет запутался совсем, я думал это просто кнопка

ferget
22-07-2012, 20:14
$GUI_EVENT_CLOSE находится в msg[0] - в данном случае это ID-события

bugmenotagain
23-07-2012, 10:39
$GUI_EVENT_CLOSE находится в msg[0] »
если писать msg[0] то скрипт не работает :(

ferget
23-07-2012, 17:22
если писать msg[0] то скрипт не работает »
покажите скрипт

bugmenotagain
24-07-2012, 06:13
ferget, http://forum.oszone.net/post-1956651-9.html
вопрос о "$GUI_EVENT_CLOSE" и о том как написать $msg[0] = $GUI_EVENT_CLOSE или $msg[1] = $GUI_EVENT_CLOSE
то, что $msg[0] это ID события или идентификатор элемента управления понятно, ну и $msg[1] дескриптор окна события тоже ясно.

ferget
24-07-2012, 07:09
то, что $msg[0] это ID события или идентификатор элемента управления понятно, ну и $msg[1] дескриптор окна события тоже ясно. »
А что не понятно?

если писать msg[0] то скрипт не работает »
скрипт из #2 работает

bugmenotagain
24-07-2012, 11:01
ferget, да все, вопросов пока не осталось. спасибо.

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

bugmenotagain
28-07-2012, 19:33
Делаю простой скрипт по примеру

#include <StaticConstants.au3>


GUICreate ( "Окно с фоном", 350, 250, -1, -1, -1, -1)

Local $background
Local $sFile = @ScriptDir & "444.jpg"

$background = GUICtrlCreatePic(@ScriptDir & "444.jpg", 0, 0, 0, 0, -1, $WS_EX_LAYERED)
GuiCtrlSetState(-1, $background)

GUISetState(@SW_SHOW)


Sleep ( 2000 )

выдается ошибка на "$WS_EX_LAYERED", как решить посоветуете?




© OSzone.net 2001-2012