#include-once
#include <Date.au3>
#include <DateTimeConstants.au3>
#include <GDIPlus.au3>
#include <MsgBoxConstants.au3>
#include <WinAPI.au3>
_GDIPlus_Startup()
OnAutoItExitRegister('_DateImage_BitmapDispose')
Global $__g_sDateImage_Version = '1.0.0.0'
Global $__g_sDateImage_Date = '30.08.2014'
Global $__g_hDateImage_Image = _GDIPlus_BitmapCreateFromMemory(_DateImage_Calendar())
If @error Then Exit MsgBox($MB_ICONERROR, 'DateImage-UDF', 'Fehler! "date_big.ico" konnte nicht gelesen werden!')

Func _DateImage_BitmapDispose()
	_GDIPlus_BitmapDispose($__g_hDateImage_Image)
	_GDIPlus_Shutdown()
EndFunc   ;==>_DateImage_BitmapDispose

Func _DateImage_Create($iLeft = 0, $iTop = 0, $sDate = '', $iColor = '')
	Local $idPicControl = GUICtrlCreatePic('', $iLeft, $iTop, 72, 72)
	If $idPicControl = 0 Then Return SetError(1, 0, 0)
	If $sDate = '' Or $sDate = Default Then $sDate = StringFormat('%04i/%02i/%02i', @YEAR, @MON, @MDAY)
	If $iColor = '' Or $iColor = Default Then $iColor = 0xFF000088
	_DateImage_SetData($idPicControl, $sDate, $iColor)
	Return $idPicControl
EndFunc   ;==>_DateImage_Create

Func _DateImage_SetData($ControlID, $sDate = '', $iColor = '')
	Local $hWnd = GUICtrlGetHandle($ControlID)
	If Not IsHWnd($hWnd) Then Return SetError(1, 0, 0)
	If $sDate = '' Or $sDate = Default Then $sDate = StringFormat('%04i/%02i/%02i', @YEAR, @MON, @MDAY)
	If $iColor = '' Or $iColor = Default Then $iColor = 0xFF000088
	Local Const $STM_SETIMAGE = 0x0172
	Local Const $IMAGE_BITMAP = 0
	Local $hGraphic = _GDIPlus_GraphicsCreateFromHWND($hWnd)
	Local $hBrush = _GDIPlus_BrushCreateSolid($iColor)
	Local $hFormat = _GDIPlus_StringFormatCreate()
	_GDIPlus_StringFormatSetAlign($hFormat, 1)
	Local $hFamily = _GDIPlus_FontFamilyCreate('Times New Roman')
	Local $hFont = _GDIPlus_FontCreate($hFamily, 12, 1)
	Local $tLayout = _GDIPlus_RectFCreate(2, 10, 68, 60)
	Local $hBitmap = _GDIPlus_BitmapCreateFromGraphics(72, 72, $hGraphic)
	Local $hGfxCtx = _GDIPlus_ImageGetGraphicsContext($hBitmap)
	Local $aDate, $aTime
	_DateTimeSplit($sDate, $aDate, $aTime)
	Local $iWeekday = _DateToDayOfWeek($aDate[1], $aDate[2], $aDate[3])
	Local $sMonth = _DateToMonth($aDate[2], $DMW_LOCALE_SHORTNAME)
	Local $sDay = StringFormat('%s.\n%2i. %s\n%04i', _DateDayOfWeek($iWeekday, $DMW_LOCALE_SHORTNAME), $aDate[3], $sMonth, $aDate[1])
	_GDIPlus_GraphicsDrawImageRect($hGfxCtx, $__g_hDateImage_Image, 0, 0, 72, 72)
	Local $aInfo = _GDIPlus_GraphicsMeasureString($hGraphic, $sDay, $hFont, $tLayout, $hFormat)
	_GDIPlus_GraphicsDrawStringEx($hGfxCtx, $sDay, $hFont, $aInfo[0], $hFormat, $hBrush)
	Local $hBMP = _GDIPlus_BitmapCreateHBITMAPFromBitmap($hBitmap)
	_WinAPI_DeleteObject(GUICtrlSendMsg($ControlID, $STM_SETIMAGE, $IMAGE_BITMAP, $hBMP))
	_WinAPI_DeleteObject($hBMP)
	_GDIPlus_GraphicsDispose($hGfxCtx)
	_GDIPlus_BitmapDispose($hBitmap)
	_GDIPlus_FontDispose($hFont)
	_GDIPlus_FontFamilyDispose($hFamily)
	_GDIPlus_StringFormatDispose($hFormat)
	_GDIPlus_BrushDispose($hBrush)
	_GDIPlus_GraphicsDispose($hGraphic)
