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

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

Ответить
Настройки темы
[решено] Прогресс бар

Аватара для semiono

Ветеран


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

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


Изменения
Автор: semiono
Дата: 15-02-2009
Мне нужен прогресс бар чтоб запустить в начале кода, и к завершению чтоб он был 100% типо как заставка
Я вставил в начало
ProgressOn()
далее код проги идёт
и в конце
Progressff()

Но он просто висит без всякого прогресса! В ProgressSet тоже ничего путного не найду. Sleep() тут как бы не уместен.
Потомучто нужен результат хода работы скрипта, а не виртуальное засыпание...
?
---------
Я пока хитро зделал так как скрипт работает быстро создаётся ощущение что готово... 100%
Код: Выделить весь код
ProgressOn("Running...","","")
ProgressSet(100)

BlockInput(1)
....

BlockInput(0)

WinClose("MyWin") ; это на всякий случай лучше иметь за пределами BlockInput(1)

ProgressOff()

-------
Полезное сообщение


Отправлено: 05:22, 14-02-2009

 

Аватара для Creat0R

Must AutoIt


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

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


Цитата semiono:
Надо чтобы функция рисовала прогресс от слова ProgressOn до слоава ProgressOff »
Так а в чём проблема?

Цитата semiono:
Это только в lowlevel code language надо всё вручную собирать »
Это откуда такая информация?

-------
“Сделай так просто, как возможно, но не проще этого.”... “Ты никогда не решишь проблему, если будешь думать так же, как те, кто её создал.”

Альберт Эйнштейн

P.S «Не оказываю техподдержку через ПМ/ICQ, и по email - для этого есть форум. ©»

http://creator-lab.ucoz.ru/Images/Icons/autoit_icon.png Русское сообщество AutoIt | http://creator-lab.ucoz.ru/Images/Ic...eator_icon.png CreatoR's Lab | http://creator-lab.ucoz.ru/Images/Icons/oac_icon.png Opera AC Community


Отправлено: 00:33, 16-02-2009 | #11



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Аватара для semiono

Ветеран


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

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


Цитата Creat0R:
Это откуда такая информация? »
Ну под win32 тоже не надо, там макросы рулят почти что как в си
invoke MessageBoxA, 0 ,_message,_caption, MB_ICONQUESTION + MB_YESNO
однако оффтопик...
для сравнения MsgBox(0, "AutoIt", "OK. Bye!") - почти как асм

PS однако если извращатся, то можно
xor eax, eax
push eax
push eax
...
call... одним словом lowlevel

-------
Полезное сообщение


Отправлено: 12:31, 16-02-2009 | #12


Новый участник


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

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


Подниму тему, так как столкнулся с такой же проблемой как и топик стартера.
Опишу подробно мою ситуацию. Имеется скрипт, который запускает и устанавливает 10 различных программ. Хочется при помощи функции Progress отображать ход развития установки.
На данный момент применяю такой вариант:
Код: Выделить весь код
...
ProgressSet (10)
Run("Prog2.exe")
WinWait("Prog2",'"')
ContolClick...
...
ProgressSet (20)
Run("Prog3.exe")
...
Но из-за разного времени выполнения программ прогрессбар движется неравномерно. А хотелось бы получить плавное движение. Как вариант, даже без привязки в процентном отношении к ходу выполнения скрипта. Типа, как индикатор работы

Отправлено: 00:23, 24-03-2009 | #13


Аватара для Creat0R

Must AutoIt


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

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


Цитата mr.Zorg:
как индикатор работы »
Можно так:

Код: Выделить весь код
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
;

Global $aProgress_Ctrls[10]
Global $hCallBack, $ahTimer
Global $iProgress_InitSet

_Progress_Initialize()

Sleep(1500)

_Progress_Set(5)

Sleep(2500)

_Progress_Set(25)

Sleep(2500)

_Progress_Set(55)

Sleep(2500)

_Progress_Set(85)

Sleep(2500)

_Progress_Set(100, "Main Progress: ", "Working Progress", "Done!", 100)

Sleep(2500)

_Progress_ShutDown()

