Что нового

[Элементы GUI] Как отобразить прогресс, включения (загрузки) программы?

ivsatel

Продвинутый
Сообщения
319
Репутация
84
Здравствуйте.
Использую AutoIt: v.3.3.8.1
Программа при включение довольно не быстро определяет переменные, коих накопилось множество.
Примерно 10-ть секций, до момента отображения главного окна.
Хочу реализовать визуализацию её включения/загрузки примерно так (Если это возможно) :

Код:
#include <GUIConstants.au3>

GUICreate("Загрузка", 175, 290, -1, -1)
$progress = GUICtrlCreateProgress (5,2,165,245, 4)
GUISetState ()

While 1
; Тут цикл, который читает метки из последующего кода и преобразует их в проценты прогресса
WEnd

;Секция 1
:::::::::::::::::::::::
;Секция 1

$Метка1 = 10

;Секция 2
:::::::::::::::::::::::
;Секция 2

$Метка2 = 20

;Секция 3
:::::::::::::::::::::::
;Секция 3

$Метка3 = 30

;Секция 4
:::::::::::::::::::::::
;Секция 4

$Метка4 = 40

; И так далее до 100
; Далее
GUIDelete("Загрузка")

Global $hGui = GUICreate("Основное окно", 175, 290, -1, -1)

Подскажите, такая реализация возможна? Или может есть другой вариант. Если возможно, то можно пример?


Добавлено:
Сообщение автоматически объединено:

Проблема в том, что не пойму какова вида должны быть метки, расставленные в секциях переменных. И как их привязать к прогрессу.
 

FullZero

Новичок
Сообщения
8
Репутация
0
Присоединяюсь, тоже ищу что то подобное. Мой скрипт не работает, прогресс выводится сразу на 100% после окончания цикла, надо найти другой вариант :stars:

Код:
Global  $Percent, $Progress1
Global  $Load=1

While 1
	Sleep(100)
	If $Load Then _Progress()
WEnd

Func _Progress()
	RegRead ( "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced", "TaskbarSmallIcons" )
	$Percent += 1
	Sleep(1000)
	RegRead ( "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced", "TaskbarSmallIcons" )
	$Percent += 1
	Sleep(1000)
	$Progress = ($Percent *100 ) / 2				; Процент = (новое количество * 100) / на общее количество
	GUICtrlSetData($Progress1, $Progress)				; Прогресс бар
	;MsgBox (4096, "Ыыыыыы!!!", "Бла бла бла!!!")			; Сообщение
	Exit								; Выход
EndFunc
 

winstan

Эксплотатор)
Сообщения
406
Репутация
79
FullZero
тебе в скрипте нада сделать чаще измпнение состояния прогресса. В часности нужно добавить изменение после загрузки первой секции перед слипом
 

joiner

Модератор
Локальный модератор
Сообщения
3,556
Репутация
628
ivsatel
можно проще? чего ты хочешь добиться? прогресса ожидания появления окна программы? ну так одновременно не получится..можно так, что один процесс отслеживает появления окна основной программы. и гаснет при его появлении. некоторые программы не используют прогресса , объективно отражающего происходящий действий. просто бегущая строка.
если так, то не думал, почему так долго запускается твоя программа?
я правильно понял тебя?
 

inververs

AutoIT Гуру
Сообщения
2,135
Репутация
465
ivsatel
Сделай так:
Зарегистрируй AdlibRegister в начале инициализации переменных.
Функция будет вызываться через заданный промежуток и брать глобальную переменную с процентами для прогресс бара
В промежутках между секциями обновляй эту глобальную пемеренную.
 
Автор
I

ivsatel

Продвинутый
Сообщения
319
Репутация
84
joiner сказал(а):
можно проще? чего ты хочешь добиться? прогресса ожидания появления окна программы?
Нет. Метки расставить в секциях переменных и считывать их по мере загрузки программы. Соответственно отображая все это в прогрессе.
joiner сказал(а):
ну так одновременно не получится..можно так, что один процесс отслеживает появления окна основной программы. и гаснет при его появлении. некоторые программы не используют прогресса , объективно отражающего происходящий действий. просто бегущая строка.
Но эта фишка успешно работает с
Код:
ProgressOn

Там метки расставлены между строк переменных и успешно считываются походу инициализации переменных.
А вот как перекинуть все это в GUI ?
joiner сказал(а):
если так, то не думал, почему так долго запускается твоя программа?
я правильно понял тебя?
Да, я знаю почему так долго грузится моя программа, и это при 8МБ/с интернет скорости. Я представляю как долго определяются переменные при более медленном интернете.

inververs сказал(а):
Сделай так:
Зарегистрируй AdlibRegister в начале инициализации переменных.
Функция будет вызываться через заданный промежуток и брать глобальную переменную с процентами для прогресс бара
В промежутках между секциями обновляй эту глобальную переменную.
А можно пример. Просто я представляю данную реализацию, а как реализовать не понимаю.
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
ivsatel [?]
не пойму какова вида должны быть метки, расставленные в секциях переменных. И как их привязать к прогрессу.
:blink:

Код:
#include <GUIConstantsEx.au3>

$hProgress = GUICreate("Загрузка", 200, 100)
$iProgress = GUICtrlCreateProgress(5, 5, 190, 90)
GUISetState()

;Секция 1
Sleep(1000)

GUICtrlSetData($iProgress, 10)

;Секция 2
Sleep(1000)

GUICtrlSetData($iProgress, 20)

;Секция 3
Sleep(1000)

GUICtrlSetData($iProgress, 30)

;Секция 4
Sleep(1000)

GUICtrlSetData($iProgress, 40)

;Секция 5
Sleep(1000)

GUICtrlSetData($iProgress, 50)

;Секция 6
Sleep(1000)

GUICtrlSetData($iProgress, 60)

;Секция 7
Sleep(1000)

GUICtrlSetData($iProgress, 70)

;Секция 8
Sleep(1000)

GUICtrlSetData($iProgress, 80)

;Секция 9
Sleep(1000)

GUICtrlSetData($iProgress, 90)

;Секция 10
Sleep(1000)

GUICtrlSetData($iProgress, 100)


GUIDelete($hProgress)

$hGUI = GUICreate("Основное окно", 175, 290, -1, -1)
GUISetState()
Sleep(2000)


Sleep'ы естественно только для демонстрации.
 
Верх