Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » AutoIt » [решено] Вписывание прогресс-бара в гуи-форму

Ответить
Настройки темы
[решено] Вписывание прогресс-бара в гуи-форму

Ветеран


Сообщения: 903
Благодарности: 161


Конфигурация

Профиль | Отправить 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()
а именно, разместить его вместо $progressbar

PS прогресс-бар выполняет простую функцию сигнализирования о том, что задача проверки выполняется.

Отправлено: 14:37, 09-08-2010

 

Аватара для madmasles

Ветеран


Сообщения: 812
Благодарности: 353

Профиль | Отправить 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
Благодарности: 161

Профиль | Отправить PM | Цитировать


madmasles, схема скрипта такова:
при нажатии на кнопку старт запускается пргресс-бар, затем выполнение функции "Internet". Прогресс-бар работает постоянно пока выполняется работа функции "Internet". После того, как функция выполнена, прогресс замирает и после закрытия месседж-бокса с результатом, обнуляется.
Не совсем понимаю, как "втиснуть" в ваш скрипт выполнение функции "Internet"

Последний раз редактировалось saavaage, 09-08-2010 в 16:36.


Отправлено: 16:04, 09-08-2010 | #3


Ветеран


Сообщения: 903
Благодарности: 161

Профиль | Отправить 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


Аватара для madmasles

Ветеран


Сообщения: 812
Благодарности: 353

Профиль | Отправить PM | Цитировать


saavaage,
Попробуйте так:
читать дальше »
Код: Выделить весь код
#include <GUIConstantsEx.au3>
#include <GIFAnimation.au3>
#include <IE.au3>
#include <StaticConstants.au3>
#include <GuiMenu.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)
$hMenu = _GUICtrlMenu_GetSystemMenu($Form1)
GUISetState(@SW_SHOW)

While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
        Case $GUI_EVENT_CLOSE
            Exit
        Case $Button1
            _GUICtrlMenu_EnableMenuItem($hMenu, $SC_CLOSE, 2)
            GUICtrlSetState($Button1, $GUI_DISABLE)
            GUICtrlSetData($Label1, "")
            _GIF_ResumeAnimation($pGIF)
            _SpeedInternet()
            _GIF_PauseAnimation($pGIF)
            GUICtrlSetData($Label1, "Ваша скорость: " & $sResume)
            GUICtrlSetState($Button1, $GUI_ENABLE)
            _GUICtrlMenu_EnableMenuItem($hMenu, $SC_CLOSE, 0)
    EndSwitch
WEnd

Func _SpeedInternet()
    Local $sPattern = '(?s).*?= (.*?)\r\n?.*', $sText
    Local $oIE = _IECreate("http://www.spbtlg.ru/index.html", 0, 0)
    If Not IsObj($oIE) Then Return $sResume
    If _IENavigate($oIE, "http://www.spbtlg.ru/stb.php") <> -1 Then
        _IEQuit($oIE)
        Return $sResume
    EndIf
    $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

GIFAnimation.au3
Это сообщение посчитали полезным следующие участники:

Отправлено: 17:34, 09-08-2010 | #5


Ветеран


Сообщения: 903
Благодарности: 161

Профиль | Отправить PM | Цитировать


madmasles, прекрасно! Использую Ваше решение.
Но, на всякий случай, просмотрите мое решение - мне важно знать свои ошибки (я только начал изучать).

-------
мы рождены, чтоб сказку сделать былью


Отправлено: 18:16, 09-08-2010 | #6


Аватара для madmasles

Ветеран


Сообщения: 812
Благодарности: 353

Профиль | Отправить PM | Цитировать


saavaage,

1. В Вашем коде кнопку $Button1, после нажатия, надо сделать неактивной, а после отработки функции Internet() - активной, чтобы нельзя было нажать на нее во время работы функции.
2. Конструкция
Код: Выделить весь код
While 1
    Call("_SpeedInternet")
    ExitLoop
WEnd
Лучше, чем в моем скрипте, если ее использовать в моем, то можно убрать эти строки:
Код: Выделить весь код
#include <GuiMenu.au3>
...
$hMenu = _GUICtrlMenu_GetSystemMenu($Form1)
...
_GUICtrlMenu_EnableMenuItem($hMenu, $SC_CLOSE, 2)
...
_GUICtrlMenu_EnableMenuItem($hMenu, $SC_CLOSE, 0)
3. Функция и так работает:
Код: Выделить весь код
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
4. Все вышеизложенное - мое субъективное мнение.

Отправлено: 19:30, 09-08-2010 | #7


Ветеран


Сообщения: 903
Благодарности: 161

Профиль | Отправить 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


Аватара для madmasles

Ветеран


Сообщения: 812
Благодарности: 353

Профиль | Отправить PM | Цитировать


saavaage,
Мой такой будет:
читать дальше »
Код: Выделить весь код
#include <GUIConstantsEx.au3>
#include <GIFAnimation.au3>
#include <IE.au3>
#include <StaticConstants.au3>

Global $sResume, $pGIF, _
        $sFileGIF = @WindowsDir & "\pchealth\helpctr\System\images\progbar.gif", _
        $Form1, $Label1, $hGIF, $Button1, $nMsg, $hMenu

$Form1 = GUICreate("Проверка скорости.", 250, 90, -1, -1)
$Label1 = GUICtrlCreateLabel('Проверка скорости интернета.', 10, 10, 230, 20, $SS_CENTER)
$Button1 = GUICtrlCreateButton("Проверить", 85, 50, 80, 30)
GUISetState(@SW_SHOW)

While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
        Case $GUI_EVENT_CLOSE
            Exit
        Case $Button1
            $hGIF = _GUICtrlCreateGIF($sFileGIF, "", 50, 30, $pGIF)
            GUICtrlSetState($Button1, $GUI_DISABLE)
            GUICtrlSetData($Label1, "Подождите, идет проверка.")
            Call("_SpeedInternet")
            _GIF_DeleteGIF($pGIF)
            GUICtrlSetData($Label1, $sResume)
            GUICtrlSetState($Button1, $GUI_ENABLE)
    EndSwitch
WEnd

Func _SpeedInternet()
    $sResume = 'Произошла ошибка.'
    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
Это сообщение посчитали полезным следующие участники:

Отправлено: 22:04, 09-08-2010 | #9


Ветеран


Сообщения: 903
Благодарности: 161

Профиль | Отправить PM | Цитировать


madmasles, спасибо большое, тема закрыта

-------
мы рождены, чтоб сказку сделать былью


Отправлено: 22:16, 09-08-2010 | #10



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » AutoIt » [решено] Вписывание прогресс-бара в гуи-форму

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Вставка прогресс бара в функцию 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




 
Переход