GDI $hPen Problem

  • Moin all
    Ich hab ein Problem mit dieser GDI, laut Hilfe kann ich nichts falsch gemacht haben
    aber trotzdem funzt die Sachen nicht 8|

    Spoiler anzeigen
    [autoit]


    #include <GuiConstantsEx.au3>
    #include <GDIPlus.au3>

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

    Opt('MustDeclareVars', 1)

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

    _Main()

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

    Func _Main()
    Local $hGUI, $hGraphic

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

    $hGUI = GUICreate("GDI+", 400, 300)
    GUISetState()

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

    _GDIPlus_Startup ()
    $hGraphic = _GDIPlus_GraphicsCreateFromHWND ($hGUI)
    $hPen = _GDIPlus_PenCreate(0xFFFF11FF, 3)
    _GDIPlus_GraphicsDrawArc ($hGraphic, 160, 100, 10, 10, 180, 360, $hPen)
    _GDIPlus_GraphicsDrawArc ($hGraphic, 180, 100, 10, 10, 180, 360, $hPen)
    _GDIPlus_GraphicsDrawArc ($hGraphic, 160, 104, 30, 30, 160, -140, $hPen)
    _GDIPlus_GraphicsDrawArc ($hGraphic, 140, 80, 70, 70, 180, 360, $hPen)

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

    Do
    Until GUIGetMsg() = $GUI_EVENT_CLOSE

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

    _GDIPlus_GraphicsDispose ($hGraphic)
    _GDIPlus_Shutdown ()

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

    EndFunc ;==>_Main

    [/autoit]


    Hat jemand eine Ahnung was hier ("nicht") passiert ?

    Einmal editiert, zuletzt von Dial (27. November 2010 um 13:31)

    • Offizieller Beitrag

    Hat jemand eine Ahnung was hier ("nicht") passiert ?


    Beim Ausführen bekommst du zwangsläufig bereits eine Fehlermeldung, die dir genau sagt, wo der Hammer hängt. ;)
    Das Bsp. legt fest, dass alle Variablen zu deklarieren sind:

    [autoit]

    Opt('MustDeclareVars', 1)

    [/autoit]

    und wie BadBunny bereits richtig bemerkte fehlt die Deklaration von $hPen - und genau das steht wortwörtlich auch in der Fehlermeldung. :whistling:

  • So geht es:

    Spoiler anzeigen
    [autoit]


    #include <GuiConstantsEx.au3>
    #include <GDIPlus.au3>

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

    Opt('MustDeclareVars', 1)

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

    _Main()

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

    Func _Main()
    Local $hGUI, $hGraphic, $hPen

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

    $hGUI = GUICreate("GDI+", 400, 300)
    GUISetState()

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

    _GDIPlus_Startup ()
    $hGraphic = _GDIPlus_GraphicsCreateFromHWND ($hGUI)
    $hPen = _GDIPlus_PenCreate(0xFFFF11FF, 3)
    _GDIPlus_GraphicsDrawArc ($hGraphic, 160, 100, 10, 10, 180, 360, $hPen)
    _GDIPlus_GraphicsDrawArc ($hGraphic, 180, 100, 10, 10, 180, 360, $hPen)
    _GDIPlus_GraphicsDrawArc ($hGraphic, 160, 104, 30, 30, 160, -140, $hPen)
    _GDIPlus_GraphicsDrawArc ($hGraphic, 140, 80, 70, 70, 180, 360, $hPen)

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

    Do
    Until GUIGetMsg() = $GUI_EVENT_CLOSE

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

    _GDIPlus_GraphicsDispose ($hGraphic)
    _GDIPlus_Shutdown ()

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

    EndFunc ;==>_Main

    [/autoit]

    Du musst wie gesagt $hPen noch dekalrieren - das will der Mode "MustDeclareVars" so.
    Du kannst aber auch einfach diesen Modus ausschalten, in dem du die entsprechende Zeile rausnimmst - dann geht's auch so. (Hab ehrlich gesagt nie verstanden, was dieser Modus bringen soll)

  • Den Opt Mode kannt ich auch noch nicht.
    Denn $xxx = xxx deklariert und füllt doch zugleich wie ich bisher lernte.
    Oki wieder etwas schlauer :P

    Vielen Dank an die Helfenden

    • Offizieller Beitrag

    Du kannst aber auch einfach diesen Modus ausschalten, in dem du die entsprechende Zeile rausnimmst - dann geht's auch so. (Hab ehrlich gesagt nie verstanden, was dieser Modus bringen soll)


    Dieser Modus ist sehr sinnvoll (leider nicht zwingend implementiert).
    Das Nichtdeklarieren von Variablen verleitet sehr schnell zu einer schlampigen Programmierung. Wenn du das erste mal stundenlange Fehlersuche betrieben hast, weil du versehentlich Variablen im falschen Scope verwendest oder doppelt belegst, dann weißt du diese Option zu schätzen. ;)
    Ich kann gerade Anfängern empfehlen von Anbeginn diesen Modus zu verwenden.