_IsPressed() Problem

  • Hallo,
    ich habe folgendes Problem: Ich möchte zwei verschiedene Mauspositionen durch 2 verschiedene Clicks festlegen,
    aber irgendwie wird _IsPressed() nicht wieder auf false gesetzt, wodurch es für den 2. Click immer "true" ist.
    Kann man _IsPressed() irgendwie "reseten"?

    Danke schonmal für die Hilfe :)


    [autoit]


    #include <GUIConstantsEx.au3>
    #Include <Misc.au3>

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

    Func position1()
    $stacks = InputBox("Stackabfrage","Wie viele Stacks sollen vernichtet werden?")

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


    $pos2Window = GUICreate("Position 2",400,50)
    GUICtrlCreateLabel("Bitte einmal mittig auf das 1. Stack klicken.",20,20)
    GUISetState(@SW_SHOW, $pos2Window)
    WinSetOnTop($pos2Window, "", 1)

    While not _IsPressed("01")
    $msg = GUIGetMsg()
    $mouse = MouseGetPos()

    If $msg = $GUI_EVENT_CLOSE Then
    Exit
    ElseIf _IsPressed("01") Then
    $xpos1 = $mouse[0]
    $ypos1 = $mouse[1]
    GUISetState(@SW_HIDE, $pos2Window)
    EndIf
    WEnd

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

    If $stacks > 1 Then
    $diffWindow = GUICreate("Kalibrierung",400,50)
    GUICtrlCreateLabel("Bitte einmal mittig auf das 2. Stack klicken.",20,20)
    GUISetState(@SW_SHOW, $diffWindow)
    WinSetOnTop($diffWindow, "", 1)

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

    While Not _IsPressed("01")
    $msg = GUIGetMsg()
    $mouse = MouseGetPos()

    If $msg = $GUI_EVENT_CLOSE Then
    Exit
    ElseIf _IsPressed("01") Then
    $diff = $xpos1 - $mouse[0]
    GUISetState(@SW_HIDE, $diffWindow)
    EndIf
    WEnd
    EndIf

    EndFunc

    [/autoit]

    Einmal editiert, zuletzt von DarkCrystal (3. Februar 2011 um 11:31)

  • @DarkCrystal:
    Ich hab nicht wirklich verstanden was du willst...
    Oder willst du einfach nur 2 Mauspositionen speichern?
    Was genau macht denn dein Script? Einen Stack kenn ich nur vom Pokern oder von paar IT-Bereichen...

    versuch mal das hier vor deine zweite schleife zu setzen:

    Die If-Abfrage is doch völlig überflüssig^^

  • Was genau macht denn dein Script?

    Das was ich gepostet habe ist nur eine Funktion aus einem größeren Script, da das Problem aber nur in der Funktion besteht, habe ich nur die Funktion gepostet.
    Wenn der Rest des Scripts von Interesse ist kann ich denn natürlich auch posten, ist aber ziemlich chaotisch ;)

    Zitat

    Einen Stack kenn ich nur vom Pokern oder von paar IT-Bereichen...

    Ja, vom Pokern, weil es sich da um einen "Stapel" handelt, der Begriff wird in einem Spiel verwendet für einen Stapel von 250 gleichen Gegenständen. (e. g. In so ziemlich jedem Spiel sind Heiltränke stapelbar, man kann mehrere gleiche Heiltränke in einem Itemslot aufbewaren) Ich hoffe meine Erklärung war verständlich und nicht zu ausführlich :)

    Oder willst du einfach nur 2 Mauspositionen speichern?

    Ja, die Funktion soll einfach nur 2 Mauspositionen speichern, die dann woanders wiederverwendet werden :)


    andygo
    Ok, klappt perfekt, hab nur die If-Abfrage rausgenommen.


    Danke! :rock:


    Hier dann nochmal der funktionierende Code:

    [autoit]

    Func position1()
    $pos2Window = GUICreate("Position 2",400,50)
    GUICtrlCreateLabel("Bitte einmal mittig auf das 1. Stack klicken.",20,20)
    GUISetState(@SW_SHOW, $pos2Window)
    WinSetOnTop($pos2Window, "", 1)

    While not _IsPressed("01")
    $msg = GUIGetMsg()
    $mouse = MouseGetPos()

    If $msg = $GUI_EVENT_CLOSE Then
    Exit
    ElseIf _IsPressed("01") Then
    $xpos1 = $mouse[0]
    $ypos1 = $mouse[1]
    GUISetState(@SW_HIDE, $pos2Window)
    EndIf
    WEnd

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

    If $stacks > 1 Then
    $diffWindow = GUICreate("Kalibrierung",400,50)
    GUICtrlCreateLabel("Bitte einmal mittig auf das 2. Stack klicken.",20,20)
    GUISetState(@SW_SHOW, $diffWindow)
    WinSetOnTop($diffWindow, "", 1)

    While _IsPressed(01)
    sleep(10)
    Wend

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

    While Not _IsPressed("01")
    $msg = GUIGetMsg()
    $mouse = MouseGetPos()

    If $msg = $GUI_EVENT_CLOSE Then
    Exit
    ElseIf _IsPressed("01") Then
    $diff = $xpos1 - $mouse[0]
    GUISetState(@SW_HIDE, $diffWindow)
    EndIf
    WEnd
    EndIf

    EndFunc

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

    func position2($choice)

    If $choice = 1 Then
    $var ="'Gildenhalle verlassen/betreten'"
    Else
    $var = "Position von 'Blut ist Kraft'"
    EndIf

    $pos2Window = GUICreate("Position 2",400,50)
    GUICtrlCreateLabel("Bitte einmal mittig auf " & $var & " klicken.",20,20)
    GUISetState(@SW_SHOW, $pos2Window)
    WinSetOnTop($pos2Window, "", 1)

    While 1
    $msg = GUIGetMsg()
    $mouse = MouseGetPos()

    If $msg = $GUI_EVENT_CLOSE Then
    Exit
    ElseIf _IsPressed("01", "user32.dll") Then
    $xpos2 = $mouse[0]
    $ypos2 = $mouse[1]
    GUISetState(@SW_HIDE, $pos2Window)
    ExitLoop
    EndIf
    WEnd
    EndFunc

    [/autoit]

    2 Mal editiert, zuletzt von DarkCrystal (3. Februar 2011 um 10:24)