|
Внимание, важное сообщение: Дорогие Друзья!
В ноябре далекого 2001 года мы решили создать сайт и форум, которые смогут помочь как начинающим, так и продвинутым пользователям разобраться в операционных системах. В 2004-2006г наш проект был одним из самых крупных ИТ ресурсов в рунете, на пике нас посещало более 300 000 человек в день! Наша документация по службам Windows и автоматической установке помогла огромному количеству пользователей и сисадминов. Мы с уверенностью можем сказать, что внесли большой вклад в развитие ИТ сообщества рунета. Но... время меняются, приоритеты тоже. И, к сожалению, пришло время сказать До встречи! После долгих дискуссий было принято решение закрыть наш проект. 1 августа форум переводится в режим Только чтение, а в начале сентября мы переведем рубильник в положение Выключен Огромное спасибо за эти 24 года, это было незабываемое приключение. Сказать спасибо и поделиться своей историей можно в данной теме. С уважением, ваш призрачный админ, BigMac... |
|
| Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » AutoIt » [решено] Вписывание прогресс-бара в гуи-форму |
|
|
[решено] Вписывание прогресс-бара в гуи-форму
|
|
Ветеран Сообщения: 904 |
Есть такой скрипт (за основу, помоему, взят скрипт пргресс-бара от 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 |
|
Ветеран Сообщения: 904
|
Профиль | Отправить PM | Цитировать madmasles, схема скрипта такова:
при нажатии на кнопку старт запускается пргресс-бар, затем выполнение функции "Internet". Прогресс-бар работает постоянно пока выполняется работа функции "Internet". После того, как функция выполнена, прогресс замирает и после закрытия месседж-бокса с результатом, обнуляется. Не совсем понимаю, как "втиснуть" в ваш скрипт выполнение функции "Internet" |
|
Последний раз редактировалось saavaage, 09-08-2010 в 16:36. Отправлено: 16:04, 09-08-2010 | #3 |
|
Ветеран Сообщения: 904
|
Профиль | Отправить 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 |
|
Ветеран Сообщения: 904
|
Профиль | Отправить 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 |
|
Ветеран Сообщения: 904
|
Профиль | Отправить 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 |
|
Ветеран Сообщения: 904
|
Профиль | Отправить 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 | |
|