Что нового

[Элементы GUI] Круговой прогресс бар

IMStrelcov

CTPEJIbLLOB
Сообщения
253
Репутация
64
AutoIt: 3.3.14.5
Версия: 0.1

Категория: Вспомогательные функции, GDI+, Элементы GUI

Описание: Круговой прогресс бар с показом процента в стиле метро, можно также анимировать, пример имеется.
- возможности использования смотрите в демке

основные функции
- создать прогресс бар
- удалить прогресс бар
- скрыть прогресс бар (обновить прогресс бар - вновь его покажет)
- удалить все прогресс бары
- обновить прогресс бар
- показать прогресс бар (используйте функцию - обновить прогресс бар)

виды прогресс бара
- круговой стандартный (с или без текста)
- круговой двойной (с или без текста)

Код/Пример:
Код:
#NoTrayIcon
#include <UDF_ProgressCirc.au3>

Global $Time, $Pos, $Rot, $Loop, $LoopPos, $LoopRot
$hGUI = GUICreate('Круговой прогресс бар', 286, 286)
GUISetBkColor(0x0C0C0C)
GUISetState()

$ProgressCirc1 = ProgressCircCreate_($hGUI, 10, 10, 128, 0)
$ProgressCirc2 = ProgressCircCreate_($hGUI, 148, 10, 128, 0)
$ProgressCirc3 = ProgressCircCreate_($hGUI, 10, 148, 128, 1)
$ProgressCirc4 = ProgressCircCreate_($hGUI, 148, 148, 128, 1)

Do
   If TimerDiff($Time) > 20 Then
	  $Pos += 1
	  If $Pos > 100 Then
		 $Pos = 0
	  EndIf
	  $Rot += 1
	  If $Rot > 100 Then
		 $Rot = 0
	  EndIf

	  If $Loop Then
		 $LoopRot += 1.5
		 $LoopPos -= 1
		 If $LoopPos < 0 Then
			$LoopPos = 1
			$Loop = 0
		 EndIf
	  Else
		 $LoopRot += 1
		 $LoopPos += 1
		 If $LoopPos > 100 Then
			$LoopPos = 99
			$Loop = 1
		 EndIf
	  EndIf
	  If $LoopRot > 100 Then
		 $LoopRot = 1
	  EndIf
	  ProgressCircUpdate_($ProgressCirc1, $Pos, $Pos& '%', 0)
	  ProgressCircUpdate_($ProgressCirc3, $Pos, $Pos& '%', 0)
	  ProgressCircUpdate_($ProgressCirc2, $LoopPos, $LoopPos& '%', $LoopRot)
	  ProgressCircUpdate_($ProgressCirc4, $LoopPos, $LoopPos& '%', $LoopRot)
	  $Time = TimerInit()
   EndIf
Until GUIGetMsg() = $GUI_EVENT_CLOSE

ProgressCircDestroyAll_()

Файл: http://autoit-script.ru/index.php?action=downloads;sa=downfile&id=607

Снимок:


История версий:
0.1 - тестовая

Источник: autoit-script.ru
Автор(ы): IMStrelcov
 

joiner

Модератор
Локальный модератор
Сообщения
3,556
Репутация
628
и где всё?
 
Автор
IMStrelcov

IMStrelcov

CTPEJIbLLOB
Сообщения
253
Репутация
64
joiner сказал(а):
исправил ссылку, раздел файловый архив > UDF


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

Хотелось бы выслушать предложения по поводу альтернатив, более оптимизированных и реализации другими способами.


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

Выявил ошибку, исправил, файл перезалил.
 

joiner

Модератор
Локальный модератор
Сообщения
3,556
Репутация
628
добавить описание функций в саму библиотеку
зачем нужна UDF_WinApi ?
изменена только одна функция _GDIPlus_GraphicsDrawArc или все стандартные?
будет конфликт, если у пользователя уже добавлены библиотеки. Напишет already defined
измени имена всех функций, которые совпадают со стандартными и добавь все в одну библиотеку. а также , имена констант. иначе будут ошибки
можно прозрачный фон сделать?
 
Автор
IMStrelcov

IMStrelcov

CTPEJIbLLOB
Сообщения
253
Репутация
64
joiner сказал(а):
добавить описание функций в саму библиотеку
зачем нужна UDF_WinApi ?
изменена только одна функция _GDIPlus_GraphicsDrawArc или все стандартные?
будет конфликт, если у пользователя уже добавлены библиотеки. Напишет already defined
измени имена всех функций, которые совпадают со стандартными и добавь все в одну библиотеку. а также , имена констант. иначе будут ошибки
можно прозрачный фон сделать?
Описание добавить можно.
UDF_WinApi для тех у кого другая версия AutoIt, возможно каких-то стандартных функций не будет хватать, например как _GDIPlus_GraphicsDrawArc.
Функции все стандартные.
Пока нет, так как при прозрачном фоне края получаются не сглаженые, как будто один полупрозрачный рисунок налаживаешь на другой и при каждом обновлении прогресс бара, хотя функция очистки _GDIPlus_GraphicsClear задействована, возможно решение есть но я пока сильно не углублялся в его поиски.


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

Alofa сказал(а):
IMStrelcov сказал(а):
... Хотелось бы выслушать предложения по поводу альтернатив...
GDI+ animated loading screens build 2014-06-20 (32 examples)
Впечатляет конечно количество вариантов, но думаю многое будет лишним, нужно поковыряться, что полезного почерпнуть.
Благодарю за ссылочку.
 

joiner

Модератор
Локальный модератор
Сообщения
3,556
Репутация
628
на примере функций из ссылки от Alofa
можно сделать так, чтобы при перетаскивании процесс не прекращался
Код:
GUIRegisterMsg($WM_TIMER, "PlayAnim")
DllCall("user32.dll", "int", "SetTimer", "hwnd", $hGUI, "int", 0, "int", 0, "int", 0)

While 1
	If GUIGetMsg() = -3 Then
		ProgressCircDestroyAll_()
		Exit
	EndIf
WEnd


Func PlayAnim()
	If TimerDiff($Time) > 20 Then
		$Pos += 1
		If $Pos > 100 Then
			$Pos = 0
		EndIf
		$Rot += 1
		If $Rot > 100 Then
			$Rot = 0
		EndIf

		If $Loop Then
			$LoopRot += 1.5
			$LoopPos -= 1
			If $LoopPos < 0 Then
				$LoopPos = 1
				$Loop = 0
			EndIf
		Else
			$LoopRot += 1
			$LoopPos += 1
			If $LoopPos > 100 Then
				$LoopPos = 99
				$Loop = 1
			EndIf
		EndIf
		If $LoopRot > 100 Then
			$LoopRot = 1
		EndIf
		ProgressCircUpdate_($ProgressCirc1, $Pos, $Pos & '%', 0)
		ProgressCircUpdate_($ProgressCirc3, $Pos, $Pos & '%', 0)
		ProgressCircUpdate_($ProgressCirc2, $LoopPos, $LoopPos & '%', $LoopRot)
		ProgressCircUpdate_($ProgressCirc4, $LoopPos, $LoopPos & '%', $LoopRot)
		$Time = TimerInit()
	EndIf
EndFunc   ;==>PlayAnim


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

и конечно же, лучше сделать под какую то определенную версию языка и указать это. так как в коде могут использовать разные библиотеки, может быть конфликт
 
Верх