﻿#include <GUIConstantsEx.au3>
#include 'GuiCtrlVolume.au3'

; Beispielscript
Global Const $sMsg0 = 'Es handelt sich um ein Control-Element, zum ändern der Wave-Lautstärke des Scripts (Standard) oder man weist dem Control eine Funktion zu, die bei Änderungen aufgerufen wird. Zum Beispiel, wenn man die Lautstärke von zwei (oder mehr) Musikplayern anpassen möchte (Stichwort: BASS-UDF).\rMan kann die Lautstärke mit einem linken Mausklick ändern oder durch drehen des Mausrades. Ein Klick auf das Lautsprecher-Symbol schaltet die Lautstärke stumm bzw. setzt sie wieder auf den vorherigen Wert.'
Global Const $sMsg1 = 'Änderung der Text- und der Hintergrundfarbe.\rEine Funktion zugewiesen, die bei Änderungen aufgerufen wird (siehe Consolenausgabe).'
Global Const $sMsg2 = 'Standard-Hintergrundfarbe ist die vom Fenster.\rDie Textfarbe ist eine Invertierung davon.\rOhne Funktionszuweisung wird die Wave- Lautstärke des Scripts geändert.'
Global Const $iBkColor = 0xFFDDAA

Global $hGui = GUICreate('Beispielscript zu "GuiCtrlVolume"', 640, 300) ; Testfenster erstellen
GUISetFont(10 / $__g_iGuiCtrlVolume_AppDPI * 96, 400, 0, 'Arial')
GUISetBkColor($iBkColor)

GUICtrlCreateLabel(StringFormat($sMsg0), 10, 10, 620, 90) ; Ueberschrift (Allgemeine Erklaerung)
GUICtrlSetColor(-1, BitXOR($iBkColor, 0xFFFFFF))

Global $idDelete = GUICtrlCreateButton('Delete Volume 1', 10, 110, 120, 32) ; zwei Testbuttons
Global $idCreate = GUICtrlCreateButton('Create Volume 1', 140, 110, 120, 32)
GUICtrlSetState(-1, $GUI_DISABLE)

GUICtrlCreateLabel(StringFormat($sMsg1), 10, 160, 320, 70) ; Erklaerung des Controlelements
GUICtrlSetColor(-1, BitXOR($iBkColor, 0xFFFFFF))

Global $idVolume1 = _GuiCtrlVolume_Create(30, 240) ; Volume-Control erstellen an Position: (Left, Top)
_GuiCtrlVolume_SetColor(-1, 0xAAFFAA, 0x000000) ; Dem Volume-Control die Textfarbe und die Hintergrundfarbe zuweisen
_GuiCtrlVolume_SetFunction(-1, '_ChangeVolume') ; Dem Volume-Control eine Funktion zuweisen, die bei Aenderungen aufgerufen wird

Global $idLabel = GUICtrlCreateLabel('', 200, 245, 70, 45) ; Ein Testlabel, um eine Aenderung in der Funktion vorzunehmen
GUICtrlSetColor(-1, BitXOR($iBkColor, 0xFFFFFF))
GUICtrlSetFont(-1, 20)

GUICtrlCreateLabel(StringFormat($sMsg2), 350, 160, 280, 70) ; Erklaerung des Controlelements
GUICtrlSetColor(-1, BitXOR($iBkColor, 0xFFFFFF))

Global $idVolume2 = _GuiCtrlVolume_Create(380, 240) ; Volume-Control erstellen an Position: (Left, Top)

GUISetState(@SW_SHOW, $hGui)

While True
	Switch GUIGetMsg()
		Case $GUI_EVENT_CLOSE
			Exit
		Case $idDelete
			GUICtrlSetState($idDelete, $GUI_DISABLE)
			GUICtrlSetState($idCreate, $GUI_ENABLE)
			GUICtrlDelete($idVolume1)
		Case $idCreate
			GUICtrlSetState($idDelete, $GUI_ENABLE)
			GUICtrlSetState($idCreate, $GUI_DISABLE)
			$idVolume1 = _GuiCtrlVolume_Create(30, 240)
			_GuiCtrlVolume_SetColor($idVolume1, 0xAAFFAA, 0x000000)
			_GuiCtrlVolume_SetFunction($idVolume1, '_ChangeVolume')
	EndSwitch
WEnd

; Beispiel-Funktion, die bei einer Aenderung aufgerufen wird.
; Achtung! Sie darf auf keinen Fall blockierend sein! Keine MsgBox! Keine "GoTo"-Verschachtelung!
; Sie sollte auch so kurz (Laufzeit) wie moeglich sein! Kein Sleep!
; Der Uebergabeparameter (hier: $iValue) wird von der UDF mit dem aktuellen Lautstaerkewert befuellt.
Func _ChangeVolume($iValue)
	Local $iVolume = BitAND($iValue, 0x7F) ; Die Bits 0-6 enthalten die Lautstaerke in Prozent (0...100)
	Local $bMute = BitAND($iValue, 0x80) = 0x80 ; Das Bit 7 dient zur Speicherung des Mute-Zustands (True/False)
	ConsoleWrite(StringFormat('Value: %i\tVolume: %i%\tMute: %s\r\n', $iValue, $iVolume, $bMute))
	GUICtrlSetData($idLabel, $iVolume & '%')
EndFunc
