[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.

    Der Inhalt kann nicht angezeigt werden, da er nicht mehr verfügbar ist.
    Der Inhalt kann nicht angezeigt werden, da er nicht mehr verfügbar ist.
    Der Inhalt kann nicht angezeigt werden, da er nicht mehr verfügbar ist.

    • 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...

    ¯\_(ツ)_/¯