WinMove auf Mausposition zieht zuerst weg ..

  • Probiere es mal damit:

    Spoiler anzeigen
    [autoit]


    #cs ----------------------------------------------------------------------------

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

    AutoIt Version: 3.3.8.0
    Author: myName

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

    Script Function:
    Template AutoIt script.

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

    #ce ----------------------------------------------------------------------------
    #include <GUIConstantsEx.au3>
    #include "GUICreateTransparent.au3"
    #Include <Misc.au3>
    Global Const $SC_DRAGMOVE = 0xF012
    $hGUI = _GUICreate_Transparent(@ScriptDir & "\UglyBird.png",300,200)
    $hChild = GUICreate("Form1", 321, 347, 124, 142,$WS_POPUP,$WS_EX_LAYERED+$WS_EX_MDICHILD, $hGUI)
    GUISetBkColor(0x000000,$hChild)
    GUISetState(@SW_SHOW, $hGUI)
    GUISetState(@SW_SHOW, $hChild)
    _WinAPI_SetLayeredWindowAttributes($hChild, 0x123456, 0xff)
    WinSetOnTop($hChild, "", 0)
    $dll = DllOpen("user32.dll")

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

    GUIRegisterMsg($WM_LBUTTONDOWN, "_WM_LBUTTONDOWN")

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

    While 1
    ;~ _CheckMove()
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    DllClose($dll)
    GUIRegisterMsg($WM_LBUTTONDOWN, "")
    Exit
    EndSwitch
    WEnd

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

    Func _WM_LBUTTONDOWN($hWnd, $iMsg, $wParam, $lParam)
    _SendMessage($hGUI, $WM_SYSCOMMAND, $SC_DRAGMOVE, 0)
    EndFunc ;==>_WM_LBUTTONDOWN

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

    Func _CheckMove()
    If _IsPressed("01", $dll) Then
    sleep(20)
    $Pos = MouseGetPos()
    WinMove($hChild,"",$Pos[0] + 124,$Pos[1] + 142) ; + 124 , weil Left von $hGUI 123 weniger ist als bei $hChild, + 142, wegen Top
    WinMove($hGUI,"",$Pos[0],$Pos[1])
    EndIf
    EndFunc

    [/autoit]

    Gruß,
    UEZ

    Auch am Arsch geht ein Weg vorbei...

    ¯\_(ツ)_/¯

  • Danke für die schnelle Antwort.

    Ich möchte es jedoch gerne ohne diesen GUIRegisterMsg haben, da es sonst Probleme beim Verändern der Position für mich gibt.

    Hättest du vielleicht eine Idee, wie dies mit _IsPressed realisierbar wäre?

    Mfg, Julien

  • Sowas?

    Spoiler anzeigen
    [autoit]


    #cs ----------------------------------------------------------------------------

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

    AutoIt Version: 3.3.8.0
    Author: myName

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

    Script Function:
    Template AutoIt script.

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

    #ce ----------------------------------------------------------------------------
    #include <GUIConstantsEx.au3>
    #include "GUICreateTransparent.au3"
    #Include <Misc.au3>
    $iGW = 300
    $iGH= 200
    $hGUI = _GUICreate_Transparent(@ScriptDir & "\UglyBird.png",$iGW,$iGH)
    $iW = 321
    $iH = 347
    $iPosX=124
    $iPosY=142
    $hChild = GUICreate("Form1", $iW, $iH, $iPosX,$iPosY,$WS_POPUP,$WS_EX_LAYERED+$WS_EX_MDICHILD, $hGUI)
    GUISetBkColor(0x000000,$hChild)
    GUISetState(@SW_SHOW, $hGUI)
    GUISetState(@SW_SHOW, $hChild)
    _WinAPI_SetLayeredWindowAttributes($hChild, 0x123456, 0xff)
    WinSetOnTop($hChild, "", 0)
    $dll = DllOpen("user32.dll")

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

    While 1
    _CheckMove()
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    DllClose($dll)
    GUIRegisterMsg($WM_LBUTTONDOWN, "")
    Exit
    EndSwitch
    WEnd

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

    Func _CheckMove()
    If _IsPressed("01", $dll) Then
    sleep(20)
    $Pos = MouseGetPos()
    WinMove($hGUI,"",$Pos[0]-$iW/2-$iPosX, $Pos[1]-$iH/2-$iPosY) ; + 124 , weil Left von $hGUI 123 weniger ist als bei $hChild, + 142, wegen Top
    ;~ WinMove($hGUI,"",$Pos[0]-$aPosWin[0],$Pos[1]-$aPosWin[1])
    EndIf
    EndFunc

    [/autoit]

    Gruß,
    UEZ

    Auch am Arsch geht ein Weg vorbei...

    ¯\_(ツ)_/¯

  • Tut mir leid, hat sich doch noch nicht erledigt.

    Ich möchte es ohne dieses MDI Child haben.

    Ich habe hier es noch einmal die Differenz von x und y vorher und nachher errechnet, vielleicht weißt du nun, was ich meine.

    *egal

    3 Mal editiert, zuletzt von Julien (21. Februar 2012 um 12:41)