Func _Progress_Initialize($sMain_Data="Please wait...", $sMainPrgrs_Data="Main Progress: 0%", $sCrntPrgs_Data="Working Progress")
    $aProgress_Ctrls[1] = GUICreate("Installation Progress", 300, 150, -1, -1, -1, $WS_EX_TOOLWINDOW)

    $aProgress_Ctrls[2] = GUICtrlCreateLabel($sMain_Data, 20, 10, 260, 30)
    GUICtrlSetFont(-1, 10, 800)

    $aProgress_Ctrls[3] = GUICtrlCreateLabel($sCrntPrgs_Data, 20, 50, 260, 20)
    $aProgress_Ctrls[4] = GUICtrlCreateProgress(20, 65, 260, 17)

    $aProgress_Ctrls[5] = GUICtrlCreateLabel($sMainPrgrs_Data, 20, 100, 260, 20)
    $aProgress_Ctrls[6] = GUICtrlCreateProgress(20, 115, 260, 20)

    GUISetState(@SW_SHOW, $aProgress_Ctrls[1])
EndFunc

Func _Progress_Set($iMPrgrs, $sMPrgrs_Data="Main Progress: ", $sCrntPrgs_Data="Working Progress", $sMain_Data="", $iCrntPrgrs=-1)
    GUICtrlSetData($aProgress_Ctrls[6], $iMPrgrs)

    If $hCallBack = 0 Then
        $hCallBack = DllCallbackRegister("_Callback_ProgressSet_Proc", "int", "hwnd;int;int;dword")
        $ahTimer = DllCall("User32.dll", "int", "SetTimer", _
            "hwnd", 0, "int", TimerInit(), "int", 50, "ptr", DllCallbackGetPtr($hCallBack))
    EndIf

    If $iCrntPrgrs > 0 Then
        If $hCallBack > 0 Then DllCallBackFree($hCallBack)
        DllCall("user32.dll", "int", "KillTimer", "hwnd", 0, "int", $ahTimer[0])

        $hCallBack = 0
        $ahTimer = 0

        GUICtrlSetData($aProgress_Ctrls[4], $iCrntPrgrs)
    EndIf

    GUICtrlSetData($aProgress_Ctrls[3], $sCrntPrgs_Data)
    GUICtrlSetData($aProgress_Ctrls[5], $sMPrgrs_Data & $iMPrgrs & "%")

    If $sMain_Data <> "" Then GUICtrlSetData($aProgress_Ctrls[2], $sMain_Data)
EndFunc

Func _Progress_ShutDown()
    If $hCallBack > 0 Then DllCallBackFree($hCallBack)
    If IsArray($ahTimer) Then DllCall("user32.dll", "int", "KillTimer", "hwnd", 0, "int", $ahTimer[0])

    $hCallBack = 0
    $ahTimer = 0

    GUIDelete($aProgress_Ctrls[1])
EndFunc

Func _Callback_ProgressSet_Proc($hWnd, $iIDEvent, $iElapse, $pTimerFunc)
    $iProgress_InitSet += 5
    If $iProgress_InitSet > 100 Then $iProgress_InitSet = 0

    GUICtrlSetData($aProgress_Ctrls[4], $iProgress_InitSet)
EndFunc
Вместо пауз, естественно нужно использовать запуск приложении и прочую обработку.

-------
“Сделай так просто, как возможно, но не проще этого.”... “Ты никогда не решишь проблему, если будешь думать так же, как те, кто её создал.”

Альберт Эйнштейн

P.S «Не оказываю техподдержку через ПМ/ICQ, и по email - для этого есть форум. ©»

http://creator-lab.ucoz.ru/Images/Icons/autoit_icon.png Русское сообщество AutoIt | http://creator-lab.ucoz.ru/Images/Ic...eator_icon.png CreatoR's Lab | http://creator-lab.ucoz.ru/Images/Icons/oac_icon.png Opera AC Community

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

Отправлено: 01:28, 24-03-2009 | #14


Новый участник


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

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


Уууу... Это выше моего понимания
Попрошу совсем убрать Main Progress. А Working Progress пусть бегает тут
Код: Выделить весь код
_Progress_Initialize()
_Progress_Set(0)
Sleep(5000)
_progress_ShutDown()

Отправлено: 02:05, 24-03-2009 | #15


Аватара для Creat0R

Must AutoIt


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

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


Цитата mr.Zorg:
Попрошу совсем убрать Main Progress »
Тогда такая "каша" не нужна, можно и проще:

Код: Выделить весь код
Global $hCallBack = 0, $ahTimer = 0
Global $iProgress_InitSet = 0
Global $sProgress_Title = "Installation Progress"
Global $sProgress_SubText = "Working Progress: %i%%"
Global $sProgress_MainText = "Please wait..."

_Progress_Initialize()

Sleep(5000)

_Progress_ShutDown()

