|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » AutoIt » [решено] Вписывание прогресс-бара в гуи-форму |
|
[решено] Вписывание прогресс-бара в гуи-форму
|
Ветеран Сообщения: 903 |
Профиль | Отправить PM | Цитировать Есть такой скрипт (за основу, помоему, взят скрипт пргресс-бара от CreatOr):
#include <IE.au3> #include <Timers.au3> Global $i_Timer, $sTest, $h_Timer_GUI, $i_Precent = 0 _ProgressOn() While 1 Call("Internet"); вызывается проверка скорости интернета ExitLoop WEnd _Timer_KillTimer($h_Timer_GUI, $i_Timer) MsgBox(4096, "Интернет", "Текущая скорость:" & @LF & @LF & " " & $sTest & " Кб/с") Func _ProgressOn($sTitle="", $sMainText="", $sSubText="", $iXPos=-1, $iYPos=-1, $iOpt=16) ProgressOn($sTitle, $sMainText, $sSubText, $iXPos, $iYPos, $iOpt) $i_Timer = _Timer_SetTimer($h_Timer_GUI, 500, "_ProgressSet") EndFunc Func _ProgressSet($hWnd, $Msg, $iIDTimer, $dwTime) ;Увеличиваем прогресс на 5 единиц $i_Precent += 2 ProgressSet($i_Precent) ;Если достигли 100 процентов, сбрасываем на 0. If $i_Precent = 100 Then $i_Precent = 0 EndFunc Func Internet() $oIE = _IECreate("http://www.spbtlg.ru/index.html", 0, 0) _IENavigate($oIE, "http://www.spbtlg.ru/stb.php") $sTest = _IEBodyReadText($oIE) _IEQuit($oIE) $sCut_Word = " = " $sCut_Word1 = @LF $sTest = StringRegExpReplace($sTest, "(?is)\A.*?(" & $sCut_Word & ".*?)$", "\1") $sTest = StringRegExpReplace($sTest, "(?is)\A(.*?)" & $sCut_Word1 & ".*?$", "\1") $sTest = StringReplace($sTest, " = ", "") $sTest = StringReplace($sTest, ".", ",") $sTest = StringStripCR($sTest) EndFunc GUICreate("My form", 220, 100, 100, 200) $progressbar = GUICtrlCreateProgress(10, 10, 200, 20) $button = GUICtrlCreateButton("Start", 75, 70, 70, 20) GUISetState() PS прогресс-бар выполняет простую функцию сигнализирования о том, что задача проверки выполняется. |
|
Отправлено: 14:37, 09-08-2010 |
Ветеран Сообщения: 812
|
Профиль | Отправить PM | Цитировать saavaage,
Я не совсем понял, Вам надо отдельное окно с прогресс-баром? Если нет, то попробуйте так: #include <GUIConstantsEx.au3> $j = False $i = 0 $z = 2 #region ### START Koda GUI section ### Form= $Form1 = GUICreate("Form1", 300, 200, -1, -1) $Label1 = GUICtrlCreateLabel('', 125, 20, 50, 20) $Progress1 = GUICtrlCreateProgress(50, 50, 200, 20) $Button1 = GUICtrlCreateButton("Start", 100, 100, 100, 50) GUISetState(@SW_SHOW) #endregion ### END Koda GUI section ### While 1 $nMsg = GUIGetMsg() Switch $nMsg Case $GUI_EVENT_CLOSE Exit Case $Button1 $j = Not $j If $j Then GUICtrlSetData($Button1, "Stop") GUICtrlSetData($Label1, "Work") AdlibRegister('_MyFunc', 50) Else GUICtrlSetData($Button1, "Start") GUICtrlSetData($Label1, "No Work") AdlibUnRegister('_MyFunc') EndIf EndSwitch WEnd Func _MyFunc() $i += $z If $i = 100 Then $z = -2 If $i = 0 Then $z = 2 GUICtrlSetData($Progress1, $i) EndFunc ;==>_MyFunc |
Отправлено: 15:50, 09-08-2010 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Ветеран Сообщения: 903
|
Профиль | Отправить PM | Цитировать madmasles, схема скрипта такова:
при нажатии на кнопку старт запускается пргресс-бар, затем выполнение функции "Internet". Прогресс-бар работает постоянно пока выполняется работа функции "Internet". После того, как функция выполнена, прогресс замирает и после закрытия месседж-бокса с результатом, обнуляется. Не совсем понимаю, как "втиснуть" в ваш скрипт выполнение функции "Internet" |
Последний раз редактировалось saavaage, 09-08-2010 в 16:36. Отправлено: 16:04, 09-08-2010 | #3 |
Ветеран Сообщения: 903
|
Профиль | Отправить PM | Цитировать madmasles, разобрался походу, работает вот такой скрипт:
#include <GUIConstantsEx.au3> #include <IE.au3> $j = False $i = 0 $z = 2 #region ### START Koda GUI section ### Form= $Form1 = GUICreate("Form1", 300, 200, -1, -1) $Label1 = GUICtrlCreateLabel('Начни проверку!', 105, 20, 100, 20) $Progress1 = GUICtrlCreateProgress(50, 50, 200, 20) $Button1 = GUICtrlCreateButton("Замерить", 100, 100, 100, 50) GUISetState(@SW_SHOW) #endregion ### END Koda GUI section ### While 1 $nMsg = GUIGetMsg() Switch $nMsg Case $GUI_EVENT_CLOSE Exit Case $Button1 GUICtrlSetData($Label1, "Идет проверка!") AdlibRegister('_MyFunc', 50) While 1 Call("Internet") ExitLoop WEnd GUICtrlSetData($Label1, "Начни проверку!") AdlibUnRegister('_MyFunc') $i = 0 GUICtrlSetData($Progress1, $i) EndSwitch WEnd Func _MyFunc() $i += $z If $i = 100 Then $z = -2 If $i = 0 Then $z = 2 GUICtrlSetData($Progress1, $i) EndFunc ;==>_MyFunc Func Internet() $oIE = _IECreate("http://www.spbtlg.ru/index.html", 0, 0) _IENavigate($oIE, "http://www.spbtlg.ru/stb.php") $sTest = _IEBodyReadText($oIE) _IEQuit($oIE) $sCut_Word = " = " $sCut_Word1 = @LF $sTest = StringRegExpReplace($sTest, "(?is)\A.*?(" & $sCut_Word & ".*?)$", "\1") $sTest = StringRegExpReplace($sTest, "(?is)\A(.*?)" & $sCut_Word1 & ".*?$", "\1") $sTest = StringReplace($sTest, " = ", "") $sTest = StringReplace($sTest, ".", ",") $sTest = StringStripCR($sTest) MsgBox(4096, "Интернет", "Текущая скорость:" & @LF & @LF & " " & $sTest & " Кб/с") EndFunc |
------- Отправлено: 17:21, 09-08-2010 | #4 |
Ветеран Сообщения: 812
|
Профиль | Отправить PM | Цитировать |
|
Отправлено: 17:34, 09-08-2010 | #5 |
Ветеран Сообщения: 903
|
Профиль | Отправить PM | Цитировать madmasles, прекрасно! Использую Ваше решение.
Но, на всякий случай, просмотрите мое решение - мне важно знать свои ошибки (я только начал изучать). |
------- Отправлено: 18:16, 09-08-2010 | #6 |
Ветеран Сообщения: 812
|
Профиль | Отправить PM | Цитировать saavaage,
1. В Вашем коде кнопку $Button1, после нажатия, надо сделать неактивной, а после отработки функции Internet() - активной, чтобы нельзя было нажать на нее во время работы функции. 2. Конструкция Лучше, чем в моем скрипте, если ее использовать в моем, то можно убрать эти строки: #include <GuiMenu.au3> ... $hMenu = _GUICtrlMenu_GetSystemMenu($Form1) ... _GUICtrlMenu_EnableMenuItem($hMenu, $SC_CLOSE, 2) ... _GUICtrlMenu_EnableMenuItem($hMenu, $SC_CLOSE, 0) Func _SpeedInternet() Local $sPattern = '(?s).*?= (.*?)\r\n?.*', $sText Local $oIE = _IECreate("http://www.spbtlg.ru/stb.php", 0, 0) If Not IsObj($oIE) Then Return $sResume $sText = _IEBodyReadText($oIE) _IEQuit($oIE) If $sText Then $sText = StringRegExpReplace($sText, $sPattern, "\1") If Number($sText) Then $sResume = $sText & ' Kbps' EndIf Return $sResume EndFunc ;==>_SpeedInternet |
Отправлено: 19:30, 09-08-2010 | #7 |
Ветеран Сообщения: 903
|
Профиль | Отправить PM | Цитировать madmasles, Вы правы. Т.о. окончательный мой код (уже в правильной редакции) будет таким:
#include <GUIConstantsEx.au3> #include <IE.au3> $j = False $i = 0 $z = 2 #region ### START Koda GUI section ### Form= $Form1 = GUICreate("Form1", 300, 200, -1, -1) $Label1 = GUICtrlCreateLabel('Начни проверку!', 105, 30, 100, 20) $Progress1 = GUICtrlCreateProgress(50, 50, 200, 20) $Button1 = GUICtrlCreateButton("Замерить", 100, 100, 100, 50) GUISetState(@SW_SHOW) #endregion ### END Koda GUI section ### ;GUISetState() While 1 $nMsg = GUIGetMsg() Switch $nMsg Case $GUI_EVENT_CLOSE Exit Case $Button1 ControlDisable("Form1", "", $Button1) GUICtrlSetData($Label1, "Идет проверка!") AdlibRegister('_MyFunc', 50) While 1 Call("Internet") ExitLoop WEnd GUICtrlSetData($Label1, "Начни проверку!") AdlibUnRegister('_MyFunc') $i = 0 GUICtrlSetData($Progress1, $i) ControlEnable("Form1", "", $Button1) EndSwitch WEnd Func _MyFunc() $i += $z If $i = 100 Then $z = -2 If $i = 0 Then $z = 2 GUICtrlSetData($Progress1, $i) EndFunc ;==>_MyFunc Func Internet() $oIE = _IECreate("http://www.spbtlg.ru/index.html", 0, 0) _IENavigate($oIE, "http://www.spbtlg.ru/stb.php") $sTest = _IEBodyReadText($oIE) _IEQuit($oIE) $sCut_Word = " = " $sCut_Word1 = @LF $sTest = StringRegExpReplace($sTest, "(?is)\A.*?(" & $sCut_Word & ".*?)$", "\1") $sTest = StringRegExpReplace($sTest, "(?is)\A(.*?)" & $sCut_Word1 & ".*?$", "\1") $sTest = StringReplace($sTest, " = ", "") $sTest = StringReplace($sTest, ".", ",") $sTest = StringStripCR($sTest) MsgBox(4096, "Интернет", "Текущая скорость:" & @LF & @LF & " " & $sTest & " Кб/с") EndFunc #include <GUIConstantsEx.au3> #include <GIFAnimation.au3> #include <IE.au3> #include <StaticConstants.au3> Opt("MustDeclareVars", 1) Global $sResume = 'Error', $pGIF, _ $sFileGIF = @WindowsDir & "\pchealth\helpctr\System\images\progbar.gif", _ $Form1, $Label1, $hGIF, $Button1, $nMsg, $hMenu $Form1 = GUICreate("Form1", 300, 200, -1, -1) $Label1 = GUICtrlCreateLabel('', 50, 20, 200, 20, $SS_CENTER) $hGIF = _GUICtrlCreateGIF($sFileGIF, "", 75, 50, $pGIF) _GIF_PauseAnimation($pGIF) $Button1 = GUICtrlCreateButton("Start", 100, 100, 100, 50) GUISetState(@SW_SHOW) While 1 $nMsg = GUIGetMsg() Switch $nMsg Case $GUI_EVENT_CLOSE Exit Case $Button1 GUICtrlSetState($Button1, $GUI_DISABLE) GUICtrlSetData($Label1, "") _GIF_ResumeAnimation($pGIF) _SpeedInternet() _GIF_PauseAnimation($pGIF) GUICtrlSetData($Label1, "Ваша скорость: " & $sResume) GUICtrlSetState($Button1, $GUI_ENABLE) EndSwitch WEnd Func _SpeedInternet() Local $sPattern = '(?s).*?= (.*?)\r\n?.*', $sText Local $oIE = _IECreate("http://www.spbtlg.ru/stb.php", 0, 0) If Not IsObj($oIE) Then Return $sResume $sText = _IEBodyReadText($oIE) _IEQuit($oIE) If $sText Then $sText = StringRegExpReplace($sText, $sPattern, "\1") If Number($sText) Then $sResume = $sText & ' Kbps' EndIf Return $sResume EndFunc ;==>_SpeedInternet |
Отправлено: 19:49, 09-08-2010 | #8 |
Ветеран Сообщения: 812
|
Профиль | Отправить PM | Цитировать saavaage,
Мой такой будет: |
Отправлено: 22:04, 09-08-2010 | #9 |
Ветеран Сообщения: 903
|
Профиль | Отправить PM | Цитировать madmasles, спасибо большое, тема закрыта
|
------- Отправлено: 22:16, 09-08-2010 | #10 |
Участник сейчас на форуме | Участник вне форума | Автор темы | Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
Вставка прогресс бара в функцию | Medic84 | AutoIt | 52 | 07-04-2014 00:19 | |
Использование в ГУИ ВМР файла с альфа каналом | crashtuak | AutoIt | 0 | 08-08-2009 19:16 | |
[решено] Зависимость работы ГУИ от выполнения долгих(по времени) функций | crashtuak | AutoIt | 2 | 30-07-2009 23:24 | |
[решено] [PHP] Прогресс-бар (счетчик игроков) | D_Master | Вебмастеру | 3 | 27-03-2009 18:41 | |
[решено] Прогресс бар | semiono | AutoIt | 17 | 24-03-2009 23:18 |
|