Что нового

Текстовый прогресс бар

FlatX007

Tattoo!
Сообщения
197
Репутация
35
Небольшая функция для создания текстового прогресс бара, может кому пригодится.

Код:
#include <ButtonConstants.au3>
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>

Global $sString, $hLabel1
Global Const $COLOR = 0x0000FF

$hForm = GUICreate("Text Progress Bar", 625, 85)
$hLabel1 = GUICtrlCreateLabel("", 8, 8, 611, 24)
GUICtrlSetFont(-1, 12, 800, 0, "MS Sans Serif")
GUICtrlSetColor(-1, $COLOR)
$hButton1 = GUICtrlCreateButton("Ok", 536, 48, 75, 25, 0)

GUISetState(@SW_SHOW)

While 1
	$nMsg = GUIGetMsg()
	Switch $nMsg
		Case $GUI_EVENT_CLOSE
			Exit

		Case $hButton1
			For $i = 0 To 100
				Sleep(100)
				GUICtrlSetData($hLabel1, _TPB_ProgressSet($i))
				GUICtrlSetData($hButton1, $i & " %")
			Next

	EndSwitch
WEnd

Func _TPB_ProgressSet($Prosent = 0)

	If $Prosent < 0 Or $Prosent > 100 Then Return SetError(1, 0, 0)
	$String = "**************************************************************************************"
	Return StringLeft($String, $Prosent / (100 / StringLen($String)))

EndFunc   ;==>_TPB_ProgressSet
 

THE GUILTY GOD

Новичок
Сообщения
2
Репутация
0
А как перенести текст на вторую строчку, а то весь не помещается!!??
И как можно изменить стиль или цвет окошка!??
И как сделать автоматическое нажатие клавиши ОК
 

Viktor217

