Popup-GUI verschieben

  • Hi,
    Ich habe ne GUI die als Popup deklariert ist.
    Nun kann man diese nicht so einfach verschieben.

    Habe ne Verschiebefunktion gebastelt (danke pee für den Tipp :D)

    Ist dies so OK, oder würdet ihr es anders machen?

    Spoiler anzeigen
    [autoit]

    #include <GUIConstants.au3>
    #include <Misc.au3>

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

    $dll = DllOpen("user32.dll")

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

    GUICreate("My GUI", 200, 300, 200, 200, $WS_POPUP) ; will create a dialog box that when displayed is centered
    GUISetState (@SW_SHOW) ; will display an empty dialog box

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

    ; Run the GUI until the dialog is closed
    While 1
    $msg = GUIGetMsg()
    Select

    Case $msg = $GUI_EVENT_CLOSE
    ExitLoop
    EndSelect

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

    If _IsPressed("01", $dll) Then
    $mousepos = MouseGetPos()
    $winpos = WinGetPos("My GUI", "")
    If $mousepos[0] >= $winpos[0] And $mousepos[0] <= ($winpos[0] +$winpos[2]) And _
    $mousepos[1] >= $winpos[1] And $mousepos[1] <= ($winpos[1] +$winpos[3]) Then
    Do
    $mousepos2 = MouseGetPos()
    WinMove("My GUI", "", $winpos[0]-$mousepos[0]+$mousepos2[0], $winpos[1]-$mousepos[1]+$mousepos2[1])
    Until Not _IsPressed("01", $dll)
    EndIf
    EndIf
    Wend

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

    DllClose($dll)

    [/autoit]
  • Is gut so - funktioniert doch prima.
    Höchstens noch in die Do Until Schleife ein Sleep(15) mit reinpacken - das senkt die Prozessorlast drastisch.

    Hatte vor einiger Zeit mal was ähnliches gebaut - allerdings als OnEvent-Funktion.
    Falls also jemand, wie ich, nicht so auf Message-Loop steht:

    Spoiler anzeigen
    [autoit]

    #include <GUIConstants.au3>

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

    Opt("GUIOnEventMode", 1)

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

    HotKeySet("{ESC}", "Ende")

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

    GUICreate("Test", 200, 200, -1, -1, $WS_POPUP)
    GUISetBkColor(0)
    GUISetOnEvent($GUI_EVENT_PRIMARYDOWN, "_PrimeDown")
    GUISetState(@SW_SHOW)

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

    While 1
    Sleep(100)
    WEnd

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

    Func _PrimeDown()
    Local $DifX, $DifY, $MouseData = GUIGetCursorInfo(@GUI_WinHandle)
    Local $WinPos = WinGetPos(@GUI_WinHandle)
    Local $MPos = MouseGetPos()

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

    $DifX = $MPos[0] - $WinPos[0]
    $DifY = $MPos[1] - $WinPos[1]

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

    While $MouseData[2]
    $MPos = MouseGetPos()
    $WinPos = WinGetPos(@GUI_WinHandle)

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

    If ($WinPos[0] <> ($MPos[0] - $DifX)) Or ($WinPos[1] <> ($MPos[1] - $DifY)) Then
    WinMove(@GUI_WinHandle, '', $MPos[0] - $DifX, $MPos[1] - $DifY)
    EndIf

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

    Sleep(15)

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

    $MouseData = GUIGetCursorInfo(@GUI_WinHandle)
    WEnd
    EndFunc

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

    Func Ende()
    Exit
    EndFunc

    [/autoit]