|
Внимание, важное сообщение: Дорогие Друзья!
В ноябре далекого 2001 года мы решили создать сайт и форум, которые смогут помочь как начинающим, так и продвинутым пользователям разобраться в операционных системах. В 2004-2006г наш проект был одним из самых крупных ИТ ресурсов в рунете, на пике нас посещало более 300 000 человек в день! Наша документация по службам Windows и автоматической установке помогла огромному количеству пользователей и сисадминов. Мы с уверенностью можем сказать, что внесли большой вклад в развитие ИТ сообщества рунета. Но... время меняются, приоритеты тоже. И, к сожалению, пришло время сказать До встречи! После долгих дискуссий было принято решение закрыть наш проект. 1 августа форум переводится в режим Только чтение, а в начале сентября мы переведем рубильник в положение Выключен Огромное спасибо за эти 24 года, это было незабываемое приключение. Сказать спасибо и поделиться своей историей можно в данной теме. С уважением, ваш призрачный админ, BigMac... |
|
| Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » AutoIt » [решено] Прогресс бар |
|
|
[решено] Прогресс бар
|
|
Ветеран Сообщения: 842 |
Мне нужен прогресс бар чтоб запустить в начале кода, и к завершению чтоб он был 100% типо как заставка
Я вставил в начало ProgressOn() далее код проги идёт и в конце Progressff() Но он просто висит без всякого прогресса! В ProgressSet тоже ничего путного не найду. Sleep() тут как бы не уместен. Потомучто нужен результат хода работы скрипта, а не виртуальное засыпание... ? --------- Я пока хитро зделал так как скрипт работает быстро создаётся ощущение что готово... 100% |
|
|
------- Отправлено: 05:22, 14-02-2009 |
|
Must AutoIt Сообщения: 3054
|
Профиль | Сайт | Отправить PM | Цитировать |
|
------- Отправлено: 00:33, 16-02-2009 | #11 |
|
Ветеран Сообщения: 842
|
Профиль | Отправить 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 | |
|