EndFunc   ;==>_DateImage_SetData

Func _DateImage_Info()
	MsgBox($MB_ICONINFORMATION, 'DateImage-UDF', StringFormat('Autor:\tOscar (www.autoit.de)\nVersion:\t%s\nDatum:\t%s', $__g_sDateImage_Version, $__g_sDateImage_Date))
EndFunc   ;==>_DateImage_Info

;Code below was generated by: 'File to Base64 String' Code Generator v1.18 Build 2014-08-02
Func _DateImage_Calendar($bSaveBinary = False, $sSavePath = @ScriptDir)
	Local $Calendar
	$Calendar &= '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'
	$Calendar &= 'PwA/AD8APwA/AD8APwA/AO8/ADYA/xH0EeXwAT8APwD/PwA/AD8APwA/AD8APwA/AH8/AD8APwA/ADQA/xHzEeb85OE/AD8APwA/AD8APwD/PwA/AD8APwA/AD8APwA/APc2AP8R9RHgPwA/AD8APwA/PwA/AD8APwA/AD4AuLIw4P/m5EswAQCqp8Cj/wAAABYBBgEWnQEA5QA2AQeWj+Pf/wHH/wD+ANVH5OLf/wD/APf/APwA10fe/wB/AH8AfwDvfwB/AHYA9SPjYAN/AH8Af38AfwB/AH8AfwBzAPYj4f7dfwB/AH8AfwB/AH8AfwD/dAD1Ix8AHwAfAB8AHwAfAA8fAA8ACQD5EQww4f8AIUHh/wYq3P8ECCswACzd/wgtoOD/By3icADh8wD+LHEBPwA/AD8APwA/AD8A/z8APwA/AD8APwAzAD8OsQ8PMRCxEDER9REYQOX/AFNx6/8XQOT/ABpC5f8ZQur/AAwrpv8KK6r/AA0sp/8aQ+r/gBtD5f8cQ+Q/AP84AD8CvwE/AL8BvwF/AbkB7z8CvwM9AD8O6rIPMRCxEAMxEfURGUbr/3iSEPT/F0VwEEjs/wAXRvP/b3WQ/wCVjHf/U1p1/wAZSPX/HEnt//gdSes/ADgAPwK/AT8A/78BvwF/AbkBPwK/Az0APw55MA5I7TIQsRAxEfQRFQAXS/H/mrD4/wAQRfD/E0jy/wAMRfr/p5+L/wDAu7H/dGxZ/wAPSP3/FEnz//gVSfE/ADgAPwK/AT8A/78BvwF/AbkBPwK/Az0APw74/f8T8AIxELEQMRGxEQEwAA0XUPf/p70Q/P+lvDEA/f+fALn//5+Yif/QAMzH/21mWP+iwL3//6a9/jICPwD/NwA/Ar8BPwC/Ab8BfwG5AY8/Ar8DPQA/Dv//pfACHzEQ8QExEbERMAAEF1ck/f8xABVVMBRU/wD/CU///6CYiAD/5eHc/25mVwD/DVP//xRV///yAT8ANwA/Ar8BPwC/Ab8B/38BuQE/Ar8DPQA/DjcO9RAPsREwAA8AcBOgmov/gP789/9vaFp1FP8PAA8ADwAPAA8ADwAPAA8ADw8ADwAPAD4OQ7AA9/9vaFr/AAAMAA0AMCUABIN/ff7/BQwBHih2pQD/cX8APwD/PwA/AD8APwA/AD8APwAfACMfABIA+D//AQD8HwFsAQ=='
	$Calendar = _WinAPI_Base64Decode($Calendar)
	Local $tSource = DllStructCreate('byte[' & BinaryLen($Calendar) & ']')
	DllStructSetData($tSource, 1, $Calendar)
	Local $tDecompress
	_WinAPI_LZNTDecompress($tSource, $tDecompress, 21662)
	$tSource = 0
	Local $bString = Binary(DllStructGetData($tDecompress, 1))
	If $bSaveBinary Then
		Local $hFile = FileOpen($sSavePath & "\calendar.ico", 18)
		FileWrite($hFile, $bString)
		FileClose($hFile)
	EndIf
	Return $bString
EndFunc   ;==>_date_blank

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