Func _Progress_Initialize()
    ;Если callback-функция уже запущена (см. комменты далее), нет смысла продолжать далее (Return = выход из функции).
    If $hCallBack <> 0 Then Return

    ;Включаем диалог прогресса
    ProgressOn($sProgress_Title, $sProgress_MainText, $sProgress_SubText, -1, -1, 16)

    ;Регистрируем callback-функцию для запуска по таймеру
    $hCallBack = DllCallbackRegister("_Callback_ProgressSet_Proc", "int", "hwnd;int;int;dword")

    ;Запускаем таймер - каждые 50 мс будет вызываться ранее зарегистрированная функция (_Callback_ProgressSet_Proc)
    $ahTimer = DllCall("User32.dll", "int", "SetTimer", _
            "hwnd", 0, "int", TimerInit(), "int", 50, "ptr", DllCallbackGetPtr($hCallBack))
EndFunc

Func _Progress_ShutDown()
    ;Если callback-функция запущена, высвобождаем её (останавливаем её выполнение)
    If $hCallBack > 0 Then DllCallbackFree($hCallBack)
    If IsArray($ahTimer) Then DllCall("user32.dll", "int", "KillTimer", "hwnd", 0, "int", $ahTimer[0])

    ;Выключаем диалог прогресса
    ProgressOff()

    ;Обнуляем переменные callback-функции
    $hCallBack = 0
    $ahTimer = 0
EndFunc

;Это и есть callback-функция
Func _Callback_ProgressSet_Proc($hWnd, $iIDEvent, $iElapse, $pTimerFunc)
    ;Прибавляем 2 к главному счётчику (для прогресса)
    $iProgress_InitSet += 2

    ;Если счётчик перевалил за 100, обнуляем его, чтобы прогрес работал с начала.
    If $iProgress_InitSet > 100 Then $iProgress_InitSet = 0

    ;Задаём текузий прогресс
    ProgressSet($iProgress_InitSet, StringFormat($sProgress_SubText, $iProgress_InitSet))
EndFunc

-------
“Сделай так просто, как возможно, но не проще этого.”... “Ты никогда не решишь проблему, если будешь думать так же, как те, кто её создал.”

Альберт Эйнштейн

P.S «Не оказываю техподдержку через ПМ/ICQ, и по email - для этого есть форум. ©»

http://creator-lab.ucoz.ru/Images/Icons/autoit_icon.png Русское сообщество AutoIt | http://creator-lab.ucoz.ru/Images/Ic...eator_icon.png CreatoR's Lab | http://creator-lab.ucoz.ru/Images/Icons/oac_icon.png Opera AC Community


Последний раз редактировалось Creat0R, 24-03-2009 в 23:17. Причина: Добавление комментариев

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

Отправлено: 10:34, 24-03-2009 | #16


Новый участник


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

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


Премного благодарен
Подогнал под свой скрипт. Всё работает
Еще хотелось бы понять принцип работы данного скрипта. С DllCall до селе дела не имел. Если вас не затруднит, опишите построчно "человеческим языком" функции _Progress_Initialize и _Callback_ProgressSet_Proc

Отправлено: 21:15, 24-03-2009 | #17


Аватара для Creat0R

Must AutoIt


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

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


Цитата mr.Zorg:
опишите построчно "человеческим языком" функции _Progress_Initialize и _Callback_ProgressSet_Proc »
Добавил комментарии в свой скрипт выше.

Цитата mr.Zorg:
Премного благодарен »
Благодарности можно выражать нажатием на ссылку «Полезное сообщение» под тем самым сообщением за которое хочется выразить благодарность

-------
“Сделай так просто, как возможно, но не проще этого.”... “Ты никогда не решишь проблему, если будешь думать так же, как те, кто её создал.”

Альберт Эйнштейн

P.S «Не оказываю техподдержку через ПМ/ICQ, и по email - для этого есть форум. ©»

http://creator-lab.ucoz.ru/Images/Icons/autoit_icon.png Русское сообщество AutoIt | http://creator-lab.ucoz.ru/Images/Ic...eator_icon.png CreatoR's Lab | http://creator-lab.ucoz.ru/Images/Icons/oac_icon.png Opera AC Community


Отправлено: 23:18, 24-03-2009 | #18



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

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

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Вставка прогресс бара в функцию Medic84 AutoIt 52 07-04-2014 00:19
Интернет - [addon] Яндекс.Бар - панель инструментов для Internet-браузера anddy Наборы обновлений для Windows XP/2003/Windows 7 3 27-07-2011 14:47
[решено] Верхний бар HP Pavilion 2040 benwar Ноутбуки 2 08-01-2010 01:09
[решено] [PHP] Прогресс-бар (счетчик игроков) D_Master Вебмастеру 3 27-03-2009 18:41




 
Переход