Доброго дня.
Есть форма, которая после старта будет делает запросы и выводить ответы в поле INPUT. Запуск и остановка планируется реализовать одной кнопкой.
Вот только после запуска Request в цикле не получается остановить эту задачу, да и принципе получается только "убив" процесс. Нужно иметь возможность остановить процесс, поставить требуемые галочки, из списка выбрать запросы (его пока нет, да и речь не о нём), и опять его запустить.
Есть форма, которая после старта будет делает запросы и выводить ответы в поле INPUT. Запуск и остановка планируется реализовать одной кнопкой.
Код:
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <ComboConstants.au3>
#include <ButtonConstants.au3>
#include <TreeViewConstants.au3>
#include <GUIComboBox.au3>
Global $chk=0
_Main()
Exit
Func Logging(ByRef $idTEXT,$whinfo)
local $cTime = @YEAR & "-" & @MON & "-" & @MDAY &" " & @HOUR & ":" & @MIN & ":" & @SEC &" "
local $editBefore = GuiCtrlRead($idTEXT)
GUICtrlSetData($idTEXT, $cTime&" "&$whinfo&@CRLF&$editBefore& " ")
;$editBefore=""
EndFunc
Func Request(ByRef $idTEXT)
$whinfo = "Есть инфа!"
local $cTime = @YEAR & "-" & @MON & "-" & @MDAY &" " & @HOUR & ":" & @MIN & ":" & @SEC &" "
local $editBefore = GuiCtrlRead($idTEXT)
GUICtrlSetData($idTEXT, $cTime&" "&$whinfo&@CRLF&$editBefore& " ")
Sleep(3000)
EndFunc
Func _Main()
Local $idInput_Date, $idInput_Time, $iMsg
Local $idTEXT, $Combo1, $sList
Local $nCh1, $nCh2, $nCh3, $nCh4, $nCh5, $nCh6, $msg
Local $whinfo
#forceref $idInput_Date, $idInput_Time
GUICreate("Мониторинг", 500, 339, (@DesktopWidth - 500) / 2, (@DesktopHeight - 339) / 2, $WS_OVERLAPPEDWINDOW + $WS_VISIBLE + $WS_CLIPSIBLINGS + $WS_POPUP + $WS_EX_TOOLWINDOW)
Opt("GUIResizeMode",802)
Local $hWnd = WinGetHandle("[ACTIVE]")
WinSetOnTop($hWnd, "", 1)
GUICtrlCreateLabel("Что ищем?", 10, 12, 60, 20)
$Combo1 = GUICtrlCreateCombo("", 70, 10, 100, 150, BitOR($GUI_SS_DEFAULT_COMBO, $CBS_NOINTEGRALHEIGHT))
GUICtrlSetData(-1, $sList , "") ; добавляет другие пункты и устанавливает новый по умолчанию
GUICtrlSendMsg(-1, $CB_SETDROPPEDWIDTH, 370, 0) ; Ширина выпадающего списка
$nCh1 = GUICtrlCreateCheckbox("Зима", 180, 10, 60, 20)
$nCh2 = GUICtrlCreateCheckbox("Лето", 280, 10, 60, 20)
Local $iOKButton = GUICtrlCreateButton("Старт", 380, 8, 60)
;GUICtrlCreateLabel("Время", 10, 240, 150, 20)
;$idInput_Time = GUICtrlCreateInput(""& @MON & "-" & @MDAY & "-" & @YEAR &" " & @HOUR & ":" & @MIN & ":" & @SEC, 180, 240, 280, 20)
$idTEXT = GUICtrlCreateEdit("", 30, 50, 420, 300, $ES_AUTOVSCROLL + $WS_VSCROLL + $ES_MULTILINE + $ES_WANTRETURN)
GUICtrlSetTip(-1, "Мониторинг")
GUISetState(@SW_SHOW)
While 1
$iMsg = GUIGetMsg()
Switch $iMsg
Case $GUI_EVENT_CLOSE
Exit
Case $iOKButton
if $chk = 0 Then
GUICtrlSetData($iOKButton,"Стоп")
$whinfo = "Пошёл процесс!"
Logging($idTEXT,$whinfo)
$chk = 1
Sleep(2000)
While 1
Request($idTEXT) ; вот тут запускается функция опроса данных и из неё надо как-то выйти
WEnd
else
GUICtrlSetData($iOKButton,"Старт")
$i=0
$whinfo ="Мониторинг остановлен"
Logging($idTEXT,$whinfo)
$chk = 0
;MsgBox(4096, "Сообщение", "Мониторинг запущен",3)
EndIf
Case Else
EndSwitch
WEnd
EndFunc ;==>_Main
Вот только после запуска Request в цикле не получается остановить эту задачу, да и принципе получается только "убив" процесс. Нужно иметь возможность остановить процесс, поставить требуемые галочки, из списка выбрать запросы (его пока нет, да и речь не о нём), и опять его запустить.
Последнее редактирование: