Problem mit Array und SetError

  • Hallo Leute
    mein erster Beitrag :rock:

    So zum Thema: so weit binn ich gekommen:
    ich habe mir eine UDF geschriben die die PixelCheckSum-Koordinaten
    Umrechnet um eine eine Art Bilderrahmen zu erzeugen.
    eine Gui wird erstellt, in der 2 Rechtecke um diese Stelle
    gezeichnet werden.
    Dies Gescheit mit "DrawFrame()". Mit "ClearFrame" soll das gantze wieder verschwinden.
    Das Funktioniert Auch :D

    zum Problem:
    Momentan funktioniert das über Globale Variablen für die Speicherung von Handles (z.B. hGui, hPinsel...).
    Diese Handles möchte ich in einem Array Speichen. leider klapt das nicht mit der Funktion "DrawFrame2() " .
    Hier habe ich versucht das Array zu erzeugen.
    Ich vermute das irgendwie die Deklaratinon des Array falsch ist. bin mir aber nicht sicher.
    Ein Fehler wird nicht ausgegeben.
    Was ich auch nicht versteheh ist warum @error nicht gesetz wird (müste Durch SetError(20) gesetz worden sein)


    Spoiler anzeigen
    [autoit]


    #include-once

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

    #include <Constants.au3>
    #include <GDIPlus.au3>
    #include <WinAPI.au3>
    #include <WindowsConstants.au3>
    ConsoleWrite('#incl.' & @TAB & '01' & ' - <DrawRectFunc.au3>' & @LF)
    ;DrawRectFunc.au3

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

    Global $hGui, $hGraphic, $Pinsel_HNDL1, $Pinsel_HNDL2, $Pixelchecksum = 0
    ;Func DrawFrame($left, $top, $right, $bottom, $Rahmen = 20)
    Local $test = DrawFrame(200, 300, 350, 450, 20)
    Sleep(1000)

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

    ClearFrame()

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

    Local $test = DrawFrame2(200, 300, 350, 450, 20)

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

    If
    IsArray($test) = 1 Then ConsoleWrite(IsArray($test) &
    '$test["hGui"] = ' & $test['hGui'] & '$test["SLNumber"] = '
    & $test['SLNumber'] & @CRLF)
    If IsArray($test) = 0 Then ConsoleWrite(IsArray($test) & '$test = ' & $test & @CRLF)
    ConsoleWrite('> (' & @ScriptLineNumber & ') ' & @error & @CRLF)

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

    Sleep(1300)

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

    Func DrawFrame($left, $top, $right, $bottom, $Rahmen = 20)
    ; Definate GUI
    Local $iWidth_GUI = $right - $left + 2 * ($Rahmen)
    Local $iHeight_GUI = $bottom - $top + 2 * ($Rahmen)
    Local $iX_GUI = $left - ($Rahmen)
    Local $iY_GUI = $top - ($Rahmen)
    ;Blue
    Local $iWidth_Rect1 = $right - $left + $Rahmen + 1
    Local $iHeight_Rect1 = $bottom - $top + $Rahmen + 1
    Local $iX_Rect1 = ($Rahmen / 2) ;X coordinate of the upper left corner
    Local $iY_Rect1 = ($Rahmen / 2) ;Y coordinate of the upper left corner
    ;Pinc
    Local $iWidth_Rect2 = $right - $left + ($Rahmen) + 1
    Local $iHeight_Rect2 = $bottom - $top + ($Rahmen) + 1
    Local $iX_Rect2 = ($Rahmen / 2) ;X coordinate of the upper left corner
    Local $iY_Rect2 = ($Rahmen / 2) ;Y coordinate of the upper left corner


    Local $_GDIPlus_StartupOK = _GDIPlus_Startup()
    If $_GDIPlus_StartupOK = False Then
    SetError(10)
    Return
    EndIf

    ; Breite Höhe, Links/Left, Rechts/Top
    Global $hGui = GUICreate("RahmenGui", $iWidth_GUI, $iHeight_GUI, $iX_GUI, $iY_GUI, $WS_POPUP, $WS_EX_LAYERED)
    If @error = 1 Then Return

    ;Erzeugt GUI"RahmenGui" und Zeichnet Box
    WinSetOnTop("RahmenGui", "", 1)

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

    GUISetBkColor(0xABCDEF) ;Setzt die Hintergrundfarbe (der wert der Farbe
    ist egal da dise in der Nächsten zeile auf Transparent gesetzt wird)

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

    _WinAPI_SetLayeredWindowAttributes($hGui, 0xABCDEF, 255) ;der Layer
    (Layer = eine lage eines Mehrschichtigen Fensters) mit der farbe
    "0xABCDEF" wird Transparent gestetzt durch den wert 255 = 100%
    transparent
    GUISetState()
    Global $hGraphic = _GDIPlus_GraphicsCreateFromHWND($hGui)
    Global $Pinsel_HNDL1 = _GDIPlus_PenCreate(0xFF0000FF, $Rahmen, 2) ;Blue Rect
    Global $Pinsel_HNDL2 = _GDIPlus_PenCreate(0xFFfa0aa0, ($Rahmen) / 4, 2) ;Pinc Rect

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

    $_GDIPlus_GraphicsDrawRectOK1 = _GDIPlus_GraphicsDrawRect($hGraphic,
    $iX_Rect1, $iY_Rect1, $iWidth_Rect1, $iHeight_Rect1, $Pinsel_HNDL1)
    ;Blue Rect
    If $_GDIPlus_GraphicsDrawRectOK1 = False Then
    SetError(20)
    Return
    EndIf

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

    $_GDIPlus_GraphicsDrawRectOK2 = _GDIPlus_GraphicsDrawRect($hGraphic,
    $iX_Rect1, $iY_Rect2, $iWidth_Rect2, $iHeight_Rect2, $Pinsel_HNDL2);Pinc
    Rect
    If $_GDIPlus_GraphicsDrawRectOK2 = False Then
    SetError(21)
    Return
    EndIf

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

    $_WinAPI_SetWindowLongOK = _WinAPI_SetWindowLong($hGui, $GWL_EXSTYLE,
    BitOR(_WinAPI_GetWindowLong($hGui, $GWL_EXSTYLE),
    $WS_EX_TRANSPARENT));ClickThrough
    If $_WinAPI_SetWindowLongOK = 0 Then
    SetError(30)
    Return
    EndIf

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

    EndFunc ;==>DrawFrame
    ;Erzeugt GUI"RahmenGui" und Zeichnet Box

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

    Func DrawFrame2($left, $top, $right, $bottom, $Rahmen = 20)
    ; Definate GUI

    Local $iWidth_GUI = $right - $left + 2 * ($Rahmen)
    Local $iHeight_GUI = $bottom - $top + 2 * ($Rahmen)
    Local $iX_GUI = $left - ($Rahmen)
    Local $iY_GUI = $top - ($Rahmen)
    ;
    Local $iWidth_Rect1 = $right - $left + $Rahmen + 1
    Local $iHeight_Rect1 = $bottom - $top + $Rahmen + 1
    Local $iX_Rect1 = ($Rahmen / 2) ;X coordinate of the upper left corner
    Local $iY_Rect1 = ($Rahmen / 2) ;Y coordinate of the upper left corner
    ;~
    Local $iWidth_Rect2 = $right - $left + ($Rahmen) + 1
    Local $iHeight_Rect2 = $bottom - $top + ($Rahmen) + 1
    Local $iX_Rect2 = ($Rahmen / 2) ;X coordinate of the upper left corner
    Local $iY_Rect2 = ($Rahmen / 2) ;Y coordinate of the upper left corner

    Dim $Array[100] = [100, 'hGui', 'GuiName', 'hPinsel1', 'hPinsel2', 'SLNumber']
    ;Dim $Array[100] = [100, 'hGui', 'GuiName', 'hGraphic', 'hPinsel2']
    $Array['GuiName'] = "RahmenGui"

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

    ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') :
    $Array["GuiName"] = ' & $Array['GuiName'] & @CRLF &
    '>Error code: ' & @error & @CRLF) ;### Debug Console

    Local $_GDIPlus_StartupOK = _GDIPlus_Startup()
    If $_GDIPlus_StartupOK = False Then
    SetError(10)
    Return @ScriptLineNumber
    EndIf

    ; Breite Höhe, Links/Left, Rechts/Top
    $Array['hGui'] = ( GUICreate($Array['GuiName'], $iWidth_GUI, $iHeight_GUI, $iX_GUI, $iY_GUI, $WS_POPUP, $WS_EX_LAYERED) )

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

    ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') :
    $Array["hGui"] = ' & $Array['hGui'] & @CRLF & '>Error
    code: ' & @error & @CRLF) ;### Debug Console
    If @error = 1 Then Return @ScriptLineNumber

    ;Erzeugt GUI$array['GuiName'] und Zeichnet Box
    WinSetOnTop($Array['GuiName'], "", 1)

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

    GUISetBkColor(0xABCDEF) ;Setzt die Hintergrundfarbe (der wert der Farbe
    ist egal da dise in der Nächsten zeile auf Transparent gesetzt wird)

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

    _WinAPI_SetLayeredWindowAttributes($Array['hGui'], 0xABCDEF, 255) ;der
    Layer (Layer = eine lage eines Mehrschichtigen Fensters) mit der farbe
    "0xABCDEF" wird Transparent gestetzt durch den wert 255 = 100%
    transparent
    GUISetState()
    $Array['hGraphic'] = _GDIPlus_GraphicsCreateFromHWND($Array['hGui'])

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

    ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') :
    $Array["hGraphic"] = ' & $Array['hGraphic'] & @CRLF &
    '>Error code: ' & @error & @CRLF) ;### Debug Console
    $Array['hPinsel1'] = _GDIPlus_PenCreate(0xFF0000FF, $Rahmen, 2) ;Blue Rect

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

    ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') :
    $Array["hPinsel"] = ' & $Array['hPinsel1'] & @CRLF &
    '>Error code: ' & @error & @CRLF) ;### Debug Console
    $Array['hPinsel2'] = _GDIPlus_PenCreate(0xFFfa0aa0, ($Rahmen) / 4, 2) ;Pinc Rect

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

    ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') :
    $Array["hPinsel2"] = ' & $Array['hPinsel2'] & @CRLF &
    '>Error code: ' & @error & @CRLF) ;### Debug Console

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


    local $_GDIPlus_GraphicsDrawRectOK1 =
    _GDIPlus_GraphicsDrawRect($Array['hGraphic'], $iX_Rect1, $iY_Rect1,
    $iWidth_Rect1, $iHeight_Rect1, $Array['hPinsel1']) ;Blue Rect
    If $_GDIPlus_GraphicsDrawRectOK1 = 0 Then

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

    ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') :
    $_GDIPlus_GraphicsDrawRectOK1 = ' & $_GDIPlus_GraphicsDrawRectOK1
    & @crlf & '>Error code: ' & @error & @crlf) ;###
    Debug Console
    ConsoleWrite('$iX_Rect1 = '& $iX_Rect1 &
    '$iY_Rect1 = '& $iY_Rect1 & '$iWidth_Rect1 = '&
    $iWidth_Rect1 & '$iHeight_Rect1 = ' & $iHeight_Rect1 &
    @CRLF)
    SetError(20)
    $Array['SLNumber'] = @ScriptLineNumber
    Return $Array
    EndIf

    Local
    $_GDIPlus_GraphicsDrawRectOK2 =
    _GDIPlus_GraphicsDrawRect($Array['hGraphic'], $iX_Rect1, $iY_Rect2,
    $iWidth_Rect2, $iHeight_Rect2, $Array['hPinsel2']);Pinc Rect
    If $_GDIPlus_GraphicsDrawRectOK2 = 'False' Then
    SetError(21)
    $Array['SLNumber'] = @ScriptLineNumber
    Return $Array
    EndIf

    local
    $_WinAPI_SetWindowLongOK = _WinAPI_SetWindowLong($Array['hGui'],
    $GWL_EXSTYLE, BitOR(_WinAPI_GetWindowLong($Array['hGui'], $GWL_EXSTYLE),
    $WS_EX_TRANSPARENT));ClickThrough
    If $_WinAPI_SetWindowLongOK = 0 Then
    SetError(30)
    EndIf

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

    Return $Array

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

    EndFunc ;==>DrawFrame2
    ;Erzeugt GUI$array['GuiName'] und Zeichnet Box

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

    Func ClearFrame()
    _GDIPlus_GraphicsClear($hGraphic, 0xFFABCDEF)
    ;Global $hGui = GUICreate("RahmenGui", @DesktopWidth, @DesktopHeight, -1, -1, $WS_POPUP, $WS_EX_LAYERED)
    GUIDelete($hGui)
    _GDIPlus_PenDispose($Pinsel_HNDL1)
    _GDIPlus_PenDispose($Pinsel_HNDL2)
    _GDIPlus_GraphicsDispose($hGraphic)
    _GDIPlus_Shutdown()

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

    WinClose("RahmenGui", "")

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

    EndFunc ;==>ClearRect

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


    Das gibt der Consolenstream aus:

    Spoiler anzeigen
    [autoit][/autoit] [autoit][/autoit] [autoit]

    #incl. 01 - <DrawRectFunc.au3>
    @@ Debug(107) : $Array["GuiName"] = RahmenGui
    >Error code: 0
    @@ Debug(117) : $Array["hGui"] = 0x00111462
    >Error code: 0
    @@ Debug(126) : $Array["hGraphic"] = 0x02982090
    >Error code: 0
    @@ Debug(128) : $Array["hPinsel"] = 0x02982368
    >Error code: 0
    @@ Debug(130) : $Array["hPinsel2"] = 0x02982528
    >Error code: 0
    @@ Debug(134) : $_GDIPlus_GraphicsDrawRectOK1 = False
    >Error code: 0
    $iX_Rect1 = 10$iY_Rect1 = 10$iWidth_Rect1 = 171$iHeight_Rect1 = 171
    1$test["hGui"] = 137$test["SLNumber"] = 137
    > (21) 0

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

    4 Mal editiert, zuletzt von Nitram (16. Juni 2013 um 20:18)

  • das hast du richtig gesen, die DrawFrame() returnd nichts.
    Das ist vieleicht ein bisschen unübersichtlich, die Funktion DrawFrame2() hat aber die Rückgabe des Arrays

    [autoit]

    Return $Array
    EndFunc ;==>DrawFrame2

    [/autoit]

    mir geht es darumm die Funktion zu ersetzten, also das es nur die DrawFrame2() gibt .

    ich möchte SetError nehmen weil die unterschidlichen Funktionen die da aufgerufen werden, einen Unterschidlichen Errorcode zurück geben.

    (z.B. GUICreate gibt im Fehlerfall 1 zurück und _WinAPI_SetWindowLong im Fehlerfall 0)

    2 Mal editiert, zuletzt von Nitram (15. Juni 2013 um 20:33)

  • Das Problem mit dem SetError habe ich gefunden:

    [autoit]


    Local $test = DrawFrame2(200, 300, 350, 450, 20)
    Local $error = @error
    ConsoleWrite('> (' & @ScriptLineNumber & ') ' & @error & @CRLF) ;so wir @error ausgegben
    ConsoleWrite('> (' & @ScriptLineNumber & ') ' & @error & @CRLF) ;jetz ist @error zurück gesetzt
    If IsArray($test) = 1 Then ConsoleWrite(IsArray($test) & '$test["hGui"] = ' & $test['hGui'] & '$test["SLNumber"] = ' & $test['SLNumber'] & @CRLF)
    If IsArray($test) = 0 Then ConsoleWrite(IsArray($test) & '$test = ' & $test & @CRLF)
    ConsoleWrite('> (' & @ScriptLineNumber & ') ' & @error & @CRLF) ;hier stand es vorher, jetz ist @error 5mal zurück gesetzt
    ConsoleWrite('> (' & @ScriptLineNumber & ') ' & $error & @CRLF) ;Dieses Wäre eine Alternative
    Sleep(1300)

    [/autoit]


    ok, da bleibt nach das Problem mit dem Array.

    PS: alpines: Danke

  • Öhm keine Ahnung in welcher Sprache du programmierst, aber es wimmelt vor Syntax Fehler, die dir Scite auch alle bemängeln sollte wenn du den Syntax Check ausführst.

    [autoit]


    If
    IsArray($test) = 1 Then ConsoleWrite(IsArray($test) &
    '$test["hGui"] = ' & $test['hGui'] & '$test["SLNumber"] = '
    & $test['SLNumber'] & @CRLF)

    [/autoit]

    Selbstverständlich falsch, da nach IF nie eine neue Zeile folgt, sondern erstmal die Bedingung und dann ein THEN. Wenn du lange Zeilen über mehrere verteilt im Quellcode darstellen willst ist ein Unterstrich zu verwenden, also z.b. so:

    [autoit]


    $test = "ein super langer text.... " & _
    "blablabla...." & _
    " textende"

    [/autoit]

    Da das extrem oft in deinem Code vorkommt, vermute ich aber fast, dass du nur hier beim Posten Probleme hattest und die Zeilenumbrüche von Hand einfügen musstest. Verwende lieber einen gescheiten Browser bzw. den Quellcode Editor um Postings abzusenden.

    Nun zum eigentlich wirklichen Syntax Problem, welches dir auch Scite nicht melden wird, weil es syntaktisch zufälligerweise korrekt ist, aber sicher nicht das macht was du wolltest:

    [autoit]


    Dim $Array[100] = [100, 'hGui', 'GuiName', 'hPinsel1', 'hPinsel2', 'SLNumber']
    ;Dim $Array[100] = [100, 'hGui', 'GuiName', 'hGraphic', 'hPinsel2']
    $Array['GuiName'] = "RahmenGui"

    [/autoit]

    In Autoit wie auch den meisten anderen Sprachen kann man Arrays nur per ganzzahligem Index und nicht per String/Name verwalten. Strings haben also nichts in den eckigen Klammern verloren (Ausnahme die Deklaration der Feldinhalte). Die erste Zeile ist so wie sie ist also korrekt, du deklarierst ein Array mit 100 Zeilen und gibst den ersten 5 Array Zeilen jeweils einen Wert. Deine Code Zeile 3 ist hingegen falsch, da du hier den Index 2 angeben müsstest um die Array Zeile 3 mit dem Inhalt "GuiName" durch "RahmenGUI" zu ersetzen. Richtig wäre es also so:

    [autoit]


    $Array[2] = "RahmenGui"

    [/autoit]

    Dein Array würde danach so ausschaun:

    Code
    100
    'hGui'
    "RahmenGui"
    'hGraphic'
    'hPinsel2'
    *****95 leere Zeilen*****

    Dieser Fehler zieht sich durchs komplette Script. Der einzige Grund warum der Syntax Check es nicht bemängelt ist die automatische Typumwandlung von Autoit, welche aus deinem String in den eckigen Klammern eine Zahl macht. Ein String wird hierbei immer zu einer 0 umgewandelt. Du änderst bzw liest also nicht die gewünschte Zeile des Arrays, sondern immer den Wert von Zeile 0.

    Im Moment schaut dein Array also eher so aus:

    Code
    "RahmenGui"
    'hGui'
    'GuiName'
    'hGraphic'
    'hPinsel2'
    *****95 leere Zeilen*****
  • Hallo

    Da das extrem oft in deinem Code vorkommt, vermute ich aber fast, dass du nur hier beim Posten Probleme hattest und die Zeilenumbrüche von Hand einfügen musstest. Verwende lieber einen gescheiten Browser bzw. den Quellcode Editor um Postings abzusenden.


    Ja du hast recht, das Script hat funktionirt. Ich kann mir die Zeilenumbrüche nicht erklären.


    Danke für die Ausfürliche Erklärung des Fehlers, das hat mir sehr gehollfen.


    Jetzt siet mien Code So aus:

    Spoiler anzeigen
    [autoit]


    Func DrawFrame2($left, $top, $right, $bottom, $Rahmen = 20)
    ; Definate GUI
    Local $_GDIPlus_GraphicsDrawRectOK2
    Local $iWidth_GUI = $right - $left + 2 * ($Rahmen)
    Local $iHeight_GUI = $bottom - $top + 2 * ($Rahmen)
    Local $iX_GUI = $left - ($Rahmen)
    Local $iY_GUI = $top - ($Rahmen)
    ;
    Local $iWidth_Rect1 = $right - $left + $Rahmen + 1
    Local $iHeight_Rect1 = $bottom - $top + $Rahmen + 1
    Local $iX_Rect1 = ($Rahmen / 2) ;X coordinate of the upper left corner
    Local $iY_Rect1 = ($Rahmen / 2) ;Y coordinate of the upper left corner
    ;~
    Local $iWidth_Rect2 = $right - $left + ($Rahmen) + 1
    Local $iHeight_Rect2 = $bottom - $top + ($Rahmen) + 1
    Local $iX_Rect2 = ($Rahmen / 2) ;X coordinate of the upper left corner
    Local $iY_Rect2 = ($Rahmen / 2) ;Y coordinate of the upper left corner

    Dim $Array[13] = [13]

    ;$Array[100] = @error
    ;$Array[101] = @scriptlinenumber
    ;$Array[102] = 'String'

    $Array[1] = "RahmenGui"
    ;$Array[2] = $hGui
    ;$Array[3] = $hGraphic
    ;$Array[4] = $hPinsel1
    ;$Array[5] = $hPinsel2

    Local $_GDIPlus_StartupOK = _GDIPlus_Startup()
    If $_GDIPlus_StartupOK = False Then
    $Array[10] = @error
    $Array[11] = @ScriptLineNumber
    SetError(1)
    $Array[12] = '$_GDIPlus_StartupOK = ' & $_GDIPlus_StartupOK
    Return $Array
    EndIf

    ;$hGui Breite Höhe, Links/Left, Rechts/Top
    $Array[2] = GUICreate($Array[1], $iWidth_GUI, $iHeight_GUI, $iX_GUI, $iY_GUI, $WS_POPUP, $WS_EX_LAYERED)
    If @error = 1 Then
    $Array[10] = @error
    $Array[11] = @ScriptLineNumber
    SetError(2)
    $Array[12] = 'GUICreate'
    Return $Array
    EndIf
    WinSetOnTop($Array[2], "", 1)
    GUISetBkColor(0xABCDEF) ;Setzt die Hintergrundfarbe (der wert der Farbe ist egal da dise in der Nächsten zeile auf Transparent gesetzt wird)
    _WinAPI_SetLayeredWindowAttributes($Array[2], 0xABCDEF, 255) ;der Layer (Layer = eine lage eines Mehrschichtigen Fensters) mit der farbe "0xABCDEF" wird Transparent gestetzt durch den wert 255 = 100% transparent
    GUISetState()
    ;hGraphic
    $Array[3] = _GDIPlus_GraphicsCreateFromHWND($Array[2])
    $Array[4] = _GDIPlus_PenCreate(0xFF0000FF, $Rahmen, 2) ;Blue Rect
    $Array[5] = _GDIPlus_PenCreate(0xFFfa0aa0, ($Rahmen) / 4, 2) ;Pinc Rect

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

    Local $_GDIPlus_GraphicsDrawRectOK1 = _GDIPlus_GraphicsDrawRect($Array[3], $iX_Rect1, $iY_Rect1, $iWidth_Rect1, $iHeight_Rect1, $Array[4]) ;Blue Rect
    If $_GDIPlus_GraphicsDrawRectOK1 = 0 Then
    $Array[10] = @error
    $Array[11] = @ScriptLineNumber
    SetError(3)
    $Array[12] = '$_GDIPlus_StartupOK = ' & $_GDIPlus_StartupOK
    Return $Array
    EndIf

    Local $_GDIPlus_GraphicsDrawRectOK1 = _GDIPlus_GraphicsDrawRect($Array[3], $iX_Rect1, $iY_Rect1, $iWidth_Rect1, $iHeight_Rect1, $Array[5]) ;Blue Rect
    If $_GDIPlus_GraphicsDrawRectOK2 = 'False' Then
    $Array[10] = @error
    $Array[11] = @ScriptLineNumber
    SetError(4)
    $Array[12] = '$_GDIPlus_StartupOK = ' & $_GDIPlus_StartupOK
    Return $Array
    EndIf

    Local $_WinAPI_SetWindowLongOK = _WinAPI_SetWindowLong($Array[2], $GWL_EXSTYLE, BitOR(_WinAPI_GetWindowLong($Array[2], $GWL_EXSTYLE), $WS_EX_TRANSPARENT));ClickThrough
    If $_WinAPI_SetWindowLongOK = 0 Then
    $Array[10] = @error
    $Array[11] = @ScriptLineNumber
    SetError(5)
    $Array[12] = '$_GDIPlus_StartupOK = ' & $_GDIPlus_StartupOK
    Return $Array
    EndIf

    $Array[10] = True
    $Array[11] = @ScriptLineNumber
    $Array[12] = True
    Return $Array

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

    EndFunc ;==>DrawFrame2
    ;Erzeugt GUI$array['GuiName'] und Zeichnet Box

    ;$Array[1] = "Name"
    ;$Array[2] = $hGui
    ;$Array[3] = $hGraphic
    ;$Array[4] = $hPinsel1
    ;$Array[5] = $hPinsel2

    Func ClearFrame($Array)
    _GDIPlus_GraphicsClear($Array[3], 0xFFABCDEF)
    ;Global $hGui = GUICreate("RahmenGui", @DesktopWidth, @DesktopHeight, -1, -1, $WS_POPUP, $WS_EX_LAYERED)
    GUIDelete($Array[2])
    _GDIPlus_PenDispose($Array[4])
    _GDIPlus_PenDispose($Array[5])
    _GDIPlus_GraphicsDispose($Array[3])
    _GDIPlus_Shutdown()

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

    WinClose($Array[1], "")

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

    EndFunc ;==>ClearRect

    [/autoit]


    UND Funktionier :rolleyes::D

    Danke Leute :thumbup:

    [EDIT:] jetzt hat das Code Einfügen funktioniert ohne Zeilenumbrüche :)