Bild in GUI per Maus verschieben

  • Hallo,
    nach einiger Zeit hab ich mal wieder eine Frage und zwar sieht meine Situation so aus:

    Ich habe eine GUI auf der ein Bild liegt, jetzt soll wenn ich mit der gedrückten Maustaste auf dem Bild bleib das Bild dem Mauszeiger folgen... Lass ich die Maustaste los soll das Bild nicht mehr folgen und mir die aktuelle Position auf der GUI verraten. Also x und y werte.

    Hoffe ich habe mich verständlich ausgedrückt, wenn nicht fragt einfach nochmal nach ;)

    mfg
    Icynator

    EDIT: also so wie im Koda Form Designer ^^ wenn man n bild i-wo hin verschiebt...

    2 Mal editiert, zuletzt von Icynator (5. Oktober 2009 um 20:37)

  • So? (musst $bild, $pic_width und $pic_height anpassen):

    Spoiler anzeigen
    [autoit]

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

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

    $dll = DllOpen("user32.dll")
    Global $pic_width = 69
    Global $pic_height = 51
    Global $bild = @ScriptDir & "\Bild.jpg"

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

    $gui = GUICreate("Bild", 475, 337, 193, 125)
    $pic = GUICtrlCreatePic($bild, 152, 88, $pic_width, $pic_height, BitOR($SS_NOTIFY,$WS_GROUP,$WS_CLIPSIBLINGS))
    GUISetState(@SW_SHOW)

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $gui_EVENT_CLOSE
    DllClose($dll)
    Exit
    Case $GUI_EVENT_PRIMARYDOWN
    $mPos = GUIGetCursorInfo($gui)
    If $mPos[4] = $pic Then
    While _IsPressed("01", $dll)
    $mPos = GUIGetCursorInfo($gui)
    $pPos = ControlGetPos($gui, '', $Pic)
    ControlMove($gui, '', $pic, $mPos[0] - ($pic_width / 2), $mPos[1] - ($pic_height / 2))
    WEnd
    EndIf

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

    EndSwitch
    WEnd

    [/autoit]

    MfG xXTobi93Xx

  • Hallo Icynator,

    so z.B.:

    Spoiler anzeigen
    [autoit]

    ; *** Start added by AutoIt3Wrapper ***
    #include <StaticConstants.au3>
    ; *** End added by AutoIt3Wrapper ***
    #Region ;**** Directives created by AutoIt3Wrapper_GUI ****
    #AutoIt3Wrapper_Add_Constants=n
    #EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
    #include <ListviewConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
    #include <SliderConstants.au3>
    #Include <GuiListView.au3>
    #Include <Array.au3>
    #Include <File.au3>
    #Include <Misc.au3>

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

    Opt("GUIOnEventMode", 1)
    ;Global $posXStart, $posYStart, $posXStop, $posYStop, $pic, $hGui, $Pos_M2 = MouseGetPos()

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

    $hGUI = GUICreate("Transparent", 575, 510)
    GUISetOnEvent($GUI_EVENT_CLOSE, "_Ex")
    $insert = GuiCtrlCreateButton("Insert Pic" ,10,10)
    GuiCtrlSetOnEvent(-1, "_insert")
    $Pic=GUICtrlCreatePic("", 50, 50)
    GuiCtrlSetOnEvent(-1, "_DragMe")
    $hsplitter1 = GUICtrlCreateLabel("",270, 125, 8, 205,-1,$SS_BLACKFRAME)
    ;GUICtrlSetColor(-1,0xffffff)
    ;GUICtrlSetResizing(-1, $GUI_DOCKLEFT +$GUI_DOCKSIZE + $GUI_DOCKTOP)
    GUICtrlSetOnEvent($hsplitter1,"_DragMe")

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

    GUISetState(@SW_SHOW)

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

    While 1
    sleep(100)
    WEnd

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

    Func _insert()
    GuiCtrlDelete($pic)
    $bild = FileOpenDialog("Wählen Sie eine Datei aus!", @WindowsDir & "\", "Bilder (*.jpg;*.bmp)", 1 + 4 )
    $Pic = GUICtrlCreatePic($bild, 150, 150)
    GuiCtrlSetOnEvent(-1, "_DragMe")
    EndFunc

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

    Func _DragMe() ;Orginal zum verschieben von 1 Bild von ChaosKeks
    Local $Pos_C, $Pos_M, $Pos_M2, $Opt_old
    Local $dll = DllOpen("user32.dll")
    $Opt_old = Opt('MouseCoordMode', 0)
    $Pos_C = ControlGetPos($hGui, "", @GUI_CtrlId);$pic)
    $Pos_M = MouseGetPos()
    $Pos_W = WinGetPos($hGui)
    $x_Offset = $Pos_M[0] - $Pos_C[0]
    $y_Offset = $Pos_M[1] - $Pos_C[1]
    _MouseTrap($Pos_W[0]+$x_Offset,$Pos_W[1]+$y_Offset,$Pos_W[0]+$Pos_W[2],$Pos_W[1]+$Pos_W[3])
    While _IsPressed('01', $dll)
    $Pos_M = MouseGetPos()
    If $Pos_M <> $Pos_M2 Then
    GUICtrlSetPos(@GUI_CtrlId,$Pos_M[0] - $x_Offset, $Pos_M[1] - $y_Offset)
    sleep(10)
    EndIf
    $Pos_M = $Pos_M2
    sleep(50)
    WEnd
    DllClose($dll)
    Opt('MouseCoordMode', $Opt_old)
    _MouseTrap()
    EndFunc

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

    Func _Ex()
    Exit
    EndFUnc

    [/autoit]

    Viel Spaß damit ;)

    mfg (Auto)Bert

  • Den befehl _MouseTrap habe ich bis jetzt noch garnicht gekannt ^^
    Man lernt jeden Tag dazu!

    Hab in mein Skript auch mal _MouseTrap bisschen umgeändert rein gemacht so das man immer das ganze bild sieht:

    Spoiler anzeigen
    [autoit]

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

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

    $dll = DllOpen("user32.dll")
    Global $pic_width = 69
    Global $pic_height = 51
    Global $bild = @ScriptDir & "\Bild.jpg"

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

    $gui = GUICreate("Bild", 475, 337, 193, 125)
    $pic = GUICtrlCreatePic($bild, 152, 88, $pic_width, $pic_height, BitOR($SS_NOTIFY,$WS_GROUP,$WS_CLIPSIBLINGS))
    GUISetState(@SW_SHOW)

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $gui_EVENT_CLOSE
    DllClose($dll)
    Exit
    Case $GUI_EVENT_PRIMARYDOWN
    $mPos = GUIGetCursorInfo($gui)
    If $mPos[4] = $pic Then
    While _IsPressed("01", $dll)
    $mPos = GUIGetCursorInfo($gui)
    $pPos = ControlGetPos($gui, '', $pic)
    ControlMove($gui, '', $pic, $mPos[0] - ($pic_width / 2), $mPos[1] - ($pic_height / 2))
    $wPos = WinGetPos($gui)
    $x_Offset = $mPos[0] - $pPos[0]
    $y_Offset = $mPos[1] - $pPos[1] + ($pic_height / 2)
    _MouseTrap($wPos[0]+$x_Offset, $wPos[1]+$y_Offset, $wPos[0]+$wPos[2]-($pic_width / 2), $wPos[1]+$wPos[3]-($pic_height / 2))
    WEnd
    _MouseTrap()
    EndIf
    EndSwitch
    WEnd

    [/autoit]

    MfG xXTobi93Xx
    Click Ctrl-C to copy. (hides when lost focus)