cursor bzw steuerelement, das dem mauszeiger folgt blinkt

  • hi,
    ich habe ein script geschrieben, das dem mauszeiger folgt.
    leider hört es nicht auf zu blinken. selbst mit anderen wiederholraten, die weitaus übertrieben sind (alle ~15ms wurde ein neues bild generiert).
    spart man zeile 23 aus, läuft es fast flackerfrei. gäbe es da eine andere möglichkeit die elemente grafisch darzustellen?

    [autoit]


    #include <Array.au3>
    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>

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

    Opt("GuiOnEventMode", 1)
    TraySetState(2)

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

    $air = GUICreate("test", 301, 401, 344, 203)
    GUISetOnEvent($GUI_EVENT_CLOSE, "exit_")
    $Pic1 = GUICtrlCreatePic(@ScriptDir & "\back.bmp", 0, 0, 300, 400)
    $Pic2 = GUICtrlCreatePic(@ScriptDir & "\cursor.bmp", 300, 400, 30, 30)
    GUISetState(@SW_SHOW)
    Global $timer = TimerInit()

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

    $delay = 30
    While 1
    $time = TimerDiff($timer)
    If $time > $delay Then
    $timer = TimerInit()
    If WinActive("test") = 1 Then
    loadbackground_()
    cursor_()
    EndIf
    EndIf
    WEnd

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

    Func loadbackground_()
    GUICtrlSetImage($Pic1, @ScriptDir & "\back.bmp")
    EndFunc

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

    Func cursor_()
    $pos = GUIGetCursorInfo()
    GUICtrlDelete($Pic2)
    If IsArray($pos) = 1 Then
    $Pic2 = GUICtrlCreatePic(@ScriptDir & "\cursor.bmp", $pos[0] - 15, $pos[1] - 15, 30, 30)
    EndIf
    EndFunc

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

    Func exit_()
    Exit
    EndFunc

    [/autoit]

    mfg bocky

    Einmal editiert, zuletzt von bocky3 (8. September 2009 um 11:28)

  • flackerfrei^^

    Spoiler anzeigen
    [autoit]

    #include <Array.au3>
    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>

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

    Opt("GuiOnEventMode", 1)
    TraySetState(2)

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

    $air = GUICreate("test", 301, 401, 344, 203)
    GUISetOnEvent($GUI_EVENT_CLOSE, "exit_")
    $Pic1 = GUICtrlCreatePic(@ScriptDir & "\back.bmp", 0, 0, 300, 400)
    $Pic2 = GUICtrlCreatePic(@ScriptDir & "\cursor.bmp", 300, 400, 30, 30)
    GUISetState(@SW_SHOW)
    Local $mausaltx = 0, $mausalty = 0

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

    While 1
    If WinActive("test") = 1 Then
    $mausneu = GUIGetCursorInfo() ;mausposition holen
    If $mausaltx <> $mausneu[0] Or $mausalty <> $mausneu[1] Then ;nur wenn maus bewegt wurde
    $mausaltx = $mausneu[0]
    $mausalty = $mausneu[1]
    cursor_()
    EndIf
    EndIf
    WEnd

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

    Func cursor_()
    GUICtrlSetPos($Pic2, $mausneu[0] - 15, $mausneu[1] - 15)
    EndFunc ;==>cursor_

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

    Func exit_()
    Exit
    EndFunc ;==>exit_

    [/autoit]

    ciao
    Andy


    "Schlechtes Benehmen halten die Leute doch nur deswegen für eine Art Vorrecht, weil keiner ihnen aufs Maul haut." Klaus Kinski
    "Hint: Write comments after each line. So you can (better) see what your program does and what it not does. And we can see what you're thinking what your program does and we can point to the missunderstandings." A-Jay

    Wie man Fragen richtig stellt... Tutorial: Wie man Script-Fehler findet und beseitigt...X-Y-Problem

    Einmal editiert, zuletzt von Andy (7. September 2009 um 19:10)

  • danke ^^

    es hat aber schon gereicht GUICtrlSetPos zu verwenden. dennoch bleibe ich bei der zeitl steuerung, da noch mehrere objekte eingefügt werden, die sich bewegen und es damit einfacher ist diese zu berechnen. (geschwindigkeiten, beschleunigungen) geht zwar leider auf den prozessor, aber iwas is ja immer.
    was mir aufgefallen ist, manchmal passiert es bei WinActive, dass er dennoch in die bedingung springt, wenn man gerade eien andere applikation in den fordergrund schiebt. deshalb hab ich nochmal überprüft ob ein array vorliegt. :)