- Offizieller Beitrag
Hier mal ein Beispielscript, wie man eine Bewertung mit Sternen in das eigene Programm einbauen kann.
Die Bewertung läßt sich mit der Maus ändern. Beim bewegen der Maus über die Sterne werden diese entsprechend angezeigt.
Die beiden Icons (als Binärdaten im Script) sind von findicons.com und laut Beschreibung "Freeware". Diese beiden Icons werden automatisch im Unterverzeichnis ("icons") des Scriptverzeichnisses erstellt.
Ich habe das Script mal komplett kommentiert, sodass es auch für Anfänger leichter zu verstehen ist.
Spoiler anzeigen
#include <GUIConstantsEx.au3>
Opt('GUIOnEventMode', 1) ; den OnEventMode einschalten
[/autoit] [autoit][/autoit] [autoit]Global $hGui = GUICreate('SternBewertung', 480, 160) ; Die GUI erstellen
GUISetOnEvent($GUI_EVENT_CLOSE, 'CloseGui') ; Funktion, die aufgerufen wird, wenn man das Fenster schließt
GUISetOnEvent($GUI_EVENT_MOUSEMOVE, '_MOUSEMOVE') ; Funktion, die aufgerufen wird, sobald die Maus bewegt wird
GUICtrlCreateLabel('Bewertung:', 10, 25, 140, 32) ; Label mit Bewertungsschriftzug erstellen
GUICtrlSetFont(-1, 16, 400, 0, 'Verdana', 5) ; die Schriftgröße und -art ändern
Global $sIconPath = @ScriptDir & '\icons\' ; Variable zum Pfad der Icons
If Not FileExists($sIconPath) Then DirCreate($sIconPath) ; falls das Verzeichnis nicht existiert, dann dieses erstellen
Global $sIniFile = @ScriptDir & '\SternBewertung.ini' ; Pfad und Dateiname der Inidatei
[/autoit] [autoit][/autoit] [autoit]Global $aidStars[5] ; Array für die IDs der Gui-Icons erstellen (hier für 5 Sterne)
[/autoit] [autoit][/autoit] [autoit]Global $iShowStars = IniRead($sIniFile, 'Config', 'Bewertung', 0) ; Variable zum speichern der Bewertung (Wert aus der Inidatei lesen)
If $iShowStars < 0 Or $iShowStars > UBound($aidStars) - 1 Then $iShowStars = 0 ; wenn der gespeicherte Wert nicht im Wertebereich des Arrays liegt, dann auf 0 setzen
Global $iStars = -1 ; Variable zum speichern der temporären (MouseOver) Bewertung
[/autoit] [autoit][/autoit] [autoit]; Die beiden folgenden Code-Zeilen erstellen die Icons, anhand der Binär-Daten, die mit Hilfe
; vom "'File to Base64 String' Code Generator" von UEZ in das Script integriert wurden.
If Not FileExists($sIconPath & 'star0.ico') Then _star0ico(True, $sIconPath) ; falls das Icon "star0.ico" nicht existiert, dieses erstellen
If Not FileExists($sIconPath & 'star1.ico') Then _star1ico(True, $sIconPath) ; falls das Icon "star1.ico" nicht existiert, dieses erstellen
For $i = 0 To UBound($aidStars) - 1 ; entsprechend der Größe des Arrays werden hier die Anzahl der Sterne erstellt
$aidStars[$i] = GUICtrlCreateIcon($sIconPath & 'star0.ico', 0, 170 + $i * 36, 20, 32, 32) ; die Sternicons erstellen
GUICtrlSetOnEvent(-1, '_SetStars') ; Funktion, die aufgerufen wird, wenn man das Sternicon anklickt
Next
_ChangeStars($iShowStars) ; einmal die Funktion "_ChangeStars" aufrufen, um die Anzahl der gespeicherten Sterne farbig anzuzeigen
GUISetState(@SW_SHOW, $hGui) ; die GUI anzeigen lassen
WinWaitClose($hGui) ; warten, bis die GUI geschlossen wird
Exit
Func CloseGui()
GUIDelete($hGui) ; die GUI schließen
EndFunc ;==>CloseGui
Func _SetStars()
ToolTip('Das ist die' & @CRLF & 'gespeicherte Bewertung') ; Tooltip anzeigen
$iShowStars = $iStars ; die "Speicher"-Variable mit der temporären Variable füllen
IniWrite($sIniFile, 'Config', 'Bewertung', $iShowStars) ; den Wert in die Inidatei speichern
_ChangeStars($iShowStars) ; die Sterne entsprechend setzen
EndFunc ;==>_SetStars
Func _MOUSEMOVE()
Local $aCursorInfo = GUIGetCursorInfo($hGui) ; Informationen über die GUI abrufen
Switch $aCursorInfo[4] ; entsprechend dem GUI-Element, über dem sich gerade die Maus befindet, verzweigen
Case $aidStars[0] To $aidStars[UBound($aidStars) - 1] ; wenn sich die Maus über einen der Sterne befindet, dann...
$iStars = $aCursorInfo[4] - $aidStars[0] ; ausrechnen, um welchen Stern es sich handelt (Wert = 0-4)
If $iStars <> $iShowStars Then ; wenn der Stern ungleich dem gespeicherten ist, dann...
ToolTip('Bewertung ändern' & @CRLF & 'auf ' & $iStars + 1 & StringLeft(' Sterne', 6 + ($iStars > 0))) ; Tooltip anzeigen
Else ; ansonsten (der Stern unter der Maus ist der gespeicherte Stern)...
ToolTip('Das ist die' & @CRLF & 'gespeicherte Bewertung') ; Tooltip anzeigen
EndIf
_ChangeStars($iStars) ; temporäre Sterne anzeigen
Case Else ; wenn sich die Maus nicht über einen der Sterne befindet, dann...
ToolTip('') ; Tooltip schließen
_ChangeStars($iShowStars) ; gespeicherte Sterne anzeigen
EndSwitch
EndFunc ;==>_MOUSEMOVE
Func _ChangeStars($iChange)
For $i = 0 To UBound($aidStars) - 1 ; Schleife zum bearbeiten aller Sterne
If $i > $iChange Then ; wenn der Wert größer als $iChange ist, dann..
GUICtrlSetImage($aidStars[$i], $sIconPath & 'star0.ico', 0) ; den grauen Stern anzeigen
Else ; ansonsten...
GUICtrlSetImage($aidStars[$i], $sIconPath & 'star1.ico', 0) ; den farbigen Stern anzeigen
EndIf
Next
EndFunc ;==>_ChangeStars
; Die folgenden Codezeilen wurden mit dem "'File to Base64 String' Code Generator v1.15 Build 2014-05-01" von UEZ erstellt
; Danke an UEZ (http://www.autoit.de) für diesen tollen Generator
Func _star0ico($bSaveBinary = False, $sSavePath = @ScriptDir)
Local $star0ico
$star0ico &= '9rRIAAABABAgIAFwIAAAqBAAABYAAMwAKAAYAJAAQAAYAVyhGQEeHh4BgAECgAECBIABB46OjlBYqFhYGoAFE4ABFoABqhmAARuAARyAAR+EAbYhjAGBCR2EE4EdF4ABAhSAARFsbGwhYKhgYBGABQWEMwGQPQGBDQ2FhYVZv79Av/+kpKT/gAWiUCoqKk6AC0+AAVRVgAFYgAFbgAFegAFgrYABYYQBwQJcwABZwAAKVcAAUcAATEZGRgBbiYmJoqioqAD/oqKi/0pKSvYYwTfAAAPFIMQfwQDBHwAMkpKSdc/PzwL/AQDT09P/o6MAo/+BgYGjJibuJsEUwQDBIVfEIsEbwQALwQPBHVLBKjo6OloAhoaGqKampv8I3d3dwhKenp7hDcAGDs0fzCADkJCQACKurq7/9vb2AP/m5ub/8vLyMP/Q0NDCL8AmhCl8KSnBVsExwQDBZcUCFwBEREQelZWVjoClpaX/2dnZwg6A7e3t/+jo6MEfDqfEHcpfEQChoaHJAcEN2tra/9jY2BD/5eXlwhLOzs4hwkOgoKByyQupqRSpBsAXfsEd1dXVAP/z8/P/4+PjAP/W1tb/5+fnoP/Jycn/wBRa5aONwAp4wR3BENLS0sJhA8EzwTHx8fH/zMxqzMEh0sBEacEK4Q7RPNHR4g5hJmEHYQbU1KLU4haqqqphFhI/DwMDAGALKra2tv/wPPDwYhjhCGEAYRvb2yDb/+rq6mIDysr8yv9hReEOYRPhJWEE5QW/4QHhBGEVvw4LAGAa0mEHGNzc3GIKaQDX19c/4kphHWEzYQThFO0E5OSg5P/f399haYc/DuMLAGEG4ODg4gvhDX8AAW8A7u7u/8DAwBr/YBk8Pw4LAKenp/Azvr6+4j1hP2E6fwADZwDhNPf39/+rq7yr/+FTPw4PAOBG4eFwj2EoYTl/AGcA4uLiYm/dYAi0Pw0TAGAXlmFg4TjHYTx/AGcA6enpYkJgCHZpPw1yDzzhkOFaYUDePN7efwBoAOEGYRetrTStlmAJHj8O6i4hr4ivr6XhJ+/v72Ip42FRaQDh4eFmAL0BMQDvsQexP7ETcAyWXwYPAHQPYA+wsLCWcScBAPlA+fn/+Pj4cgD7APv7//z8/P/9wP39//7+/joAMQHxsQH6+vo6AwEAMQgxBQPfBg8AsbGxluzs/uxyAzEFtQYPAA8ACQD1CG9xAAEAMSywBZAfBwcAs/izs5OxCg8ADwAPAA8AFw0AcTkwBo2fBwAAtfi1tY21cg8ADwAPAA8AbQ8A//JksAaBuQewXj//sQkPAA8ADwAPAA8ACwBxdBC3t7cqOQi6uroAjbi4uPa5ubnG/z8AMwC7u7vPBAwA+38DPgDqsAf6Dw8ADwABAH3wB3IxNQ8AAwBxWjACOT+fAw8ADwAPAA0AMBIPxQzFxY8HBAC8vLzPf18DDwAPAA8ADwADADBplv2fB/9yarAPv1YPAA8ADwAbDwA3GC1xXQ0AxsbG4P/CwsIMHwMPAA8Ahw8ADwAHAMHBwbr9B39wfv9NDwAPAA8ADwD/B1HvMZgFALF+cBktnwIPAA8ADw8ADwALAPA7A8TExPv2B/AIxl8CDwAPAA8ADwDDDwABAMPDw3XxXfE4/bAAXR8CDwAPAA8ADwAPAMcBALEm8a/IyMhxJ/+Vfw8ADwAPAA8ADwAGADAvCQDCwl2wKMIGADgA/wQAgAA0AAMAHAEBBgEW+AMggB/4AAABBj/84QgG/gAAfwEGARYBNgbwAEYAAw/gAAAHFsAANwA7AQEH/+AHgP//4A////AEA4T4HwQDP////AQDAP5//w=='
$star0ico = _WinAPI_Base64Decode($star0ico)
Local $tSource = DllStructCreate('byte[' & BinaryLen($star0ico) & ']')
DllStructSetData($tSource, 1, $star0ico)
Local $tDecompress
_WinAPI_LZNTDecompress($tSource, $tDecompress, 4286)
$tSource = 0
Local $bString = Binary(DllStructGetData($tDecompress, 1))
If $bSaveBinary Then
Local $hFile = FileOpen($sSavePath & "\star0.ico", 18)
FileWrite($hFile, $bString)
FileClose($hFile)
EndIf
Return $bString
EndFunc ;==>_star0ico
Func _star1ico($bSaveBinary = False, $sSavePath = @ScriptDir)
Local $star1ico
$star1ico &= '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'
$star1ico &= 'sA0zBzEAsQAA1/v//0y84/99MAI5jwMPAA8ADwAOAJkA3Q8YqNr/2vpg/v/O+f8wGTMA0AHwCMv0+/8Bn9h+z08DDwAPAA8ADwA0MqLg2Jas5vXyDnEHMQAC2bAAhdXu/wCefta/Vg8ADwAPAA8ABAAGEJ/SLT5wNOH9/wz/1XAHMQDf+/7/ABSq3P8AqtUMPx8DDwAPAA8ADwAHAAOlANq6yPH5/9r8CP//3DAAsej2//gCpdr/TQ8ADwAPAA8AAQ0Ap9lRbM/r/wriMBDkMABDwOX/8Aaf3S2PAg8ADwAPAAMPAAwAqv8DCKrbAP/e+vz/1Pb74P8DptvGTwIPAA8ADw8ADwAPADMI2nWY4QDy/3/X7/8DqvzZXQ8CDwAPAA8ADwAPAAHzB9UMELDe/wz6rrBMqv+VDwAPAA8ADwADDwA5COMJAKpdsCjVBgA4AP8EAIAANAADABwBAQYBFvgDIIAf+AAAAQY//OEIBv4AAH8BBgEWATYG8ABGAAMP4AAABxbAADcAOwEBB//gB4D//+AP///wBAOE+B8EAz////wEAwD+f/8='
$star1ico = _WinAPI_Base64Decode($star1ico)
Local $tSource = DllStructCreate('byte[' & BinaryLen($star1ico) & ']')
DllStructSetData($tSource, 1, $star1ico)
Local $tDecompress
_WinAPI_LZNTDecompress($tSource, $tDecompress, 4286)
$tSource = 0
Local $bString = Binary(DllStructGetData($tDecompress, 1))
If $bSaveBinary Then
Local $hFile = FileOpen($sSavePath & "\star1.ico", 18)
FileWrite($hFile, $bString)
FileClose($hFile)
EndIf
Return $bString
EndFunc ;==>_star1ico
Func _WinAPI_Base64Decode($sB64String)
Local $aCrypt = DllCall("Crypt32.dll", "bool", "CryptStringToBinaryA", "str", $sB64String, "dword", 0, "dword", 1, "ptr", 0, "dword*", 0, "ptr", 0, "ptr", 0)
If @error Or Not $aCrypt[0] Then Return SetError(1, 0, "")
Local $bBuffer = DllStructCreate("byte[" & $aCrypt[5] & "]")
$aCrypt = DllCall("Crypt32.dll", "bool", "CryptStringToBinaryA", "str", $sB64String, "dword", 0, "dword", 1, "struct*", $bBuffer, "dword*", $aCrypt[5], "ptr", 0, "ptr", 0)
If @error Or Not $aCrypt[0] Then Return SetError(2, 0, "")
Return DllStructGetData($bBuffer, 1)
EndFunc ;==>_WinAPI_Base64Decode
Func _WinAPI_LZNTDecompress(ByRef $tInput, ByRef $tOutput, $iBufferSize)
$tOutput = DllStructCreate("byte[" & $iBufferSize & "]")
If @error Then Return SetError(1, 0, 0)
Local $aRet = DllCall("ntdll.dll", "uint", "RtlDecompressBuffer", "ushort", 0x0002, "struct*", $tOutput, "ulong", $iBufferSize, "struct*", $tInput, "ulong", DllStructGetSize($tInput), "ulong*", 0)
If @error Then Return SetError(2, 0, 0)
If $aRet[0] Then Return SetError(3, $aRet[0], 0)
Return $aRet[6]
EndFunc ;==>_WinAPI_LZNTDecompress