GDI+: Rotating Letters

  • Hier ein weiteres, sinnloses Skript:


    Spoiler anzeigen
    [autoit]


    ;coded by UEZ 2009

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

    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
    #include <GUIConstants.au3>
    #include <GDIPlus.au3>
    #include <String.au3>

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

    Global Const $width = 640
    Global Const $height = 480
    Global Const $pi_div_180 = 4 * ATan(1) / 180
    Global $graphics, $backbuffer, $bitmap, $Pen, $arrTxt1, $arrTxt2, $fontsize_txt1, $fontsize_txt2
    Global $brush_color, $hFamily1, $hFamily2, $hFont1, $hFont2, $hFormat, $tLayout
    Global $x1, $x2, $y1, $y2, $a, $b, $c, $r, $g, $b
    Global $i = 0, $j = 360, $m = 0, $n = 0
    Global $radius_x, $radius_y
    Global $title = "GDI+: Rotating Letters by UEZ 2009!"

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

    Opt("GUIOnEventMode", 1)
    $hwnd = GUICreate($title, $width, $height, -1, -1, BitOR($WS_SYSMENU, $WS_DLGFRAME, $WS_POPUP))
    GUISetOnEvent($GUI_EVENT_CLOSE, "Close")
    GUISetState()

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

    _GDIPlus_Startup()
    $graphics = _GDIPlus_GraphicsCreateFromHWND($hwnd)
    $bitmap = _GDIPlus_BitmapCreateFromGraphics($width, $height, $graphics)
    $backbuffer = _GDIPlus_ImageGetGraphicsContext($bitmap)
    _GDIPlus_GraphicsSetSmoothingMode($backbuffer, 2)

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

    $fontsize_txt1 = 48
    $fontsize_txt2 = 24

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

    $width_mul_045 = $width * 0.45
    $height_mul_045 = $height * 0.45
    $radius_x1 = ($width_mul_045) * 0.95
    $radius_y1 = ($height_mul_045) * 0.95
    $radius_x2 = ($width_mul_045) * 0.45
    $radius_y2 = ($height_mul_045) * 0.45
    $text1 = _StringReverse(" Rotating Letters using GDI+")
    $text2 = " By UEZ '09 ;-)"
    $arrTxt1 = StringSplit($text1, "")
    $arrTxt2 = StringSplit($text2, "")
    Dim $arrX1[UBound($arrTxt1)]
    Dim $arrY1[UBound($arrTxt1)]
    Dim $arrX2[UBound($arrTxt2)]
    Dim $arrY2[UBound($arrTxt2)]
    Dim $brush1[UBound($arrTxt1)]
    Dim $brush2[UBound($arrTxt2)]

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

    $r = 1
    $c = (255 / UBound($arrTxt1) - 1) * 2 - 1
    $r = 0x80
    $g = 0xA0
    $b = $c
    For $k = 0 To UBound($arrTxt1) - 1
    $brush_color = "0xFF" & Hex($r, 2) & Hex($g, 2) & Hex($b, 2)
    $brush1[$k] = _GDIPlus_BrushCreateSolid($brush_color)
    If $r = 1 Then
    $b += $c
    Else
    $b -= $c
    EndIf
    If $b >= 255 Then $r = 0
    If $b <= $c Then $r = 1
    Next

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

    For $k = 0 To (UBound($arrTxt2) - 1)
    $brush_color = 0xFF808080
    $brush2[$k] = _GDIPlus_BrushCreateSolid($brush_color)
    Next
    _GDIPlus_BrushSetSolidColor($brush2[0], 0xFFD08020)
    _GDIPlus_BrushSetSolidColor($brush2[1], 0xFFFFA060)
    _GDIPlus_BrushSetSolidColor($brush2[2], 0xFFD08020)

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

    $hFormat = _GDIPlus_StringFormatCreate()
    $hFamily1 = _GDIPlus_FontFamilyCreate("Arial")
    $hFamily2 = _GDIPlus_FontFamilyCreate("Comic Sans MS")
    $hFont1 = _GDIPlus_FontCreate($hFamily1, $fontsize_txt1, 2)
    $hFont2 = _GDIPlus_FontCreate($hFamily2, $fontsize_txt2, 2)
    $tLayout = _GDIPlus_RectFCreate(0, 0)
    $a = 360 / (UBound($arrTxt1) - 1)
    $b = 360 / (UBound($arrTxt2) - 1)
    $y = 0
    Do
    _GDIPlus_GraphicsClear($backbuffer, 0x90000000)
    For $x = 1 To UBound($arrTxt1) - 1
    $x1 = $width_mul_045 + Cos(($i + $m) * $pi_div_180) * $radius_x1
    $y1 = $height_mul_045 + Sin(($i + $m) * $pi_div_180) * $radius_y1 - $fontsize_txt1 / 4
    $arrX1[$x] = $x1
    $arrY1[$x] = $y1
    DllStructSetData($tLayout, "x", $arrX1[$x])
    DllStructSetData($tLayout, "y", $arrY1[$x])
    _GDIPlus_GraphicsDrawStringEx($backbuffer, $arrTxt1[$x], $hFont1, $tLayout, $hFormat, $brush1[$x])
    $m += $a
    Next
    For $x = 1 To UBound($arrTxt2) - 1
    $x2 = $width_mul_045 + Cos(($j + $n) * $pi_div_180) * $radius_x2 * Cos($y * $pi_div_180)
    $y2 = $height_mul_045 + Sin(($j + $n) * $pi_div_180) * $radius_y2 - $fontsize_txt2 / 4
    $arrX2[$x] = $x2
    $arrY2[$x] = $y2
    DllStructSetData($tLayout, "x", $arrX2[$x])
    DllStructSetData($tLayout, "y", $arrY2[$x])
    _GDIPlus_GraphicsDrawStringEx($backbuffer, $arrTxt2[$x], $hFont2, $tLayout, $hFormat, $brush2[$x])
    $n += $b
    Next
    If Mod($y, 2) = 1 Then Array_Rot($brush2, 1)
    $y += 1
    _GDIPlus_GraphicsDrawImageRect($graphics, $bitmap, 0, 0, $width, $height)
    $i += 1
    If $i >= 360 Then
    $i = 0
    $m = 0
    EndIf
    $j -= 2
    If $j <= 0 Then
    $j = 360
    $n = 0
    EndIf
    Until False * Not Sleep(30)

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

    Func Array_Rot(ByRef $arr, $dir = 0) ;0 for left, 1 for right
    Local $tmp, $p,$q
    If $dir = 0 Then ;left rotation
    $tmp = $arr[0]
    $q = 0
    For $p = 1 To UBound($arr) - 1
    $arr[$q] = $arr[$p]
    $q += 1
    Next
    $arr[UBound($arr) - 1] = $tmp
    ElseIf $dir = 1 Then ;right rotation
    $tmp = $arr[UBound($arr) - 1]
    $q = UBound($arr) - 1
    For $p = UBound($arr) - 2 To 0 Step - 1
    $arr[$q] = $arr[$p]
    $q -= 1
    Next
    $arr[0] = $tmp
    EndIf
    EndFunc

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

    Func _GDIPlus_BrushSetSolidColor($hBrush, $iARGB = 0xFF000000)
    Local $aResult
    $aResult = DllCall($ghGDIPDll, "int", "GdipSetSolidFillColor", "hwnd", $hBrush, "int", $iARGB)
    If @error Then Return SetError(@error, @extended, 0)
    Return SetError($aResult[0], 0, $aResult[0] = 0)
    EndFunc ;==>_GDIPlus_BrushSetSolidColor

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

    Func Close()
    For $x = 0 To UBound($arrTxt1) - 1
    _GDIPlus_BrushDispose($brush1[$x])
    Next
    For $x = 0 To UBound($arrTxt2) - 1
    _GDIPlus_BrushDispose($brush2[$x])
    Next
    _GDIPlus_FontDispose($hFont1)
    _GDIPlus_FontDispose($hFont2)
    _GDIPlus_FontFamilyDispose($hFamily1)
    _GDIPlus_FontFamilyDispose($hFamily2)
    _GDIPlus_StringFormatDispose($hFormat)
    _GDIPlus_GraphicsDispose($backbuffer)
    _GDIPlus_BitmapDispose($bitmap)
    _GDIPlus_GraphicsDispose($graphics)
    _GDIPlus_Shutdown()
    WinClose($hwnd)
    Exit
    EndFunc ;==>Close

    [/autoit]


    Transparent Fenster Version (danke an Malkey (einer der wirklichen GDI+ Meister!)):

    Spoiler anzeigen
    [autoit]


    ;coded by UEZ 2009
    #AutoIt3Wrapper_UseUpx=n
    #AutoIt3Wrapper_Run_Obfuscator=y
    #Obfuscator_Parameters=/sf /sv /om /cs=0 /cn=0
    ;~ #AutoIt3Wrapper_Run_After=upx.exe --best "%out%"
    #AutoIt3Wrapper_Run_After=upx.exe --ultra-brute "%out%" ;very slow
    #AutoIt3Wrapper_Run_After=del "Rotating Letters Transparent_Obfuscated.au3"

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

    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
    #include <GUIConstants.au3>
    #include <GDIPlus.au3>
    #include <String.au3>

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

    Global Const $width = 640
    Global Const $height = 480
    Global Const $pi_div_180 = 4 * ATan(1) / 180
    Global $graphics, $backbuffer, $bitmap, $Pen, $arrTxt1, $arrTxt2, $fontsize_txt1, $fontsize_txt2
    Global $brush_color, $hFamily1, $hFamily2, $hFont1, $hFont2, $hFormat, $tLayout
    Global $ScreenDc, $dc, $tSize, $pSize, $tSource, $pSource, $tBlend, $pBlend, $tPoint, $pPoint, $gdibitmap
    Global $x1, $x2, $y1, $y2, $a, $b, $c, $r, $g, $b
    Global $i = 0, $j = 360, $m = 0, $n = 0
    Global $radius_x, $radius_y
    Global $title = "GDI+: Rotating Letters by UEZ 2009!"

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

    Global Const $MSLLHOOKSTRUCT = $tagPOINT & ";dword mouseData;dword flags;dword time;ulong_ptr dwExtraInfo"
    ;Register callback
    $hKey_Proc = DllCallbackRegister("_Mouse_Proc", "int", "int;ptr;ptr")
    $hM_Module = DllCall("kernel32.dll", "hwnd", "GetModuleHandle", "ptr", 0)
    $hM_Hook = DllCall("user32.dll", "hwnd", "SetWindowsHookEx", "int", $WH_MOUSE_LL, "ptr", DllCallbackGetPtr($hKey_Proc), "hwnd", $hM_Module[0], "dword", 0)

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

    Opt("GUIOnEventMode", 1)
    $hwnd = GUICreate($title, $width, $height, -1, -1, 0, BitOR($WS_EX_LAYERED, $WS_EX_TOPMOST))
    GUISetOnEvent($GUI_EVENT_CLOSE, "Close")

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

    _GDIPlus_Startup()
    $graphics = _GDIPlus_GraphicsCreateFromHWND($hwnd)
    $bitmap = _GDIPlus_BitmapCreateFromGraphics($width, $height, $graphics)
    $backbuffer = _GDIPlus_ImageGetGraphicsContext($bitmap)
    _GDIPlus_GraphicsSetSmoothingMode($backbuffer, 2)

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

    $ScreenDc = _WinAPI_GetDC($hWnd)
    $gdibitmap = _GDIPlus_BitmapCreateHBITMAPFromBitmap($bitmap)
    $dc = _WinAPI_CreateCompatibleDC($ScreenDc)
    _WinAPI_SelectObject($dc, $gdibitmap)
    ; _WinAPI_UpdateLayeredWindow parameters
    $tSize = DllStructCreate($tagSIZE)
    $pSize = DllStructGetPtr($tSize)
    DllStructSetData($tSize, "X", $width)
    DllStructSetData($tSize, "Y", $height)
    $tSource = DllStructCreate($tagPOINT)
    $pSource = DllStructGetPtr($tSource)
    $tBlend = DllStructCreate($tagBLENDFUNCTION)
    $pBlend = DllStructGetPtr($tBlend)
    Global $alpha = 200
    Global $alpha_steps = 5
    DllStructSetData($tBlend, "Alpha", $alpha)
    DllStructSetData($tBlend, "Format", 1)
    $tPoint = DllStructCreate($tagPOINT)
    $pPoint = DllStructGetPtr($tPoint)
    DllStructSetData($tPoint, "X", 0)
    DllStructSetData($tPoint, "Y", 0)

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

    GUISetState()

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

    $fontsize_txt1 = 48
    $fontsize_txt2 = 24

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

    $width_mul_045 = $width * 0.45
    $height_mul_045 = $height * 0.45
    $radius_x1 = ($width_mul_045) * 0.95
    $radius_y1 = ($height_mul_045) * 0.95
    $radius_x2 = ($width_mul_045) * 0.45
    $radius_y2 = ($height_mul_045) * 0.45
    $text1 = _StringReverse(" Rotating Letters using GDI+")
    $text2 = " By UEZ '09 ;-)"
    $arrTxt1 = StringSplit($text1, "")
    $arrTxt2 = StringSplit($text2, "")
    Dim $arrX1[UBound($arrTxt1)]
    Dim $arrY1[UBound($arrTxt1)]
    Dim $arrX2[UBound($arrTxt2)]
    Dim $arrY2[UBound($arrTxt2)]
    Dim $brush1[UBound($arrTxt1)]
    Dim $brush2[UBound($arrTxt2)]

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

    $r = 1
    $c = (255 / UBound($arrTxt1) - 1) * 2 - 1
    $r = 0x80
    $g = 0xA0
    $b = $c
    For $k = 0 To UBound($arrTxt1) - 1
    $brush_color = "0xFF" & Hex($r, 2) & Hex($g, 2) & Hex($b, 2)
    $brush1[$k] = _GDIPlus_BrushCreateSolid($brush_color)
    If $r = 1 Then
    $b += $c
    Else
    $b -= $c
    EndIf
    If $b >= 255 Then $r = 0
    If $b <= $c Then $r = 1
    Next

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

    For $k = 0 To (UBound($arrTxt2) - 1)
    $brush_color = 0xFF808080
    $brush2[$k] = _GDIPlus_BrushCreateSolid($brush_color)
    Next
    _GDIPlus_BrushSetSolidColor($brush2[0], 0xFFD08020)
    _GDIPlus_BrushSetSolidColor($brush2[1], 0xFFFFA060)
    _GDIPlus_BrushSetSolidColor($brush2[2], 0xFFD08020)

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

    $hFormat = _GDIPlus_StringFormatCreate()
    $hFamily1 = _GDIPlus_FontFamilyCreate("Arial")
    $hFamily2 = _GDIPlus_FontFamilyCreate("Comic Sans MS")
    $hFont1 = _GDIPlus_FontCreate($hFamily1, $fontsize_txt1, 2)
    $hFont2 = _GDIPlus_FontCreate($hFamily2, $fontsize_txt2, 2)
    $tLayout = _GDIPlus_RectFCreate(0, 0)
    $a = 360 / (UBound($arrTxt1) - 1)
    $b = 360 / (UBound($arrTxt2) - 1)
    $y = 0

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

    Do
    _GDIPlus_GraphicsClear($backbuffer, 0x00000000)
    For $x = 1 To UBound($arrTxt1) - 1
    $x1 = $width_mul_045 + Cos(($i + $m) * $pi_div_180) * $radius_x1
    $y1 = $height_mul_045 + Sin(($i + $m) * $pi_div_180) * $radius_y1 - $fontsize_txt1 / 4
    $arrX1[$x] = $x1
    $arrY1[$x] = $y1
    DllStructSetData($tLayout, "x", $arrX1[$x])
    DllStructSetData($tLayout, "y", $arrY1[$x])
    _GDIPlus_GraphicsDrawStringEx($backbuffer, $arrTxt1[$x], $hFont1, $tLayout, $hFormat, $brush1[$x])
    $m += $a
    Next
    For $x = 1 To UBound($arrTxt2) - 1
    $x2 = $width_mul_045 + Cos(($j + $n) * $pi_div_180) * $radius_x2 * Cos($y * $pi_div_180)
    $y2 = $height_mul_045 + Sin(($j + $n) * $pi_div_180) * $radius_y2 - $fontsize_txt2 / 4
    $arrX2[$x] = $x2
    $arrY2[$x] = $y2
    DllStructSetData($tLayout, "x", $arrX2[$x])
    DllStructSetData($tLayout, "y", $arrY2[$x])
    _GDIPlus_GraphicsDrawStringEx($backbuffer, $arrTxt2[$x], $hFont2, $tLayout, $hFormat, $brush2[$x])
    $n += $b
    Next
    If Mod($y, 2) = 1 Then Array_Rot($brush2, 1)
    $y += 1

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

    ;~ _GDIPlus_GraphicsDrawImageRect($graphics, $bitmap, 0, 0, $width, $height)

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

    $gdibitmap = _GDIPlus_BitmapCreateHBITMAPFromBitmap($bitmap)
    _WinAPI_SelectObject($dc, $gdibitmap)
    _WinAPI_UpdateLayeredWindow($hWnd, $ScreenDc, 0, $pSize, $dc, $pSource, 0, $pBlend, 2)
    _WinAPI_DeleteObject($gdibitmap)
    $i += 1
    If $i >= 360 Then
    $i = 0
    $m = 0
    EndIf
    $j -= 2
    If $j <= 0 Then
    $j = 360
    $n = 0
    EndIf
    Until False * Not Sleep(30)

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

    Func Array_Rot(ByRef $arr, $dir = 0) ;0 for left, 1 for right
    Local $tmp, $p,$q
    If $dir = 0 Then ;left rotation
    $tmp = $arr[0]
    $q = 0
    For $p = 1 To UBound($arr) - 1
    $arr[$q] = $arr[$p]
    $q += 1
    Next
    $arr[UBound($arr) - 1] = $tmp
    ElseIf $dir = 1 Then ;right rotation
    $tmp = $arr[UBound($arr) - 1]
    $q = UBound($arr) - 1
    For $p = UBound($arr) - 2 To 0 Step - 1
    $arr[$q] = $arr[$p]
    $q -= 1
    Next
    $arr[0] = $tmp
    EndIf
    EndFunc

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

    ;http://www.autoitscript.com/forum/index.php?showtopic=81761
    Func _Mouse_Proc($nCode, $wParam, $lParam) ;function called for mouse events.. Made by _Kurt
    ;define local vars
    Local $info, $mouseData

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

    If $nCode < 0 Then ;recommended, see http://msdn.microsoft.com/en-us/library/ms644986(VS.85).aspx
    $ret = DllCall("user32.dll", "long", "CallNextHookEx", "hwnd", $hM_Hook[0], "int", $nCode, "ptr", $wParam, "ptr", $lParam) ;recommended
    Return $ret[0]
    EndIf
    $info = DllStructCreate($MSLLHOOKSTRUCT, $lParam)
    $mouseData = DllStructGetData($info, 3)

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

    ;Find which event happened
    Select
    Case $wParam = $WM_MOUSEWHEEL And WinActive($hwnd)
    If _WinAPI_HiWord($mouseData) > 0 Then ;wheel up
    If $alpha + $alpha_steps <= 512 Then $alpha += $alpha_steps
    Switch $alpha
    Case 0 To 255
    DllStructSetData($tBlend, "Alpha", $alpha)
    DllStructSetData($tBlend, "Format", 1)
    Case 256 To 512
    DllStructSetData($tBlend, "Alpha", $alpha - 256)
    DllStructSetData($tBlend, "Format", 0)
    EndSwitch
    Else ;wheel down
    If $alpha - $alpha_steps > 0 Then $alpha -= $alpha_steps
    Switch $alpha
    Case 0 To 255
    DllStructSetData($tBlend, "Alpha", $alpha) ;wheel up
    DllStructSetData($tBlend, "Format", 1)
    Case 256 To 512
    DllStructSetData($tBlend, "Alpha", $alpha - 256) ;wheel up
    DllStructSetData($tBlend, "Format", 0)
    EndSwitch
    EndIf
    ConsoleWrite($alpha & @CRLF)
    EndSelect

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

    ;This is recommended instead of Return 0
    $ret = DllCall("user32.dll", "long", "CallNextHookEx", "hwnd", $hM_Hook[0], "int", $nCode, "ptr", $wParam, "ptr", $lParam)
    Return $ret[0]
    EndFunc ;==>_Mouse_Proc

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

    Func Close()
    DllCall("user32.dll", "int", "UnhookWindowsHookEx", "hwnd", $hM_Hook[0])
    $hM_Hook[0] = 0
    DllCallbackFree($hKey_Proc)
    $hKey_Proc = 0
    For $x = 0 To UBound($arrTxt1) - 1
    _GDIPlus_BrushDispose($brush1[$x])
    Next
    For $x = 0 To UBound($arrTxt2) - 1
    _GDIPlus_BrushDispose($brush2[$x])
    Next
    _WinAPI_DeleteDC($dc)
    _WinAPI_ReleaseDC($hWnd, $ScreenDc)
    _GDIPlus_FontDispose($hFont1)
    _GDIPlus_FontDispose($hFont2)
    _GDIPlus_FontFamilyDispose($hFamily1)
    _GDIPlus_FontFamilyDispose($hFamily2)
    _GDIPlus_StringFormatDispose($hFormat)
    _GDIPlus_GraphicsDispose($backbuffer)
    _GDIPlus_BitmapDispose($bitmap)
    _GDIPlus_GraphicsDispose($graphics)
    _GDIPlus_Shutdown()
    WinClose($hwnd)
    Exit
    EndFunc ;==>Close

    [/autoit]

    Gruß,
    UEZ

    PS: falls ihr WinXP benutzt und die Darstellung sehr, sehr langsam ist, dann die Zeile 91: _GDIPlus_GraphicsClear($backbuffer, 0x90000000) durch _GDIPlus_GraphicsClear($backbuffer, 0xFF000000) ersetzen (gilt nur für nicht transparente Version)!!!

  • was soll man anderes sagen, immer wieder SCHÖÖÖÖÖN!

  • Also, ich persönlich würde mich nicht als GDI+ Meister, Guru oder wie auch immer bezeichnen! Da kenne ich viiiieeelll bessere Personen, wo ich sage, die sind wahre GDI+ Meister.

    Was ich im Prinzip immer mache, sind die GDI+ Grundfunktionen mit ein bissl Mathe zu mischen und das ist eigentlich keine meisterreife Leistung!

    Ferner finde die alles um 2D/3D sehr interessant, was aber eine brotlose Kunst ist. Es sei denn, man macht es professionell, aber dazu fehlt mir die Mathematik und die Zeit es zu erlernen!

    Der C64 hat mich auch in diese Richtung geprägt...


    Danke für das Feedback.


    Gruß,
    UEZ

    Auch am Arsch geht ein Weg vorbei...

    ¯\_(ツ)_/¯

  • Das mit transparenz ist auch cool !!!

    Hab mal eine Frage wie kann ich eine linie die ich erstellt habe in gdi farbig machen zb. Rot

  • Das mit transparenz ist auch cool !!!

    Hab mal eine Frage wie kann ich eine linie die ich erstellt habe in gdi farbig machen zb. Rot

    Bin gerade in einer Autowerkstatt und kann dir kein Beispiel schreiben. Hier ein Skript, das ich kürzlich einem MVP geschrieben habe.

    Vielleicht beantwortet es ja deine Frage:

    Spoiler anzeigen
    [autoit]


    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
    #include <GUIConstants.au3>
    #include <GDIPlus.au3>

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

    Global Const $width = 640
    Global Const $height = 480
    Global $graphics, $backbuffer, $bitmap, $Pen, $i, $pi_div_180 = 4 * ATan(1) / 180

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

    Global $title = "GDI+ Color Gradient"

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

    Opt("GUIOnEventMode", 1)
    $hwnd = GUICreate($title, $width, $height, -1, -1) ;, BitOR($WS_SYSMENU,$WS_DLGFRAME,$WS_POPUP))
    GUISetOnEvent($GUI_EVENT_CLOSE, "Close")
    GUISetState()

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

    _GDIPlus_Startup()
    $graphics = _GDIPlus_GraphicsCreateFromHWND($hwnd)
    $bitmap = _GDIPlus_BitmapCreateFromGraphics($width, $height, $graphics)
    $backbuffer = _GDIPlus_ImageGetGraphicsContext($bitmap)
    $pen = _GDIPlus_PenCreate(0xFF000000, 1)

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

    ;you can move this lines below until Do...Until loop to Do...Until loop and make some realtime effects
    $r = 0x00
    $g = 0x00
    $b = 0xFF
    $c = "0xFF" & Hex($r, 2) & Hex($g, 2) & Hex($b, 2)
    $i = 255 / $width

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

    _GDIPlus_GraphicsClear($backbuffer)

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

    For $x = 0 To $width
    _GDIPlus_GraphicsDrawLine($backbuffer, $x, 0, $x, $width, $pen)
    _GDIPlus_PenSetColor($pen, $c)
    $r += $i
    $g += $i
    $c = "0xEF" & Hex($r, 2) & Hex($g, 2) & Hex($b, 2)
    Next

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

    _GDIPlus_GraphicsDrawImageRect($graphics, $bitmap, 0, 0, $width, $height)
    GUIRegisterMsg(0xF, "MY_PAINT"); Register PAINT-Event 0x000F = $WM_PAINT (WindowsConstants.au3)
    GUIRegisterMsg(0x85, "MY_PAINT"); $WM_NCPAINT = 0x0085 (WindowsConstants.au3)Restore after Minimize.

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

    $b = 0

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

    Do

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

    Until False * Not Sleep(30)

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

    ;Func to redraw on PAINT MSG
    Func MY_PAINT($hWnd, $msg, $wParam, $lParam)
    ; The sequencial order of these two commands is important.
    _GDIPlus_GraphicsDrawImage($graphics, $bitmap, 0, 0)
    _WinAPI_RedrawWindow($hwnd, "", "", BitOR($RDW_INVALIDATE, $RDW_UPDATENOW, $RDW_FRAME)); , $RDW_ALLCHILDREN
    Return $GUI_RUNDEFMSG
    EndFunc ;==>MY_PAINT

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

    Func Close()
    _GDIPlus_PenDispose($pen)
    _GDIPlus_GraphicsDispose($backbuffer)
    _GDIPlus_BitmapDispose($bitmap)
    _GDIPlus_GraphicsDispose($graphics)
    _GDIPlus_Shutdown()
    WinClose($hwnd)
    Exit
    EndFunc

    [/autoit]

    Es zeichnet einen Farbverlauf in eine GUI inkl. Double Buffering, was aber eigentlich nicht benötigt wird.

    Bis später.

    UEZ

    Auch am Arsch geht ein Weg vorbei...

    ¯\_(ツ)_/¯

    • Offizieller Beitrag

    UEZ
    Ich finde das Script Super.
    Sollte die Transparente Version ein Durchsichtiges Fenster zeigen? Wenn ja, funzt es nicht auf Windows 7.
    Du bist der GDI-Meister unseres Forums. Auch wenn du dich nicht so siehst. Aber wie heißt es, Bescheidenheit ist eine Zier. ;)

  • UEZ
    das heist für eine farbige linie braucht man _GDIPlus_PenSetColor($pen, $color)
    oder?
    danke für deine antwort

  • UEZ
    das heist für eine farbige linie braucht man _GDIPlus_PenSetColor($pen, $color)
    oder?
    danke für deine antwort

    Mit $pen = _GDIPlus_PenCreate(0xFF000000, 1) erstellst du den Stift und mit _GDIPlus_PenSetColor($pen, $c) kannst du die Farbe jeweils ändern ohne immer wieder ein Stift zu erstellen, das sonst Speicher fressen würde.

    UEZ

    Auch am Arsch geht ein Weg vorbei...

    ¯\_(ツ)_/¯

  • UEZ
    Ich finde das Script Super.
    Sollte die Transparente Version ein Durchsichtiges Fenster zeigen? Wenn ja, funzt es nicht auf Windows 7.
    Du bist der GDI-Meister unseres Forums. Auch wenn du dich nicht so siehst. Aber wie heißt es, Bescheidenheit ist eine Zier. ;)

    Rotating Letters Transparent läuft bei mir auch unter Win7 x64 sauber!

    UEZ

    Auch am Arsch geht ein Weg vorbei...

    ¯\_(ツ)_/¯

  • UEZ
    vielen danke für deine hilfe funktioniert hab schon tagelang gesucht und nix gefunden da ich nicht wusste dass ich den pen farbig machen soll

  • Hallo (XP Pro User)

    Mein Test auch bei änderrung!!!

    Bei doppelklick!
    autoit.de/wcf/attachment/6474/

    Und rechte maustaste Compile Script!
    autoit.de/wcf/attachment/6475/

    Es geht beides nur aus SciTE herraus!!!!!!!!!

    Also vom aussehen super code ! Nur die beiden sachen sind schlecht und nicht für jeden user verständlich voralledem der !!!!!!!!!!!! Virus arlam !!!!!!!!!

    LG Kleiner

    • Offizieller Beitrag

    voralledem der !!!!!!!!!!!! Virus arlam !!!!!!!!!


    Vielleicht solltest du mal die Einstellungen deines Virenwächters herunterschrauben. Wenn du AHeAD auf 'hoch' setzt, wirst du viele sinnlose Alarme bekommen. Das mußt du für dich entscheiden: Viel Nerverei und hohe Sicherheit oder geruhsames Arbeiten bei mittlerer Sicherheit. ;)

  • Hallo BugFix!

    Habe bei mir das Antivir auf standart sinlosen arlam hate ich bis jetzt noch nicht darum mein post!

    LG Kleiner

    Nachtrag: es geht ja über Scite auch danach die exe kein virus nur wenn ich rechte maustaste und compile! wegen den code werde ich die erkänung nicht auf niedrig stellen!!!!!!
    autoit.de/wcf/attachment/6476/


  • Habe ich doch glatt ein Virus programmiert :rofl:

    Ich benutze den gleichen VS, habe nicht die Fehlermeldungen!


    Wenn du die neuste Beta im Beta Verzeichnis hast, wird die au3 mit der Beta aufgerufen und deshalb bekommst du die Fehlermeldung, dass _GDIPlus_BrushSetSolidColor() bereits vorhanden ist, denn die Funktion ist bereits in der Beta integriert!
    Irgendwo kann man das so einstellen, dass per Doppeltklick nicht die Beta, sondern die finale Version gestartet wird.

    UEZ

    Auch am Arsch geht ein Weg vorbei...

    ¯\_(ツ)_/¯

    Einmal editiert, zuletzt von UEZ (25. Oktober 2009 um 10:44)

  • Stimmt an der Beta Version habe ich gar nicht gedacht!

    Tja wegen dem Virus keine Ahnung warum das so ist aber ich fand es wichtig dir mitzuteilen!

    Ansonsten wie schon die Vorredner schöner Code!!

    Lg Kleiner

  • Um nicht die Beta durch Doppeltklick zu starten, einfach den Schlüssel in der Registry ändern!

    Vista x32:

    HKEY_CLASSES_ROOT\.au3
    => (Standard) -> AutoIt3ScriptBeta auf AutoIt3Script ändern.

    Sollte unter WinXP ähnlich sein!

    Gruß,
    UEZ

    Auch am Arsch geht ein Weg vorbei...

    ¯\_(ツ)_/¯