Осваивающий
Сообщения
233
Репутация
31
THE GUILTY GOD сказал(а):
А как перенести текст на вторую строчку, а то весь не помещается!!??
И как можно изменить стиль или цвет окошка!??
И как сделать автоматическое нажатие клавиши ОК
1. Не знаю как, я бы просто по завершению деятельности первого прогресс бара, сделал второй(=
2. Global Const $COLOR = 0x0000FF - Это я так понимаю цвет текста, а со стилем окошка тебе в другой раздел(=
Цвет окошка можно так задать: GUICtrlSetBkColor ( controlid, backgroundcolor )
3. Зачем тебе автоматическое нажатие клавиши "Ок"?)
 

Max98

Новичок
Сообщения
45
Репутация
3
Чтобы нажать кнопку OK, выставь для неё стиль $BS_DEFPUSHBUTTON и используй симуляцию нажатия клавиши ENTER
Код:
Send("{ENTER}")
 

AZJIO

Меценат
Меценат
Сообщения
2 752
Репутация
1 149
Усовершенствовал функцию:

Код:
#NoTrayIcon
Opt("GUIResizeMode", 802)
Opt("GUIDataSeparatorChar", ChrW('0x00A4')) 
Global $Color=0x00ccff, $BkColor=0xf7f7f7

$hForm = GUICreate("Text Progress Bar", 380, 160+30, -1, -1, 0x00040000)
$hButton1 = GUICtrlCreateButton("Старт", 260,115, 80, 30)
GUICtrlCreateLabel('Используемый символ :', 10, 43, 130, 17)
$symbol = GUICtrlCreateCombo('', 140,40, 60)
GUICtrlSetData(-1,' '&ChrW('0x2588')&'¤|¤/¤\¤*¤(¤)¤'&ChrW('0x25CF')&'¤'&ChrW('0x25AA')&'¤'&ChrW('0x2022')&'¤'&ChrW('0x2039')&'¤'&ChrW('0x203A')&'¤'&ChrW('0x2206')&'¤'&ChrW('0x20AC')&'¤!¤.', ' '&ChrW('0x2588'))
GUICtrlCreateLabel('Размер бара (кол. симв.) :', 10, 73, 130, 17)
$kol_sim = GUICtrlCreateCombo('', 140,70, 60)
GUICtrlSetData(-1,'20¤30¤50¤100¤120¤200', '20')
GUICtrlCreateLabel('Задержка :', 10, 103, 130, 17)
$Delay = GUICtrlCreateCombo('', 140,100, 60)
GUICtrlSetData(-1,'10¤20¤50¤100¤200', '20')
GUICtrlCreateLabel('Задержка :', 10, 133, 130, 17)
$Style= GUICtrlCreateCombo('', 140,130, 60)
GUICtrlSetData(-1,'1¤2¤3¤4¤5', '1')

GUICtrlCreateGroup('', 205, 28, 160, 72)
$hSelect = GUICtrlCreateButton("Выбрать", 210, 40, 60, 25)
$hAdd = GUICtrlCreateButton("Добавить", 210, 70, 60, 25)
$Un = GUICtrlCreateCombo('', 280,40, 60)
GUICtrlSetData(-1,'2588¤25A0¤F031¤25B2¤25BA¤25BC¤2590¤2666¤25D8¤263B', '2588')

GUISetState()

While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
        Case -3
            Exit

        Case $hButton1
			$symbol0 = GUICtrlRead($symbol)
			$Delay0 = GUICtrlRead($Delay)
			$kol_sim0 = GUICtrlRead($kol_sim)
			$aStartTPB=_TPB_ProgressOn(10, 5, $kol_sim0, 21, $symbol0)
            For $i = 0 To 100
                Sleep($Delay0)
                _TPB_ProgressSet($aStartTPB, $i)
                ; GUICtrlSetData($hButton1, $i & " %")
            Next
			; GUICtrlDelete($aStartTPB[0])
			; _TPB_ProgressClose($aStartTPB)

        Case $hSelect
			Run('charmap.exe')

        Case $hAdd, $Un
			$Un0 = ChrW('0x'&GUICtrlRead($Un))
            GUICtrlSetData($symbol, $Un0, $Un0)

        Case $Style
			Switch GUICtrlRead($Style)
				Case 1
				   $Color=0x00CCFF
				   $BkColor=0xF7F7F7
				Case 2
				   $Color=0xFF8700
				   $BkColor=0xFFFF8D
				Case 3
				   $Color=0xFF0361
				   $BkColor=0xFFDEDA
				Case 4
				   $Color=0x00A272
				   $BkColor=0xE8EED8
				Case 5
				   $Color=0x515151
				   $BkColor=0xF1F1F1
				Case Else
				   $Color=0x00CCFF
				   $BkColor=0xF7F7F7
			EndSwitch

    EndSwitch
WEnd

Func _TPB_ProgressOn($left, $top, $amount, $height, $symbol)
	If IsDeclared('aStartTPB') And IsArray($aStartTPB) Then GUICtrlDelete($aStartTPB[0]) ; Строка для теста, чтобы удалить элемент и проверить с другим символом
	Local $aStartTPB[3], $String='  '
	For $i = 1 to $amount
		$String&=$symbol
	Next
	GUISetFont (12, 700)
	$aStartTPB[0] = GUICtrlCreateLabel($String, $left, $top, -1, $height)
	GUICtrlSetData(-1, '')
	GUICtrlSetColor(-1, $Color)
	GUICtrlSetBkColor(-1, $BkColor)
	; GUICtrlSetColor(-1, 0xff8700)
	; GUICtrlSetBkColor(-1, 0xffff8d)
	$aStartTPB[1] = $amount
	$aStartTPB[2] = $symbol
	Return $aStartTPB
EndFunc

Func _TPB_ProgressSet($aStartTPB, $Prosent = 0)
    If $Prosent < 0 Or $Prosent > 100 Then Return SetError(1, 0, 0)
	Local $kol=Int($Prosent*($aStartTPB[1]/100)), $String='  '
	; If StringLen(GUICtrlRead($aStartTPB[0]))-2=$kol Then Return ; этот вариант вызывает ошибку при использовании двух символов. Взамен строчка после цикла.
	For $i = 1 to $kol
		$String&=$aStartTPB[2]
	Next
	If GUICtrlRead($aStartTPB[0])=$String Then Return
	GUICtrlSetData($aStartTPB[0], $String)
EndFunc

; Func _TPB_ProgressClose($aStartTPB)
    ; GUICtrlDelete($aStartTPB[0])
; EndFunc

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

AZJIO

Меценат
Меценат
Сообщения
2 752
Репутация
1 149
Так можно сделать прогресс бар или диаграмму в ListView.

Код:
#include <ListViewConstants.au3>

$hGUI = GUICreate("ListView - Диаграмма / Прогресс бар", 440, 410, 150, 250)
GUISetBkColor(0xECE9D8) ; устанавливает цвет фона Gui

$s = ''
For $i = 1 To 10
	$s &= ChrW(0x2588)
Next

$ListView = GUICtrlCreateListView("1|2|3  ", 10, 10, 420, 350)
GUICtrlSetColor($ListView, 0x00A272)
GUICtrlSetBkColor($ListView, 0xE8EED8)
Local $id_item[18]
For $i = 1 To 17
	$item = ''
	For $j = 1 To 3
		$item &= StringTrimRight($s, Random(0, 9, 1)) & '|'
	Next
	$item = StringTrimRight($item, 1)
	$id_item[$i] = GUICtrlCreateListViewItem($item, $ListView)
Next
For $i = 0 To 2
	GUICtrlSendMsg($ListView, $LVM_SETCOLUMNWIDTH, $i, 135)
	; GUICtrlSendMsg($ListView, $LVM_SETCOLUMNWIDTH, $i, -1)
	; GUICtrlSendMsg($ListView, $LVM_SETCOLUMNWIDTH, $i, -2)
Next

$button = GUICtrlCreateButton("Начать изменения", 145, 370, 150, 25)

GUISetState()

While 1
	Switch GUIGetMsg()
		Case $button
			Switch Random(1, 5, 1)
				Case 2
					$Color = 0xFF8700
					$BkColor = 0xFFFF8D
				Case 3
					$Color = 0xFF0361
					$BkColor = 0xFFDEDA
				Case 4
					$Color = 0x00A272
					$BkColor = 0xE8EED8
				Case 5
					$Color = 0x515151
					$BkColor = 0xF1F1F1
				Case Else
					$Color = 0x00CCFF
					$BkColor = 0xF7F7F7
			EndSwitch
			GUICtrlSetColor($ListView, $Color)
			GUICtrlSetBkColor($ListView, $BkColor)
			$rnd = Random(1, 17, 1)
			$w = Random(1, 10, 1)
			$s = ''
			For $i = 1 To $w
				$s &= ChrW(0x2588)
				GUICtrlSetData($id_item[$rnd], $s & '|' & $s & '|' & $s)
				Sleep(100)
			Next
			$rnd = Random(1, 17, 1)
			$w = Random(1, 10, 1)
			$s = ''
			For $i = 1 To $w
				$s &= ChrW(0x2588)
				GUICtrlSetData($id_item[$rnd], $s & '|' & $s & '|' & $s)
				Sleep(100)
			Next
		Case -3
			Exit
	EndSwitch
WEnd
 
Верх