Hallo,
Ich würde gerne so eine Sprechblase aus dem Autoit symbol kommen lassen, wie bei Oscars Pizzatimer:
[Pizzatimer]
[autoit]#include <Constants.au3>
[/autoit][autoit][/autoit][autoit]Opt('TrayAutoPause', 0)
Opt('TrayMenuMode', 1)
Opt('TrayOnEventMode', 1)
Global $aTime[7] = [1, 2, 3, 5, 10, 20, 30] ; Zeitvorgaben in Minuten (kann hier geändert/erweitert werden)
Global $ahItem[UBound($aTime)] ; Array für die TrayItems bei der Zeitvorgabe
Global $iStandard = 4 ; der Wert, der beim Programmstart voreingestellt sein soll (beginnt bei Null, hier also der 5. Wert = 10 Min.)
Global $iTimerInit = $aTime[$iStandard] ; die Initvariable wird mit der Zeitvorgabe des voreingestellten TrayItems belegt
Global $iCounter = 0 ; diese Variable wird später zum runterzählen benutzt
Global $sAlarmSound = RegRead('HKEY_CURRENT_USER\AppEvents\Schemes\Apps\.Default\SystemExclamation\.Default', '') ; Alarmsignal festlegen
Global $sTitle = 'Pizzatimer v1.1' ; Programmtitel
$hInit = TrayCreateMenu('Zeitvorgabe...') ; TrayMenü erstellen
For $i = 0 To UBound($aTime) - 1 ; Schleife, um die TrayItems für die Zeitvorgaben zu erstellen
$ahItem[$i] = TrayCreateItem($aTime[$i] & ' Minute' & StringMid(' n', 1 + ($aTime[$i] > 1), 1), $hInit, -1, 1)
; das StringMid ist ein kleiner Trick, um beim Wert "1" nur "Minute" und bei allen anderen Werten "Minuten" anzuzeigen
TrayItemSetOnEvent(-1, '_Timer') ; diese Funktion wird ausgeführt, wenn das TrayItem angeklickt wird
Next
TrayItemSetState($ahItem[$iStandard], $TRAY_CHECKED) ; dieses TrayItem (hier der 5. Wert, siehe oben) erhält den Checked-Status
$hStart = TrayCreateItem('Timer starten') ; TrayItem erstellen
TrayItemSetOnEvent(-1, '_Start') ; diese Funktion wird ausgeführt, wenn das TrayItem angeklickt wird
$hStop = TrayCreateItem('Timer stoppen') ; TrayItem erstellen
TrayItemSetOnEvent(-1, '_Stop') ; diese Funktion wird ausgeführt, wenn das TrayItem angeklickt wird
TrayItemSetState(-1, $TRAY_DISABLE) ; dieses TrayItem erstmal deaktivieren (Timer läuft ja noch nicht)
TrayCreateItem('') ; einen Strich (leeren Eintrag) im TrayMenü erzeugen
[/autoit][autoit][/autoit][autoit]TrayCreateItem('Programm beenden') ; TrayItem erstellen
TrayItemSetOnEvent(-1, '_End') ; diese Funktion wird ausgeführt, wenn das TrayItem angeklickt wird
TraySetIcon('Shell32.dll', -44) ; Das Icon festlegen, was im Tray angezeigt wird
TraySetToolTip($sTitle) ; den ToolTip (wenn sich die Maus über dem Icon befindet) festlegen
TraySetClick(16) ; Mit welcher Maustaste soll das TrayMenü aufgerufen werden (hier die rechte Maustaste)
TraySetState() ; das TrayMenü anzeigen
HotKeySet('!q', '_Stop') ; [ALT] + [q] zum stoppen des Timers
While True ; Endlosschleife
Sleep(50) ; Sleep-Befehl, um den Prozessor zu entlasten
WEnd
Func _End()
Exit
EndFunc ;==>_End
Func _Start() ; diese Funktion wird aufgerufen, wenn im TrayMenü "Timer starten" angeklickt wird
TrayItemSetState($hStart, BitOR($TRAY_DISABLE, $TRAY_UNCHECKED)) ; "Timer starten" deaktivieren
TrayItemSetState($hStop, $TRAY_ENABLE) ; "Timer stoppen" aktivieren
TrayItemSetState($hInit, $TRAY_DISABLE) ; Zeitvorgabe-Menü deaktivieren
$iCounter = $iTimerInit * 60 + 1 ; die Zählvariable mit der Zeitvorgabe (hier umgerechnet in sek.) belegen
_Countdown() ; Funktion sofort einmal aufrufen, um den TrayTip anzeigen zu lassen
AdlibRegister('_Countdown', 1000) ; Danach automatisch alle 1000 ms die Funktion aufrufen
EndFunc ;==>_Start
Func _Stop() ; diese Funktion wird aufgerufen, wenn im TrayMenü "Timer stoppen" angeklickt oder der Hotkey benutzt wird
AdlibUnRegister('_Countdown') ; Die Aufruf-Automatik stoppen
TrayTip($sTitle, 'Timer gestoppt!', 5, 17) ; TrayTip entsprechend anzeigen
TrayItemSetState($hStop, BitOR($TRAY_DISABLE, $TRAY_UNCHECKED)) ; "Timer stoppen" deaktivieren
TrayItemSetState($hStart, $TRAY_ENABLE) ; "Timer starten" aktivieren
TrayItemSetState($hInit, $TRAY_ENABLE) ; Zeitvorgabe-Menü aktivieren
EndFunc ;==>_Stop
Func _Timer() ; diese Funktion wird aufgerufen, wenn im TrayMenü einer der Zeitvorgabe-Werte angeklickt wird
$iTimerInit = $aTime[@TRAY_ID - $ahItem[0]] ; Die Initvariable mit dem Wert aus dem TrayMenü belegen
EndFunc ;==>_Timer
Func _Countdown()
$iCounter -= 1
TrayTip($sTitle, 'Restzeit: ' & _MinSec($iCounter), 5, 17)
If $iCounter = 0 Then
AdlibUnRegister('_Countdown')
TrayTip($sTitle, 'Zeit um!', 5, 17)
SoundPlay($sAlarmSound)
TrayItemSetState($hStop, $TRAY_DISABLE)
TrayItemSetState($hStart, $TRAY_ENABLE)
TrayItemSetState($hInit, $TRAY_ENABLE)
EndIf
EndFunc ;==>_Countdown
Func _MinSec($iCounter)
Local $sOut = ''
If $iCounter > 59 Then
$sOut = Int($iCounter / 60) & ' min. und '
$sOut &= Mod($iCounter, 60) & ' sek.'
Else
$sOut = $iCounter & ' sek.'
EndIf
Return $sOut
EndFunc ;==>_MinSec
[/spoiler]