Eine func durch eine andere beenden

  • so

    ich probier mich mal n bissel mit der idleit von gtaspider und dem screensaver von xp_fan

    und jetz hab ich folgendes problem

    das zeichnen des screensavers soll bei bewegen der maus oder bei einem tastendruck beendet werden

    so sieht mein script jetz aus


    Spoiler anzeigen
    [autoit]

    #include <GDIPlus.au3>
    #include <WindowsConstants.au3>
    #include <Misc.au3>
    #include "IdleIt.au3"

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

    _IdleIt_Initalize(3)
    _IdleIt_Hook($IDLEIT_IDLE,"_Main")
    _IdleIt_Hook($IDLEIT_BACK,"_idleend")

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

    _GDIPlus_Startup()
    Global $hGUI, $hWnd, $hGraphic, $loopexit = 0, $pos[2]
    Global $iX = @DesktopWidth, $iY = @DesktopHeight, $rOO = 117, $r0 = 170, $r1 = 190, $r2 = 380, $r3 = 420, $i = 100
    Global $Pi = 4 * ATan(1)
    Global $hWnd = GUICreate("GDI+", @DesktopWidth, @DesktopHeight, 0, 0, $WS_POPUP, $WS_EX_Topmost)
    WinSetTrans($hWnd,"",0)
    Global $hGraphic = _GDIPlus_GraphicsCreateFromHWND($hWnd)
    ;_GDIPlus_GraphicsSetSmoothingMode($hGraphic, 2)
    Global $hPen = _GDIPlus_PenCreate(0xFFFF0000)
    Global $hPen2 = _GDIPlus_PenCreate(0xFFFF0000)
    Global $hPen3 = _GDIPlus_PenCreate(0xFFFF0000)
    Global $hPen4 = _GDIPlus_PenCreate(0xFFFF0000)
    Global $hPen5 = _GDIPlus_PenCreate(0xFF0000FF)
    Global $hPenBlack = _GDIPlus_PenCreate(0xFF000000)
    Global $Colors[8] = [0xFFFF0000, 0xFF0000FF, 0xFF00FF00, 0xFF8B00FF, 0xFFFFA100, 0xFFFFFF00, 0xFFFFFFFF, 0xFF00FFFF]
    HotKeySet("{ESC}", "Ende")
    While 1
    WEnd

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

    Func _Main()
    GUISetCursor(16)
    GUISetBkColor(0x000000)
    GUISetState()

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

    For $i = 0 To 255 Step 5
    WinSetTrans($hWnd,"",$i)
    Sleep(10)
    Next

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

    While 1
    _GDIPlus_PenSetColor($hPen, $Colors[Random(0, 7, 1)])
    _GDIPlus_PenSetColor($hPen2, $Colors[Random(0, 7, 1)])
    _GDIPlus_PenSetColor($hPen3, $Colors[Random(0, 7, 1)])
    _GDIPlus_PenSetColor($hPen5, $Colors[Random(0, 7, 1)])
    Sleep(500)
    For $i = 360 To 0 Step -0.5

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

    ;~ hier is das ganze gdi+ zeugs

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

    Next

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

    WEnd
    EndFunc ;==>_Main

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

    Func _back()
    ;Oh! Welcome back user! Hide the balck gui now
    GUISetState()
    For $i = 255 To 0 Step -5
    WinSetTrans($hWnd,"",$i)
    Sleep(10)
    Next
    GUISetState(@SW_HIDE)
    EndFunc

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

    Func Ende()
    _GDIPlus_PenDispose($hPen)
    _GDIPlus_GraphicsDispose($hGraphic)
    _GDIPlus_Shutdown()
    Exit
    EndFunc ;==>Ende

    [/autoit]


    Jetz soll die func _Main durch die Func _back beendet werden

    Wie mach ich das am besten

  • Hallo.

    Du musst die Funktion, die die Funktion beenden soll, also _back, in _Main dauernd aufrufen.
    Von der _back Funktion soll, wenn eine Bedingung erfüllt ist, 1 zurück gegeben werden.
    In der _Main Funktion soll gecheckt werden, ob _back 1 entspricht, und dann beendet werden, durch return.
    Hoffe ich konnte dir helfen.
    MfG. PrideRage

    Meine Projekte:
    ClipBoard Manager (beendet)
    Gutes ClipBoard Verwaltungs Programm mit nützlichen Funktionen.

    HTML Creator (beendet)
    Nützliches Tool um schnell ein eigenes HTML Dokument zu erstellen.

  • Dann mach es doch so:
    in die _Main schreibste

    [autoit]


    ...
    If _back Then ExitLoop

    [/autoit]

    und die _back lässte ein Return 1 zurückgeben.

    Edit: Mist zu langsam;)

  • das musst du auch nach dem zeichnen aufrufen, je nachdem wann du sie aufrufen willst.

  • Dann frage doch einfach mit MouseGetPos dauernd die maus ab und wenn es sich dann ändert, startest du die Func.