Что нового

[Элементы GUI] Работа с элементами GUI в бесконечном цикле.

Gzzk

Новичок
Сообщения
104
Репутация
1
Здравствуйте.
Есть вот такой бесконечный цикл:
Код:
While 1
	$sUrl=Redirectlot($sCookie)
	if $sUrl<>'0' Then
           VK_likesAdd($auth_key,UrlToID($sUrl,1),UrlToID($sUrl,3),UrlToID($sUrl,2))
           Check($sCookie)
	EndIf
WEnd

И вот такой вот интерфейс:
Код:
#Region ### START Koda GUI section ### 
$Form1_1 = GUICreate("", 492, 144, 192, 124)
$Login = GUICtrlCreateInput($sLogin, 8, 8, 401, 21)
$Pass = GUICtrlCreateInput($sPass, 8, 32, 401, 21)
$Cookie = GUICtrlCreateInput($sCookie, 8, 56, 401, 21)
$Id = GUICtrlCreateInput($sId, 8, 80, 401, 21)
$Label1 = GUICtrlCreateLabel("Логин вк", 432, 16, 50, 17)
$Label2 = GUICtrlCreateLabel("Пароль вк", 425, 40, 57, 17)
$Label3 = GUICtrlCreateLabel("Кука", 454, 64, 28, 17)
$Label4 = GUICtrlCreateLabel("Id приложен", 416, 88, 66, 17)
$Start = GUICtrlCreateButton("Start", 8, 112, 75, 25)
$Save = GUICtrlCreateButton("Save", 408, 112, 75, 25)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###

While 1
	$nMsg = GUIGetMsg()
	Switch $nMsg
		Case $GUI_EVENT_CLOSE
			Exit

		Case $Start
			Convert()
			Save()
			Start()
		Case $Save
			Convert()
			Save()
	EndSwitch
WEnd

Собственно проблема в том,что при входе в бесконечный цикл элементы GUI перестают работать.Есть идея запихнуть обработчик сообщений от ГУЯ в цикл,но мне кажется что есть более изящное решение этой проблемы.Помогите пожалуйста найти его.
Заранее благодарен за ответы.
 

joiner

Модератор
Локальный модератор
Сообщения
3,557
Репутация
628
Код:
AdlibRegister('_func')

Func _func()
    $sUrl=Redirectlot($sCookie)
    if $sUrl<>'0' Then
           VK_likesAdd($auth_key,UrlToID($sUrl,1),UrlToID($sUrl,3),UrlToID($sUrl,2))
           Check($sCookie)
    EndIf
EndFunc



либо через

Код:
Func WM_COMMAND($hWnd, $Msg, $wParam, $lParam)
	Local $nNotifyCode = BitShift($wParam, 16)
	Local $nID = BitAND($wParam, 0xFFFF)
	Switch $nNotifyCode
		Case 0
			Switch $nID
				Case 'ID кнопки'
; действие, функция
				Case 'ID кнопки'
; действие, функция
			EndSwitch
	EndSwitch
	Return 'GUI_RUNDEFMSG'
EndFunc


ну или так

Код:
While 1
	     $sUrl=Redirectlot($sCookie)
    if $sUrl<>'0' Then
           VK_likesAdd($auth_key,UrlToID($sUrl,1),UrlToID($sUrl,3),UrlToID($sUrl,2))
           Check($sCookie)
    EndIf
    $nMsg = GUIGetMsg()
    Switch $nMsg
        Case $GUI_EVENT_CLOSE
            Exit

        Case $Start
            Convert()
            Save()
            Start()
        Case $Save
            Convert()
            Save()
    EndSwitch
WEnd
 
Автор
G

Gzzk

