[GDI+] Falling Code

  • 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
    [autoit]


    #include <GDIPlus.au3>
    #include <GUIConstants.au3>
    #include <Misc.au3>
    #include <Color.au3>

    [/autoit] [autoit][/autoit] [autoit]

    Opt("GuiOnEventMode", 1)

    [/autoit] [autoit][/autoit] [autoit]

    Dim $color=0x00FF00
    Dim $number=55
    Dim $iGUIHeight = 500
    Dim $iGUIWidth = 500
    Dim $timerInit, $fps=30

    [/autoit] [autoit][/autoit] [autoit]

    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)

    [/autoit] [autoit][/autoit] [autoit]

    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))

    [/autoit] [autoit][/autoit] [autoit]

    _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

    [/autoit] [autoit][/autoit] [autoit]

    Dim $hFormat = _GDIPlus_StringFormatCreate(0)
    Dim $hFamily = _GDIPlus_FontFamilyCreate("Arial")
    Dim $hFont = _GDIPlus_FontCreate($hFamily, $nSize)

    [/autoit] [autoit][/autoit] [autoit]

    Dim $hFamily2 = _GDIPlus_FontFamilyCreate("Arial Black")
    Dim $hFont2 = _GDIPlus_FontCreate($hFamily2, $nSize+($nSize/10))

    [/autoit] [autoit][/autoit] [autoit]

    _WM_PAINT()

    [/autoit] [autoit][/autoit] [autoit]

    HotKeySet("c", "_color")

    [/autoit] [autoit][/autoit] [autoit]

    While 1
    _Draw()
    WEnd

    [/autoit] [autoit][/autoit] [autoit]

    Func _Draw()
    $timerInit=TimerInit()
    _GDIPlus_GraphicsClear($hBuffer, '0x'&Hex(35)&'000000')

    [/autoit] [autoit][/autoit] [autoit]

    For $i=0 To $number-1
    $sString=Chr(Random(48, 57, 1))
    $nY[$i]+=($nSize+3)

    [/autoit] [autoit][/autoit] [autoit]

    $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)

    [/autoit] [autoit][/autoit] [autoit]

    $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

    [/autoit] [autoit][/autoit] [autoit]

    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

    [/autoit] [autoit][/autoit] [autoit]

    Func _Exit()
    _GDIPlus_FontDispose($hFont)
    _GDIPlus_FontFamilyDispose($hFamily)
    _GDIPlus_StringFormatDispose($hFormat)
    _GDIPlus_FontDispose($hFont2)
    _GDIPlus_FontFamilyDispose($hFamily2)

    [/autoit] [autoit][/autoit] [autoit]

    _GDIPlus_BrushDispose($hBrush_00FF00)
    _GDIPlus_BrushDispose($hBrush_FFFFFF)
    _GDIPlus_GraphicsDispose($hBuffer)
    _GDIPlus_BitmapDispose($hBitmap)
    _GDIPlus_GraphicsDispose($hGraphics)
    _GDIPlus_Shutdown()
    Exit
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    Func _WM_PAINT()
    _GDIPlus_GraphicsDrawImageRect($hGraphics, $hBitmap, 0, 0, $iGUIWidth, $iGUIHeight)
    EndFunc

    [/autoit]


    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
    [autoit]


    #include <GDIPlus.au3>
    #include <GUIConstants.au3>
    #include <Misc.au3>
    #include <Color.au3>

    [/autoit] [autoit][/autoit] [autoit]

    Opt("GuiOnEventMode", 1)

    [/autoit] [autoit][/autoit] [autoit]

    Dim $color=0x00FF00
    Dim $number=50
    Dim $iGUIHeight = 500
    Dim $iGUIWidth = 500
    Dim $timerInit, $fps=30

    [/autoit] [autoit][/autoit] [autoit]

    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)

    [/autoit] [autoit][/autoit] [autoit]

    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))

    [/autoit] [autoit][/autoit] [autoit]

    _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

    [/autoit] [autoit][/autoit] [autoit]

    Dim $hFormat = _GDIPlus_StringFormatCreate(0)
    Dim $hFamily = _GDIPlus_FontFamilyCreate("Matrix Code NFI")
    Dim $hFont = _GDIPlus_FontCreate($hFamily, $nSize)

    [/autoit] [autoit][/autoit] [autoit]

    Dim $hFamily2 = _GDIPlus_FontFamilyCreate("Matrix Code NFI")
    Dim $hFont2 = _GDIPlus_FontCreate($hFamily2, $nSize+2, 1)

    [/autoit] [autoit][/autoit] [autoit]

    _WM_PAINT()

    [/autoit] [autoit][/autoit] [autoit]

    HotKeySet("c", "_color")

    [/autoit] [autoit][/autoit] [autoit]

    While 1
    _Draw()
    WEnd

    [/autoit] [autoit][/autoit] [autoit]

    Func _Draw()
    $timerInit=TimerInit()
    _GDIPlus_GraphicsClear($hBuffer, '0x'&Hex(35)&'000000')

    [/autoit] [autoit][/autoit] [autoit]

    For $i=0 To $number-1
    $sString=Chr(Random(97, 122, 1))
    $nY[$i]+=($nSize+3)

    [/autoit] [autoit][/autoit] [autoit]

    $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)

    [/autoit] [autoit][/autoit] [autoit]

    $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

    [/autoit] [autoit][/autoit] [autoit]

    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

    [/autoit] [autoit][/autoit] [autoit]

    Func _Exit()
    _GDIPlus_FontDispose($hFont)
    _GDIPlus_FontFamilyDispose($hFamily)
    _GDIPlus_StringFormatDispose($hFormat)
    _GDIPlus_FontDispose($hFont2)
    _GDIPlus_FontFamilyDispose($hFamily2)

    [/autoit] [autoit][/autoit] [autoit]

    _GDIPlus_BrushDispose($hBrush_00FF00)
    _GDIPlus_BrushDispose($hBrush_FFFFFF)
    _GDIPlus_GraphicsDispose($hBuffer)
    _GDIPlus_BitmapDispose($hBitmap)
    _GDIPlus_GraphicsDispose($hGraphics)
    _GDIPlus_Shutdown()
    Exit
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    Func _WM_PAINT()
    _GDIPlus_GraphicsDrawImageRect($hGraphics, $hBitmap, 0, 0, $iGUIWidth, $iGUIHeight)
    EndFunc

    [/autoit]

    Im Anhang befindet sich eine erweiterte Version, die ich mit Hilfe der MemFont.au3 von eukalyptus erstellt habe.
    Vielen Dank dafür an eukalyptus.

    autoit.de/wcf/attachment/14254/autoit.de/wcf/attachment/14255/autoit.de/wcf/attachment/14256/

    • Offizieller Beitrag

    Heyho,

    Sehr Hübsch :) Ich bin vor allem verwundert wie wenig Quellcode man braucht ;)
    Habs mal etwas angepasst, gab Probleme wenn man die größe Verändern wollte ;)

    Spoiler anzeigen
    [autoit]

    #include <Color.au3>
    #include <GDIPlus.au3>
    #include <GUIConstantsEx.au3>
    #include <Misc.au3>
    #include <WindowsConstants.au3>

    [/autoit] [autoit][/autoit] [autoit]

    Opt("GuiOnEventMode", 1)

    [/autoit] [autoit][/autoit] [autoit]

    Dim $color = 0x00FF00
    Dim $number = 50
    Dim $iGUIHeight = @DesktopHeight
    Dim $iGUIWidth = @DesktopWidth
    Dim $sFPS = 25;Bilder/Sekunde, je höher desto schneller

    [/autoit] [autoit][/autoit] [autoit]

    Dim $nX[$number], $nY[$number]

    [/autoit] [autoit][/autoit] [autoit]

    Dim $hGUI = GUICreate("Falling Code by clezZ (c) 2011", $iGUIWidth, $iGUIHeight, 0, 0, $WS_POPUP)
    GUISetState()
    WinSetTrans($hGUI, "", 0xFF)

    [/autoit] [autoit][/autoit] [autoit]

    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))

    [/autoit] [autoit][/autoit] [autoit]

    _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, $iGUIWidth - $nSize, 1)
    $nY[$i] = Random($nSize, $iGUIHeight - $nSize, 1)
    Next

    [/autoit] [autoit][/autoit] [autoit]

    Dim $hFormat = _GDIPlus_StringFormatCreate(0)
    Dim $hFamily = _GDIPlus_FontFamilyCreate("Arial")
    Dim $hFont = _GDIPlus_FontCreate($hFamily, $nSize)

    [/autoit] [autoit][/autoit] [autoit]

    Dim $hFamily2 = _GDIPlus_FontFamilyCreate("Arial Black")
    Dim $hFont2 = _GDIPlus_FontCreate($hFamily2, $nSize + ($nSize / 10))

    [/autoit] [autoit][/autoit] [autoit]

    _WM_PAINT()

    [/autoit] [autoit][/autoit] [autoit]

    HotKeySet("c", "_color")

    [/autoit] [autoit][/autoit] [autoit]

    While 1
    $hTi = TimerInit()
    _Draw()
    Sleep(1000 / $sFPS - TimerDiff($hTi))
    WEnd

    [/autoit] [autoit][/autoit] [autoit]

    Func _Draw()
    _GDIPlus_GraphicsClear($hBuffer, '0x' & Hex(35) & '000000')

    [/autoit] [autoit][/autoit] [autoit]

    For $i = 0 To $number - 1
    $sString = Chr(Random(48, 57, 1))
    $nY[$i] += $nSize + 3

    [/autoit] [autoit][/autoit] [autoit]

    $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)

    [/autoit] [autoit][/autoit] [autoit]

    $tLayout = _GDIPlus_RectFCreate($nX[$i], $nY[$i], 0, 0)
    $aInfo = _GDIPlus_GraphicsMeasureString($hBuffer, $sString, $hFont, $tLayout, $hFormat)
    $pLayout = DllStructGetPtr($tLayout)
    If $nY[$i] > $iGUIHeight Then
    $nY[$i] = $nY[$i] - $iGUIHeight - 2 * $nSize
    $nX[$i] = Random($nSize, $iGUIWidth - $nSize, 1)
    EndIf
    $aResult = DllCall($ghGDIPDll, "int", "GdipDrawString", "handle", $hBuffer, "wstr", $sString, "int", -1, "handle", $hFont, "ptr", $pLayout, "handle", $hFormat, "handle", $hBrush_FFFFFF)
    Next
    _WM_PAINT()
    EndFunc ;==>_Draw

    [/autoit] [autoit][/autoit] [autoit]

    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 ;==>_color

    [/autoit] [autoit][/autoit] [autoit]

    Func _Exit()
    _GDIPlus_FontDispose($hFont)
    _GDIPlus_FontFamilyDispose($hFamily)
    _GDIPlus_StringFormatDispose($hFormat)
    _GDIPlus_FontDispose($hFont2)
    _GDIPlus_FontFamilyDispose($hFamily2)

    [/autoit] [autoit][/autoit] [autoit]

    _GDIPlus_BrushDispose($hBrush_00FF00)
    _GDIPlus_BrushDispose($hBrush_FFFFFF)
    _GDIPlus_GraphicsDispose($hBuffer)
    _GDIPlus_BitmapDispose($hBitmap)
    _GDIPlus_GraphicsDispose($hGraphics)
    _GDIPlus_Shutdown()
    Exit
    EndFunc ;==>_Exit

    [/autoit] [autoit][/autoit] [autoit]

    Func _WM_PAINT()
    _GDIPlus_GraphicsDrawImageRect($hGraphics, $hBitmap, 0, 0, $iGUIWidth, $iGUIHeight)
    EndFunc ;==>_WM_PAINT

    [/autoit]

    Gruß,
    Spider

  • Ist ganz nett geworden - Matrix Like!

    Ich würde irgend eine japanische Schrift verwenden, damit es näher an der Matrix ist...

    Gruß,
    UEZ

    Auch am Arsch geht ein Weg vorbei...

    ¯\_(ツ)_/¯

  • Ja, hab ich mir auch gedacht, aber ich wollte eine Schrift verwenden, die eigentlich jeder auf seinem Rechner hat und nicht eine spezielle Matrix Schrift.

    //Habs oben hinzu gefügt. ;)

  • Oder du lädst einfach den Font ohne ihn zu installieren:

    Spoiler anzeigen
    [autoit]


    #include <Color.au3>
    #include <GDIPlus.au3>
    #include <GUIConstantsEx.au3>
    #include <Misc.au3>
    #include <WindowsConstants.au3>

    [/autoit] [autoit][/autoit] [autoit]

    Opt("GuiOnEventMode", 1)

    [/autoit] [autoit][/autoit] [autoit]

    Global $color = 0x00FF00
    Global $number = 100
    Global $iGUIHeight = @DesktopHeight
    Global $iGUIWidth = @DesktopWidth
    Global $sFPS = 15 ;Bilder/Sekunde, je höher desto schneller

    [/autoit] [autoit][/autoit] [autoit]

    Global $nX[$number], $nY[$number]

    [/autoit] [autoit][/autoit] [autoit]

    Global $hGUI = GUICreate("Falling Code by clezZ (c) 2011", $iGUIWidth, $iGUIHeight, 0, 0, $WS_POPUP)
    GUISetState()
    WinSetTrans($hGUI, "", 0xFF)

    [/autoit] [autoit][/autoit] [autoit]

    GUISetOnEvent($GUI_EVENT_CLOSE, "_Exit")

    [/autoit] [autoit][/autoit] [autoit]

    _GDIPlus_Startup()

    [/autoit] [autoit][/autoit] [autoit]

    Global $hGraphics = _GDIPlus_GraphicsCreateFromHWND($hGUI)
    Global $hBitmap = _GDIPlus_BitmapCreateFromGraphics($iGUIWidth, $iGUIHeight, $hGraphics)
    Global $hBuffer = _GDIPlus_ImageGetGraphicsContext($hBitmap)

    [/autoit] [autoit][/autoit] [autoit]

    _GDIPlus_GraphicsSetSmoothingMode($hBuffer, 2)
    DllCall($ghGDIPDll, "uint", "GdipSetTextRenderingHint", "handle", $hBuffer, "int", 4)
    Global $hBrush = _GDIPlus_BrushCreateSolid(0xFF00FF00)

    [/autoit] [autoit][/autoit] [autoit]

    _GDIPlus_GraphicsClear($hBuffer, 0xFF000000)

    [/autoit] [autoit][/autoit] [autoit]

    Global $hTi, $chr, $tLayout, $aInfo, $pLayout, $aResult, $aChr[2]
    Global $sString, $nSize = 24

    [/autoit] [autoit][/autoit] [autoit]

    For $i = 0 To $number - 1
    $nX[$i] = Random($nSize, $iGUIWidth - $nSize, 1)
    $nY[$i] = Random($nSize, $iGUIHeight - $nSize, 1)
    Next

    [/autoit] [autoit][/autoit] [autoit]

    Global $font = @ScriptDir & "\matrix code nfi.ttf"
    Global $fontname = "Matrix Code NFI"
    Global $hFormat = _GDIPlus_StringFormatCreate(0)
    Global $hCollection = DllCall($ghGDIPDll, 'int', 'GdipNewPrivateFontCollection', 'ptr*', 0)
    $hCollection = $hCollection[1]
    DllCall($ghGDIPDll, 'int', 'GdipPrivateAddFontFile', 'ptr', $hCollection, 'wstr', $font)
    Global $hFamily = DllCall($ghGDIPDll, 'int', 'GdipCreateFontFamilyFromName', 'wstr', $fontname, 'ptr', $hCollection, 'int*', 0)
    $hFamily = $hFamily[3]
    Global $hFont = _GDIPlus_FontCreate($hFamily, $nSize, 1)

    [/autoit] [autoit][/autoit] [autoit]

    _GDIPlus_GraphicsDrawImageRect($hGraphics, $hBitmap, 0, 0, $iGUIWidth, $iGUIHeight)

    [/autoit] [autoit][/autoit] [autoit]

    HotKeySet("c", "_color")

    [/autoit] [autoit][/autoit] [autoit]

    While 1
    $hTi = TimerInit()
    _Draw()
    Sleep(1000 / $sFPS - TimerDiff($hTi))
    WEnd

    [/autoit] [autoit][/autoit] [autoit]

    Func _Draw()
    _GDIPlus_GraphicsClear($hBuffer, 0x35000000)
    For $i = 0 To $number - 1
    $aChr[0] = Random(33, 63, 1)
    $aChr[1] = Random(90, 127, 1)
    $sString = Chr($aChr[Random(0, 1, 1)])
    $nY[$i] += $nSize + 3

    [/autoit] [autoit][/autoit] [autoit]

    $tLayout = _GDIPlus_RectFCreate($nX[$i], $nY[$i], 0, 0)
    $aInfo = _GDIPlus_GraphicsMeasureString($hBuffer, $sString, $hFont, $tLayout, $hFormat)
    $pLayout = DllStructGetPtr($tLayout)
    If $nY[$i] > $iGUIHeight Then
    $nY[$i] = $nY[$i] - $iGUIHeight - 2 * $nSize
    $nX[$i] = Random($nSize, $iGUIWidth - $nSize, 1)
    EndIf
    $aResult = DllCall($ghGDIPDll, "int", "GdipDrawString", "handle", $hBuffer, "wstr", $sString, "int", -1, "handle", $hFont, "ptr", $pLayout, "handle", $hFormat, "handle", $hBrush)
    Next
    _GDIPlus_GraphicsDrawImageRect($hGraphics, $hBitmap, 0, 0, $iGUIWidth, $iGUIHeight)
    EndFunc ;==>_Draw

    [/autoit] [autoit][/autoit] [autoit]

    Func _color()
    $color = _ChooseColor(2, $color)
    _GDIPlus_BrushSetSolidColor($hBrush, '0xFF' & Hex(_ColorGetRed($color), 2) & Hex(_ColorGetGreen($color), 2) & Hex(_ColorGetBlue($color), 2))
    EndFunc ;==>_color

    [/autoit] [autoit][/autoit] [autoit]

    Func _Exit()
    _GDIPlus_FontDispose($hFont)
    _GDIPlus_FontFamilyDispose($hFamily)
    _GDIPlus_StringFormatDispose($hFormat)
    _GDIPlus_BrushDispose($hBrush)
    _GDIPlus_GraphicsDispose($hBuffer)
    _GDIPlus_BitmapDispose($hBitmap)
    _GDIPlus_GraphicsDispose($hGraphics)
    _GDIPlus_Shutdown()
    Exit
    EndFunc ;==>_Exit

    [/autoit]

    Gruß,
    UEZ

    Auch am Arsch geht ein Weg vorbei...

    ¯\_(ツ)_/¯