- Offizieller Beitrag
Diese UDF erstellt ein Bild mit dem Datum (Wochentag, Tag. Monat, Jahr). Also quasi ein Kalenderblatt als Anzeige für das Datum.
Da es sich um ein ganz normales Pic-Control (Größe: 72x72 Pixel) handelt, kann man es auch mit GUICtrlSetPos verschieben, mit GUICtrlSetState anzeigen/verstecken und mit GuiCtrlSetOnEvent (bzw. GuiGetMsg-Abfrage) mit einem KlickEvent belegen.
Zum erstellen gibt es:
$ControlID = _DateImage_Create($iLeft, $iTop, $sDate, $iColor)
[/autoit]Zum ändern des Datums/der Farbe:
[autoit]_DateImage_SetData($ControlID, $sDate, $iColor)
[/autoit]Screenshot:
autoit.de/wcf/attachment/24661/
UDF
#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 (http://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
Beispiel
#include <GUIConstantsEx.au3>
#include '_DateImage.au3'
;~ _DateImage_Info()
Global $sDate = StringFormat('%04i/%02i/%02i', @YEAR, @MON, @MDAY)
Global $iColor = 0xCC008800 ; <- Die Farbe für die Schrift im ARGB-Format
Global $hGui = GUICreate('Datumsanzeige', 400, 300)
GUISetBkColor(0xA0A0C0)
Global $idDateImage = _DateImage_Create(300, 20, $sDate, $iColor)
GUISetState()
Sleep(1000)
$sDate = StringFormat('%04i/%02i/%02i', 2014, 12, 31)
_DateImage_SetData($idDateImage, $sDate, $iColor)
GUICtrlSetPos($idDateImage, 170, 70)
[/autoit] [autoit][/autoit] [autoit]Sleep(500)
GUICtrlSetState($idDateImage, $GUI_HIDE)
Sleep(500)
GUICtrlSetState($idDateImage, $GUI_SHOW)
While True
Switch GUIGetMsg()
Case $GUI_EVENT_CLOSE
Exit
Case $idDateImage
$sDate = _InputDateBox(0, '', '', $sDate)
_DateImage_SetData($idDateImage, $sDate)
EndSwitch
WEnd
;===============================================================================
; Function Name: _InputDateBox([$iFormat][, $sTitle][, $sText][, $sDefaultDate][, $hParent])
; Description: Fragt den Benutzer nach Datum oder Datum und Uhrzeit und gibt dies als String zurück
; Parameter(s): $iFormat = 0 oder 1
; bei 0 wird nur nach dem Datum gefragt (Uhrzeit wird dann als "00:00:00" zurückgegeben)
; bei 1 wird nach Datum und Uhrzeit gefragt
; Requirement: -
; Return Value(s): bei Erfolg = String in Form von: "YYYY/MM/DD hh:mm:ss"
; bei Abbruch = Leerstring und @error = 1
; Author(s): Oscar (http://www.autoit.de)
;===============================================================================
Func _InputDateBox($iFormat = 1, $sTitle = '', $sText = '', $sDefaultDate = '', $hParent = '')
If $iFormat < 0 Or $iFormat > 1 Then $iFormat = 1
If $sTitle = '' Or $sTitle = Default Then $sTitle = 'Datum-Box'
If $sText = '' Or $sText = Default Then $sText = 'Bitte Datum auswählen!'
If $iFormat Then $sText = 'Bitte Datum und Uhrzeit auswählen!'
Local $iOnEventMode = Opt('GUIOnEventMode', 0), $sRetDate = '', $iError = 0
Local $hGui = GUICreate($sTitle, 220 + $iFormat * 85, 130, Default, Default, Default, 8, $hParent)
GUISetBkColor(0xCCCCCC, $hGui)
GUISetIcon('shell32.dll', 24, $hGui)
GUICtrlCreateGroup($sText, 10, 20, 200 + $iFormat * 85, 70)
GUICtrlSetFont(-1, 10, 400, 0, 'Arial', 5)
GUICtrlCreateIcon('shell32.dll', -21, 20, 48, 32, 32)
Local $idDate = GUICtrlCreateDate($sDefaultDate, 65, 49, 135 + $iFormat * 85, 30)
Local $hWnd = GUICtrlGetHandle($idDate)
GUICtrlSetFont(-1, 14, 400, 0, 'Verdana', 5)
If $iFormat Then
Local $DTM_SETFORMAT_ = 0x1032
Local $sFormat = 'dd.MM.yyyy HH:mm:ss'
GUICtrlSendMsg($idDate, $DTM_SETFORMAT_, 0, $sFormat)
Else
GUICtrlSetStyle($idDate, 0)
EndIf
GUICtrlCreateGroup('', -99, -99, 1, 1)
Local $idOk = GUICtrlCreateButton('Ok', 60 + $iFormat * 85, 100, 60, 25, 1) ; <- Value 1 = $BS_DEFPUSHBUTTON
Local $idCancel = GUICtrlCreateButton('Abbrechen', 130 + $iFormat * 85, 100, 80, 25)
GUISetState(@SW_SHOW, $hGui)
While True
Switch GUIGetMsg()
Case $idCancel, -3 ; <- Value -3 = $GUI_EVENT_CLOSE
$iError = 1
ExitLoop
Case $idOk
$sRetDate = StringRegExpReplace(GUICtrlRead($idDate), '(\d{2})\.(\d{2})\.(\d{4}).*', '$3/$2/$1')
If $iFormat Then
$sRetDate &= StringRegExpReplace(GUICtrlRead($idDate), '\d{2}\.\d{2}\.\d{4} (\d{2}):(\d{2}):(\d{2})', ' $1:$2:$3')
Else
$sRetDate &= ' 00:00:00'
EndIf
ExitLoop
EndSwitch
WEnd
GUIDelete($hGui)
Opt('GUIOnEventMode', $iOnEventMode)
Return SetError($iError, 0, $sRetDate)
EndFunc ;==>_InputDateBox