Новичок
Сообщения
104
Репутация
1
Проблема не решилась:(
Если функция выполняется некоторое время - 1-ый и 3-ий способ не помогает.
Пример:
Так работает:
Код:
;;;;;
AdlibRegister('_func')
;;;;;
Func _func()
If $Work Then
ConsoleWrite("Work..."&@CRLF)
EndIf
EndFunc
;;;;;

А так нет:
Код:
;;;;;
AdlibRegister('_func')
;;;;;
Func _func()
If $Work Then
Sleep(3000)
ConsoleWrite("Work..."&@CRLF)
EndIf
EndFunc
;;;;;
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,673
Репутация
2,486
Gzzk [?]
Если функция выполняется некоторое время - 1-ый и 3-ий способ не помогает.
А второй?

Есть ещё вариант с Timer'ами, но это тоже может вызывать проблемы.
Также можно использовать режим OnEvent, подробнее об этом написано в справке.
 
Автор
G

Gzzk

Новичок
Сообщения
104
Репутация
1
Со вторым я не разобрался.Может напишите примерчик с функциями из предыдущего сообщения?
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,673
Репутация
2,486
Gzzk [?]
Может напишите примерчик с функциями из предыдущего сообщения?

Код:
#include <GUIConstantsEx.au3>
#include <ButtonConstants.au3>
#include <MenuConstants.au3>
#include <WindowsConstants.au3>

;...

$Form1_1 = GUICreate("", 492, 144, 192, 124)
$ogin = GUICtrlCreateInput($sLogin, 8, 8, 401, 21)
$Pass = GUICtrlCreateInput($sPass, 8, 32, 401, 21)
$Cookie = GUICtrlCreateInput($sCookie, 8, 56, 401, 21)
$Id = GUICtrlCreateInput($sId, 8, 80, 401, 21)
$Label1 = GUICtrlCreateLabel("Логин вк", 432, 16, 50, 17)
$Label2 = GUICtrlCreateLabel("Пароль вк", 425, 40, 57, 17)
$Label3 = GUICtrlCreateLabel("Кука", 454, 64, 28, 17)
$Label4 = GUICtrlCreateLabel("Id приложен", 416, 88, 66, 17)
$Start = GUICtrlCreateButton("Start", 8, 112, 75, 25)
$Save = GUICtrlCreateButton("Save", 408, 112, 75, 25)
GUISetState(@SW_SHOW)

GUIRegisterMsg($WM_SYSCOMMAND, "WM_SYSCOMMAND")
GUIRegisterMsg($WM_COMMAND, 'WM_COMMAND')

;Тут бесконечный цикл
While 1
	Sleep(10)
WEnd

;Отслеживаем уведомление SC_CLOSE (пользователь закрыл окно)
Func WM_SYSCOMMAND($hWmd, $Msg, $wParam, $lParam)
	If $wParam = $SC_CLOSE Then Exit
	Return $GUI_RUNDEFMSG
EndFunc

;Отслеживаем уведомление от кнопки
Func WM_COMMAND($hWnd, $Msg, $wParam, $lParam)
	Local $nNotifyCode = BitShift($wParam, 16)
	Local $nID = BitAND($wParam, 0xFFFF)
	
	Switch $nNotifyCode
		Case $BN_CLICKED
			Switch $nID
				Case $Start
					Convert()
					Save()
					Start()
				Case $Save
					Convert()
					Save()
			EndSwitch
	EndSwitch
	
	Return $GUI_RUNDEFMSG
EndFunc

;...
 
Автор
G

Gzzk

Новичок
Сообщения
104
Репутация
1
Код:
E:\AutoIt sources\olike\test2.au3 (27) : ==> Variable used without being declared.:
If $wParam = $SC_CLOSE Then Exit
If $wParam = ^ ERROR
Код:
Func WM_SYSCOMMAND($hWmd, $Msg, $wParam, $lParam)
    If $wParam = $SC_CLOSE Then Exit;На эту строчку кричит.
    Return $GUI_RUNDEFMSG
EndFunc
 

joiner

Модератор
Локальный модератор
Сообщения
3,557
Репутация
628
вначале скрипта должно быть
Код:
#include <MenuConstants.au3>

либо можно так
Код:
If $wParam = 0xF060 Then Exit
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,673
Репутация
2,486
joiner [?]
вначале скрипта должно быть
Оно есть в моём скрипте.

Gzzk
Все библиотеки подключаемые в моём скрипте, нужно также подключить и в твой.
 

joiner

Модератор
Локальный модератор
Сообщения
3,557
Репутация
628
CreatoR
я как раз про то, что у него этого нет. либо копировал только код без указания библиотек, либо криво скопировал
 
Автор
G

Gzzk

Новичок
Сообщения
104
Репутация
1
Проблема решена,премного благодарен вам.
 
Верх