Moin,
ich hab ja schon lange nichts mehr mit AutoIt gemacht.
Deshalb hab ich ein kleines GDI+ Skript geschrieben, um mich mal wieder einzuarbeiten.
Das ist ein "Falling Code".
Während dem Skript, kann man durch drücken der 'c'-Taste die Farbe ändern.
Spoiler anzeigen
#include <GDIPlus.au3>
#include <GUIConstants.au3>
#include <Misc.au3>
#include <Color.au3>
Opt("GuiOnEventMode", 1)
[/autoit] [autoit][/autoit] [autoit]Dim $color=0x00FF00
Dim $number=55
Dim $iGUIHeight = 500
Dim $iGUIWidth = 500
Dim $timerInit, $fps=30
Dim $nX[$number], $nY[$number]
[/autoit] [autoit][/autoit] [autoit]Dim $hGUI = GUICreate("Falling Code by clezZ (c) 2011", $iGUIWidth, $iGUIHeight, -1, -1)
GUISetState()
WinSetTrans($hGUI,"",0xFF)
GUISetOnEvent($GUI_EVENT_CLOSE, "_Exit")
[/autoit] [autoit][/autoit] [autoit]_GDIPlus_Startup()
[/autoit] [autoit][/autoit] [autoit]Dim $hGraphics = _GDIPlus_GraphicsCreateFromHWND($hGUI)
Dim $hBitmap = _GDIPlus_BitmapCreateFromGraphics($iGUIWidth, $iGUIHeight, $hGraphics)
Dim $hBuffer = _GDIPlus_ImageGetGraphicsContext($hBitmap)
_GDIPlus_GraphicsSetSmoothingMode($hBuffer, 2)
Dim $hBrush_FFFFFF = _GDIPlus_BrushCreateSolid(0xFFFFFFFF)
Dim $hBrush_00FF00 = _GDIPlus_BrushCreateSolid('0xFF'&Hex(_ColorGetRed($color), 2)&Hex(_ColorGetGreen($color), 2)&Hex(_ColorGetBlue($color), 2))
_GDIPlus_GraphicsClear($hBuffer, 0xFF000000)
[/autoit] [autoit][/autoit] [autoit]Dim $sString, $nSize=8
[/autoit] [autoit][/autoit] [autoit]For $i=0 To $number-1
$nX[$i]=Random($nSize, 500-$nSize, 1)
$nY[$i]=Random($nSize, 500-$nSize, 1)*-1
Next
Dim $hFormat = _GDIPlus_StringFormatCreate(0)
Dim $hFamily = _GDIPlus_FontFamilyCreate("Arial")
Dim $hFont = _GDIPlus_FontCreate($hFamily, $nSize)
Dim $hFamily2 = _GDIPlus_FontFamilyCreate("Arial Black")
Dim $hFont2 = _GDIPlus_FontCreate($hFamily2, $nSize+($nSize/10))
_WM_PAINT()
[/autoit] [autoit][/autoit] [autoit]HotKeySet("c", "_color")
[/autoit] [autoit][/autoit] [autoit]While 1
_Draw()
WEnd
Func _Draw()
$timerInit=TimerInit()
_GDIPlus_GraphicsClear($hBuffer, '0x'&Hex(35)&'000000')
For $i=0 To $number-1
$sString=Chr(Random(48, 57, 1))
$nY[$i]+=($nSize+3)
$tLayout2 = _GDIPlus_RectFCreate($nX[$i]-(1.5*($nSize/10)), $nY[$i]-($nSize/3.3), 0, 0)
$aInfo2 = _GDIPlus_GraphicsMeasureString($hBuffer, $sString, $hFont2, $tLayout2, $hFormat)
$pLayout = DllStructGetPtr($tLayout2)
$aResult = DllCall($ghGDIPDll, "int", "GdipDrawString", "handle", $hBuffer, "wstr", $sString, "int", -1, "handle", $hFont2, "ptr", $pLayout, "handle", $hFormat, "handle", $hBrush_00FF00)
$tLayout = _GDIPlus_RectFCreate($nX[$i], $nY[$i], 0, 0)
$aInfo = _GDIPlus_GraphicsMeasureString($hBuffer, $sString, $hFont, $tLayout, $hFormat)
$pLayout = DllStructGetPtr($tLayout)
If $nY[$i] >500 Then
$nY[$i]=$nY[$i]-500-2*$nSize
$nX[$i]=Random($nSize, 500-$nSize, 1)
EndIf
$aResult = DllCall($ghGDIPDll, "int", "GdipDrawString", "handle", $hBuffer, "wstr", $sString, "int", -1, "handle", $hFont, "ptr", $pLayout, "handle", $hFormat, "handle", $hBrush_FFFFFF)
Next
Sleep(1000/$fps-TimerDiff($timerInit))
_WM_PAINT()
EndFunc
Func _color()
Dim $color=_ChooseColor(2, $color)
Dim $hBrush_00FF00 = _GDIPlus_BrushCreateSolid('0xFF'&Hex(_ColorGetRed($color), 2)&Hex(_ColorGetGreen($color), 2)&Hex(_ColorGetBlue($color), 2))
EndFunc
Func _Exit()
_GDIPlus_FontDispose($hFont)
_GDIPlus_FontFamilyDispose($hFamily)
_GDIPlus_StringFormatDispose($hFormat)
_GDIPlus_FontDispose($hFont2)
_GDIPlus_FontFamilyDispose($hFamily2)
_GDIPlus_BrushDispose($hBrush_00FF00)
_GDIPlus_BrushDispose($hBrush_FFFFFF)
_GDIPlus_GraphicsDispose($hBuffer)
_GDIPlus_BitmapDispose($hBitmap)
_GDIPlus_GraphicsDispose($hGraphics)
_GDIPlus_Shutdown()
Exit
EndFunc
Func _WM_PAINT()
_GDIPlus_GraphicsDrawImageRect($hGraphics, $hBitmap, 0, 0, $iGUIWidth, $iGUIHeight)
EndFunc
Wer will, kann sich diese Schrift downloaden und installieren: http://www.myfont.de/fonts/infos/631-Matrix-Code.html
Dafür hab ich hier das Skript angepasst:
Spoiler anzeigen
#include <GDIPlus.au3>
#include <GUIConstants.au3>
#include <Misc.au3>
#include <Color.au3>
Opt("GuiOnEventMode", 1)
[/autoit] [autoit][/autoit] [autoit]Dim $color=0x00FF00
Dim $number=50
Dim $iGUIHeight = 500
Dim $iGUIWidth = 500
Dim $timerInit, $fps=30
Dim $nX[$number], $nY[$number]
[/autoit] [autoit][/autoit] [autoit]Dim $hGUI = GUICreate("Falling Code by clezZ (c) 2011", $iGUIWidth, $iGUIHeight, -1, -1)
GUISetState()
WinSetTrans($hGUI,"",0xFF)
GUISetOnEvent($GUI_EVENT_CLOSE, "_Exit")
[/autoit] [autoit][/autoit] [autoit]_GDIPlus_Startup()
[/autoit] [autoit][/autoit] [autoit]Dim $hGraphics = _GDIPlus_GraphicsCreateFromHWND($hGUI)
Dim $hBitmap = _GDIPlus_BitmapCreateFromGraphics($iGUIWidth, $iGUIHeight, $hGraphics)
Dim $hBuffer = _GDIPlus_ImageGetGraphicsContext($hBitmap)
_GDIPlus_GraphicsSetSmoothingMode($hBuffer, 2)
Dim $hBrush_FFFFFF = _GDIPlus_BrushCreateSolid(0xFFFFFFFF)
Dim $hBrush_00FF00 = _GDIPlus_BrushCreateSolid('0xFF'&Hex(_ColorGetRed($color), 2)&Hex(_ColorGetGreen($color), 2)&Hex(_ColorGetBlue($color), 2))
_GDIPlus_GraphicsClear($hBuffer, 0xFF000000)
[/autoit] [autoit][/autoit] [autoit]Dim $sString, $nSize=11
[/autoit] [autoit][/autoit] [autoit]For $i=0 To $number-1
$nX[$i]=Random($nSize, 500-$nSize, 1)
$nY[$i]=Random($nSize, 500-$nSize, 1)*-1
Next
Dim $hFormat = _GDIPlus_StringFormatCreate(0)
Dim $hFamily = _GDIPlus_FontFamilyCreate("Matrix Code NFI")
Dim $hFont = _GDIPlus_FontCreate($hFamily, $nSize)
Dim $hFamily2 = _GDIPlus_FontFamilyCreate("Matrix Code NFI")
Dim $hFont2 = _GDIPlus_FontCreate($hFamily2, $nSize+2, 1)
_WM_PAINT()
[/autoit] [autoit][/autoit] [autoit]HotKeySet("c", "_color")
[/autoit] [autoit][/autoit] [autoit]While 1
_Draw()
WEnd
Func _Draw()
$timerInit=TimerInit()
_GDIPlus_GraphicsClear($hBuffer, '0x'&Hex(35)&'000000')
For $i=0 To $number-1
$sString=Chr(Random(97, 122, 1))
$nY[$i]+=($nSize+3)
$tLayout2 = _GDIPlus_RectFCreate($nX[$i]-1.5, $nY[$i]-1, 0, 0)
$aInfo2 = _GDIPlus_GraphicsMeasureString($hBuffer, $sString, $hFont2, $tLayout2, $hFormat)
$pLayout = DllStructGetPtr($tLayout2)
$aResult = DllCall($ghGDIPDll, "int", "GdipDrawString", "handle", $hBuffer, "wstr", $sString, "int", -1, "handle", $hFont2, "ptr", $pLayout, "handle", $hFormat, "handle", $hBrush_00FF00)
$tLayout = _GDIPlus_RectFCreate($nX[$i], $nY[$i], 0, 0)
$aInfo = _GDIPlus_GraphicsMeasureString($hBuffer, $sString, $hFont, $tLayout, $hFormat)
$pLayout = DllStructGetPtr($tLayout)
If $nY[$i] >500 Then
$nY[$i]=$nY[$i]-500-2*$nSize
$nX[$i]=Random($nSize, 500-$nSize, 1)
EndIf
$aResult = DllCall($ghGDIPDll, "int", "GdipDrawString", "handle", $hBuffer, "wstr", $sString, "int", -1, "handle", $hFont, "ptr", $pLayout, "handle", $hFormat, "handle", $hBrush_FFFFFF)
Next
Sleep(1000/$fps-TimerDiff($timerInit))
_WM_PAINT()
EndFunc
Func _color()
Dim $color=_ChooseColor(2, $color)
Dim $hBrush_00FF00 = _GDIPlus_BrushCreateSolid('0xFF'&Hex(_ColorGetRed($color), 2)&Hex(_ColorGetGreen($color), 2)&Hex(_ColorGetBlue($color), 2))
EndFunc
Func _Exit()
_GDIPlus_FontDispose($hFont)
_GDIPlus_FontFamilyDispose($hFamily)
_GDIPlus_StringFormatDispose($hFormat)
_GDIPlus_FontDispose($hFont2)
_GDIPlus_FontFamilyDispose($hFamily2)
_GDIPlus_BrushDispose($hBrush_00FF00)
_GDIPlus_BrushDispose($hBrush_FFFFFF)
_GDIPlus_GraphicsDispose($hBuffer)
_GDIPlus_BitmapDispose($hBitmap)
_GDIPlus_GraphicsDispose($hGraphics)
_GDIPlus_Shutdown()
Exit
EndFunc
Func _WM_PAINT()
_GDIPlus_GraphicsDrawImageRect($hGraphics, $hBitmap, 0, 0, $iGUIWidth, $iGUIHeight)
EndFunc
Im Anhang befindet sich eine erweiterte Version, die ich mit Hilfe der MemFont.au3 von eukalyptus erstellt habe.
Vielen Dank dafür an eukalyptus.