|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » AutoIt » [решено] Прогресс бар |
|
[решено] Прогресс бар
|
Ветеран Сообщения: 830 |
Профиль | Отправить PM | Цитировать
Мне нужен прогресс бар чтоб запустить в начале кода, и к завершению чтоб он был 100% типо как заставка
Я вставил в начало ProgressOn() далее код проги идёт и в конце Progressff() Но он просто висит без всякого прогресса! В ProgressSet тоже ничего путного не найду. Sleep() тут как бы не уместен. Потомучто нужен результат хода работы скрипта, а не виртуальное засыпание... ? --------- Я пока хитро зделал так как скрипт работает быстро создаётся ощущение что готово... 100% |
|
------- Отправлено: 05:22, 14-02-2009 |
Must AutoIt Сообщения: 3054
|
Профиль | Сайт | Отправить PM | Цитировать |
------- Отправлено: 00:33, 16-02-2009 | #11 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Ветеран Сообщения: 830
|
Профиль | Отправить PM | Цитировать Цитата Creat0R:
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
|
Профиль | Отправить PM | Цитировать Подниму тему, так как столкнулся с такой же проблемой как и топик стартера.
Опишу подробно мою ситуацию. Имеется скрипт, который запускает и устанавливает 10 различных программ. Хочется при помощи функции Progress отображать ход развития установки. На данный момент применяю такой вариант: Но из-за разного времени выполнения программ прогрессбар движется неравномерно. А хотелось бы получить плавное движение. Как вариант, даже без привязки в процентном отношении к ходу выполнения скрипта. Типа, как индикатор работы |
Отправлено: 00:23, 24-03-2009 | #13 |
Must AutoIt Сообщения: 3054
|
Профиль | Сайт | Отправить 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 |
|
------- Отправлено: 01:28, 24-03-2009 | #14 |
Новый участник Сообщения: 10
|
Профиль | Отправить PM | Цитировать |
Отправлено: 02:05, 24-03-2009 | #15 |
Must AutoIt Сообщения: 3054
|
Профиль | Сайт | Отправить PM | Цитировать Цитата mr.Zorg:
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 |
|
------- Последний раз редактировалось Creat0R, 24-03-2009 в 23:17. Причина: Добавление комментариев Отправлено: 10:34, 24-03-2009 | #16 |
Новый участник Сообщения: 10
|
Профиль | Отправить PM | Цитировать Премного благодарен
Подогнал под свой скрипт. Всё работает Еще хотелось бы понять принцип работы данного скрипта. С DllCall до селе дела не имел. Если вас не затруднит, опишите построчно "человеческим языком" функции _Progress_Initialize и _Callback_ProgressSet_Proc |
Отправлено: 21:15, 24-03-2009 | #17 |
Must AutoIt Сообщения: 3054
|
Профиль | Сайт | Отправить PM | Цитировать Цитата mr.Zorg:
Цитата mr.Zorg:
|
||
------- Отправлено: 23:18, 24-03-2009 | #18 |
Участник сейчас на форуме | Участник вне форума | Автор темы | Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
Вставка прогресс бара в функцию | 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 |
|