1

Тема: AHK: Progress Bar

Number := 10
Gui, Font, s15
Gui, Add, Text, vText1, 111111111
GuiControl,,Text1, 10
Gui, Add, Progress, vProgress1 w500 h100 -Smooth Range0-500
Gui, Show

SetTimer, Progress2, 1000
ProgressBar("Progress1", Number, 500)
return

Progress2:
Number -= 1
GuiControl,, Text1,% Number
Return

ProgressBar(sBar, tTime, iRange)
{
	tTime := (tTime * 100)
	iSpeed := iRange / tTime
	iWay := 0
	;WriteDebug(1, "Start")
	While(1)
	{
		Sleep 1
		GuiControl,, %sBar%,% iWay
		iWay += iSpeed
		If(iWay > iRange)
			break
	}
	;WriteDebug(1, "End")

}

Погрешность в 5 секунд. Помогите исправить.

2

Re: AHK: Progress Bar

Смежный вопрос. Существует ли сценарий, который добавляет к курсору маленький прогресс-бар для отображения необходимой длительности удержания ПКМ, как это реализовано в TotalCommander?
Иными словами, добавить к действию на удержание ПКМ на полторы секунды маленький прогресс-бар рядом с курсором.

3

Re: AHK: Progress Bar

becauseim
Чаще встречаешь тех, кто хочет от него избавиться. Впрочем, это опциональная вещь.

4

Re: AHK: Progress Bar

Здрасьте, команды то не мгновенно исполняются.
Используйте A_TimeIdle, на старте функции записывайте ее значение, а в цикле вычисляйте разницу.

5

Re: AHK: Progress Bar

stealzy
При таких числах нет проблем.

6 (изменено: svoboden, 2017-02-03 14:09:21)

Re: AHK: Progress Bar

Еще, чтобы в минус не ушел отсчет, можно так:

Number := 10
Gui, Font, s15
Gui, Add, Text, vText1, 111111111
GuiControl,,Text1, 10
Gui, Add, Progress, vProgress1 w500 h50 -Smooth Range0-500
Gui, Show

SetTimer, Progress2, 1000
ProgressBar("Progress1", Number, 1000)
return

Progress2:
Number -= 1
qw := Number > 0 ? Number : 0
GuiControl,, Text1, %qw%
Return

ProgressBar(sBar, tTime, iRange)
{
	tTime := (tTime * 130)
	iSpeed := iRange / tTime
	iWay := 0 ; WriteDebug(1, "Start")
	While(1)
	{
		Sleep 1
		GuiControl,, %sBar%,% iWay
		iWay += iSpeed
		If(iWay > iRange)
			break
        ; WriteDebug(1, "End")

	}
	
}

7

Re: AHK: Progress Bar

Flasher пишет:

Чаще встречаешь тех, кто хочет от него избавиться.

В ТС для меня он действительно ни к чему. Впрочем, как и сам вызов контекстного меню при удержании ПКМ. А в других случаях было бы интересно иметь миниатюрный прогресс-бар, привязанный к удержанию.

8 (изменено: teadrinker, 2016-12-23 15:04:35)

Re: AHK: Progress Bar

becauseim

period := 400
w := 50, h := 7
CreateProgress(w, h)
TimeoutAction := Func("TimeoutAction")
Return

RButton:: ShowProgress(period, TimeoutAction,  w)
Esc:: ExitApp
   
ShowProgress(time, TimeoutAction, w := "")  {
   static start, timer
   (!start && start := A_TickCount)
   if !timer  {
      CoordMode, Mouse
      MouseGetPos, X, Y
      GuiControl,, Progress, 0
      Gui, Show, % "NA x" X - w//2 " y" y + 15
      timer := Func(A_ThisFunc).Bind(time, TimeoutAction)
      SetTimer, % timer, 10
   }
   pos := Round((A_TickCount - start)/time*100)
   (pos > 100 && pos := 100)
   GuiControl,, Progress, % pos
   if (pos = 100)  || !GetKeyState("RButton", "P")  {
      SetTimer,, Delete
      start := timer := ""
      Gui, Show, Hide
      (pos = 100 && TimeoutAction.Call())
   }
}

CreateProgress(w, h)  {
   global Progress
   Gui, +ToolWindow -Caption +AlwaysOnTop
   Gui, Add, Progress, x0 y0 w%w% h%h% vProgress
   Gui, Show, Hide w%w% h%h%
}

TimeoutAction()  {
   MsgBox, Действие`, если время вышло
}
Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder