Работа с временем+прогрессбар в GUI

Ответить
Аватара пользователя
-TRM-

Работа с временем+прогрессбар в GUI

Сообщение -TRM- »

Здравствуйте !

Есть скриптик установки программ :


Цитата:



Global $StartTicksNET,$StartTicksNETObshee,$EndTicksNET,$StartTicksNET,$EndTicksNETObshee,$Hour, $Min, $Sec,$Mins,$Secs,$Time,$ProgressBARTime,$HourObshee, $MinsObshee, $SecsObshee

Global $TimeObshee,$ProgressBARTimeObshee,$Label1,$Label2

#include

#include

#include

#include

#include



$Form1 = GUICreate("Form1", 633, 134, 192, 124)

$Progress1 = GUICtrlCreateProgress(8, 32, 614, 17)

$Progress2 = GUICtrlCreateProgress(8, 88, 614, 17)

$Label1 = GUICtrlCreateLabel("", 8, 8, 620, 17, $SS_CENTER)

$Label2 = GUICtrlCreateLabel("", 8, 64, 612, 17, $SS_CENTER)

GUISetState(@SW_SHOW)



AdlibRegister("Timer", 50)

AdlibRegister("Timer_Obshee", 50)

AdlibRegister("TimerReal", 50)



While 1

$nMsg = GUIGetMsg()

Switch $nMsg

Case $GUI_EVENT_CLOSE

ExitLoop



EndSwitch

WEnd





Func Timer()

_TicksToTime($EndTicksNET-$StartTicksNET, $Hour, $Mins, $Secs)

Local $sTime = $Time ; save current time to be able to test and avoid flicker..

$Time = StringFormat("%02i мин. %02i сек.", $Mins, $Secs)

If $sTime $Time Then

GUICtrlSetData ($Label1,"Время текущей установки : " & $Time)

GUICtrlSetData ($Progress1,100-(((($Mins*60)+$Secs)*100)/$ProgressBARTime))

EndIf

EndFunc ;==>Timer



Func Timer_Obshee()

_TicksToTime($EndTicksNETObshee-$StartTicksNETObshee, $HourObshee, $MinsObshee, $SecsObshee)

Local $sTime = $TimeObshee ; save current time to be able to test and avoid flicker..

$TimeObshee = StringFormat("%02i мин. %02i сек.", $MinsObshee, $SecsObshee)

If $sTime $TimeObshee Then

GUICtrlSetData ($Label2,"Общее время : " & $TimeObshee)

GUICtrlSetData ($Progress2,100-(((($MinsObshee*60)+$SecsObshee)*100)/$ProgressBARTimeObshee))

EndIf

EndFunc ;==>Timer



Func TimerReal()

$StartTicksNET = _TimeToTicks(@HOUR,@MIN,@SEC)

$StartTicksNETObshee = _TimeToTicks(@HOUR,@MIN,@SEC)

EndFunc



Func _NET_TIME_Prog($timeTekInstall)

$EndTicksNET=$StartTicksNET + $timeTekInstall

_TicksToTime($EndTicksNET-$StartTicksNET, $Hour, $Mins, $Secs)

$ProgressBARTime=($Mins*60)+$Secs

EndFunc



Func _NET_TIME_Obshee($Obshee_Vremya)

$EndTicksNETObshee=$StartTicksNETObshee + $Obshee_Vremya

_TicksToTime($EndTicksNETObshee-$StartTicksNETObshee, $HourObshee, $MinsObshee, $SecsObshee)

$ProgressBARTimeObshee=($MinsObshee*60)+$SecsObshee

EndFunc



Func _SpeedTimeProgram($procent)

For $i = $procent To 100 Step 1

Sleep(10)

GUICtrlSetData ($Progress1,$i)

Next

EndFunc



_NET_TIME_Obshee(65000)

_NET_TIME_Prog(15000)

Sleep(7000)

_SpeedTimeProgram(100-(((($Mins*60)+$Secs)*100)/$ProgressBARTime))

Sleep(3000)



Где _NET_TIME_Obshee(65000)-общее время установки всех программ, _NET_TIME_Prog(15000)-Предполагаемое время установки текущей программы,Sleep(7000)-вместо 15000 установилась за 7000

Первая проблема-немогу заставить работать скрипт-только нужно нажать ЗАКРЫТЬ (убирал While 1...WEnd-все равно не хочет).

Вторая проблема-Нужно чтобы, если время текущей программы равно 15 сек., а устанавливается она за 7 сек, то чтобы ускорялся и шёл до конча (вроде бы сделал-правильно или нет, но работает почти) и одновремменно с такой же скоростью время $Label1 уменьшалось до нулей.

Желательно чтобы от общего времени $Label2 и $Progress2 тоже уменьшался.

Заранее спасибо, надеюсь на Вашу помощь.
Ответить

Вернуться в «AutoIt»