Zufälliger GDI+ Guibackground

  • Hey Leute,
    mir war in letzter Zeit langweilig da hab ich mal ein Programm geschrieben das automatisch einen zufälligen GUI-Hintergrund erstellt.
    hoffe es gefällt euch:

    Spoiler anzeigen
    [autoit]

    #include <GuiConstantsEx.au3>
    #include <GDIPlus.au3>
    #include <WinAPI.au3>
    _GDIPlus_Startup()
    $GuiHeight = 600
    $GuiWidth = 800
    Dim $verhackung[2]
    $verhackung[0] = False
    $verhackung[1] = False
    $hwnd = GUICreate("random background", $GuiWidth, $GuiHeight)
    GUISetState(@SW_SHOW)
    $hBuffer = _GDIPlus_GraphicsCreateFromHWND($hwnd)
    $hBitmap = _GDIPlus_BitmapCreateFromGraphics($GuiWidth, $GuiHeight, $hBuffer)
    $hGraphics = _GDIPlus_ImageGetGraphicsContext($hBitmap)
    SRandom(@HOUR * 10 + @MIN * 1000 + @SEC * 100000)
    $Kastels = Random(3, 10, 1); Anzahl Kästchen
    Dim $Pos[$Kastels][7]
    For $i = 0 To $Kastels - 1 Step +1
    $Pos[$i][0] = Random(0, $GuiWidth / $Kastels + Random(0, 0, 1), 1); edit second random for smaller kastels
    $Pos[$i][1] = Random(0, $GuiHeight / ($Kastels - 2) + Random(0, 0, 1), 1); edit second random for smaller kastels
    $Pos[$i][2] = Random(10, 600, 1)
    $Pos[$i][3] = Random(10, 400, 1)
    Do
    If $Pos[$i][0] + $Pos[$i][2] > $GuiWidth Then
    $Pos[$i][0] -= 10
    $verhackung[0] = True
    EndIf
    If $Pos[$i][1] + $Pos[$i][3] > $GuiHeight Then
    $Pos[$i][1] -= 10
    $verhackung[1] = True
    EndIf
    If $Pos[$i][0]< $GuiWidth Then
    $Pos[$i][0] += 10
    $verhackung[0] = True
    EndIf
    If $Pos[$i][1]< $GuiHeight Then
    $Pos[$i][1] += 10
    $verhackung[1] = True
    EndIf
    Until $verhackung[0] and $verhackung[1]

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

    Next
    For $i = 0 To $Kastels - 1 Step +1
    $String = String("0x" & Hex(Random(30000000, 99999999, 1), 2) & Hex(Random(10000000, 99999999, 1), 6)); zufällige Farben und Alpha Werte
    $Pos[$i][4] = _GDIPlus_BrushCreateSolid($String)

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

    If @error Then
    ConsoleWriteError("Fatal Brush Error!")
    EndIf
    $Pos[$i][5] = Random(1, 3, 1)
    $Pos[$i][6] = Random(-5, 5, 1)
    Next
    $back = String("0x" & Hex(Random(30000000, 99999999, 1), 2) & Hex(Random(10000000, 99999999, 1), 6))
    Do
    _GDIPlus_GraphicsClear($hGraphics,$back )
    For $i = 0 To $Kastels - 1 Step +1
    _GDIPlus_GraphicsFillRect($hGraphics, $Pos[$i][0], $Pos[$i][1], $Pos[$i][2], $Pos[$i][3], $Pos[$i][4])
    ConsoleWrite(@CRLF & "-----------------------------------------------" & @CRLF & $Pos[$i][0] & @CRLF & $Pos[$i][1] & @CRLF & $Pos[$i][2] & @CRLF & $Pos[$i][3])
    Next
    For $i = 0 To $Kastels - 1 Step +1
    If $Pos[$i][0] + $Pos[$i][2] > $GuiWidth Or $Pos[$i][0] < 0 Then
    $Pos[$i][5] -= $Pos[$i][5] * 2
    EndIf
    If $Pos[$i][1] + $Pos[$i][3] > $GuiHeight Or $Pos[$i][1] < 0 Then
    $Pos[$i][6] -= $Pos[$i][6] * 2
    EndIf
    $Pos[$i][0] += $Pos[$i][5]
    If Random(0, 4, 1) = 1 Then
    $Pos[$i][1] += $Pos[$i][6]
    EndIf

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

    Next
    _GDIPlus_GraphicsDrawImageRect($hBuffer, $hBitmap, 0, 0, $GuiWidth, $GuiHeight)

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

    Until GUIGetMsg() = $GUI_EVENT_CLOSE
    For $i = 0 to $Kastels-1 step +1
    _GDIPlus_BrushDispose($Pos[$i][4])
    Next
    _GDIPlus_Shutdown()

    [/autoit]
    Meine Werke


    EasyScreen (teilweise Crocoframe): <EasyScreen>
    Spotify2Title: <Spotify2Title> (zur Info, dies ist KEIN Spotify-Downloader! Wer das dachte... :rofl: sowas gibts hier nicht :thumbdown: )

  • Du solltest noch den Buffer die Graphic, und die Bitmap disposen.
    Noch ein Hinweis, Mit _GDIPlus_GraphicsCreateFromHWND() erstellt man die Grafik, und mit _GDIPlus_ImageGetGraphicsContext() den Buffer, wie du die Variablen nennst ist aber eigentlich egal. ;)

    Aber ansonsten sieht es wirklich schön aus. :)

  • Echt???
    Ich hab mir immer ein paar Beispiele aus der Hilfe genommen und umgeschrieben bis ich GDI+ konnte.
    Das Tutorial hab ich mir nie angeguckt. Ich finde GDI+ zu lernen ist nicht sooo schwer wie alle sagen. Du brauchst dafür allerdings Autoit
    Grundkenntnisse bei etlichen Theme. Ich werde es noch ein wenig überarbeite, da noch Fehler vorkommen, was euch bestimmt schon aufgefallen ist
    (z.B. wenn sich ein Quadrat an der unteren oder rechten Kante verkantet und nicht loskommt)
    Ich werde auchnoch Kreise und andere Formen einbauen.

    Meine Werke


    EasyScreen (teilweise Crocoframe): <EasyScreen>
    Spotify2Title: <Spotify2Title> (zur Info, dies ist KEIN Spotify-Downloader! Wer das dachte... :rofl: sowas gibts hier nicht :thumbdown: )

  • Zitat

    Ich finde GDI+ zu lernen ist nicht sooo schwer wie alle sagen


    ist es auch nicht
    nur dann wollen manche gleich mit gdi+ sowas wie spiele proggen und dan kommt ihnen gdi+ schwer vor weil sie es von der mathematik nich schaffen

  • Sieht gut aus

    das einzige problem ist die darstellung von gui elementen
    ich habe vorhin zum testen einen button ersetellt
    grundsätlich erscheint er nicht, wenn ich über seine position fahre , erscheint er und flackert andauernd, wenn ich die maus dann wieder weg fahre , dann verschwindet der button wieder

  • Das mit den GUI-Elementen kann ich nicht ändern.
    Da werdet ihr wohl mit GDI+ Arbeiten müssen.
    Habe Das Script noch erweiter. Jetzt gibt es Kästchen, Kreise und sogar Smileys :)
    Hoffe es gefällt euch noch, denn ich habe festgestellt, dass durch irgendeinen peinlichen Fehler ein Effekt erscheint, der alles verschwimmen lässt.
    Mir gefällt der Fehler allerdings.
    Datei im Anhang