Verschieben von GUI Objekten

  • Hallo com,

    Ist es möglich seine plazierten Objekte (Group, Label,...) im Nachhinein zu verschieben (Drag & Drop)?

    Damit meine ich sowas wie
    (onMouseDown) {
    $label.startDrag()
    }

    Mit
    GUICtrlSetPos() kann ich zwar die Position ändern...aber woher weiß mein Programm ob denn die MausTaste oder eine Andere gedrückt ist??


    Was ich suche ist also ein Drag & Drop Skript, der auf MouseDown u.ä. reagiert

    2 Mal editiert, zuletzt von DarkPurple (28. Dezember 2009 um 13:29)

    • Offizieller Beitrag
    Zitat

    GUICtrlSetPos() kann ich zwar die Position ändern...aber woher weiß mein Programm ob denn die MausTaste oder eine Andere gedrückt ist??

    Erkläre das mal genauer.Was hat jetzt die Poitionsänderung mit deiner Maustaste zu tun? Du kannst auch ControlMove benutzen.

    Zitat

    Damit meine ich sowas wie
    (onMouseDown) {
    $label.startDrag()
    }

    Ist kein Autoit Code.

  • Zitat

    Erkläre das mal genauer.Was hat jetzt die Poitionsänderung mit deiner Maustaste zu tun? Du kannst auch ControlMove benutzen.


    Bei der drag/drop Funktion wird ja im normalfall ein Objekt angesteuert und ihm gesagt "Bewege dich zu mausposition x,y"
    Dafür brauch ich die Maus =)
    Ausgelöst wird es durch MouseDown und upgedated durch MouseMove...

    Ist kein Autoit Code.

    Ja ich weiß..leider - aber dachte so wisst ihr gleich wie ich das meine

  • Hallo DarkPurple,

    suchst du vielleicht so etwas?

    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")
    $hlabel = GUICtrlCreateLabel("Verschieb mich",20,120,100,25)
    GUICtrlSetOnEvent($hlabel,"_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]


    mfg (Auto)Bert

    ps.: deine Fragestellung ist sehr unklar, hoffe dass meine Kristallkugel den richtigen >Treffer hatte

    • Offizieller Beitrag

    Hey,Autobert.

    Das Script ist Cool. Ich glaub ich mach davon eine UDF. Sowas kann man immer brauchen. :thumbup:

  • Jap genau sowas meinte ich - ein einfaches Drag & Drop halt =)

    werd trotzdem nochmal meine Fragestellung im Eröffnungspost ändern; danke

  • Hallo DarkPurple,

    schön dass der Schuss ins Blaue ein Treffer war.

    Raupi , das Ursprungs-Skript stammt aus der Feder von @ChaosKeks (bei der Func _DragMe vermerkt). Einziger Nachteil: man kann Controls hinter andere schieben (z.B. ein Label hinter ein Bild), vielleicht kannst du das ja berücksichtigen?

    mfg (Auto)Bert