Weg von der Maus

  • Hi all...
    habe mal ne Frage an euch und zwar wenn ich mit

    [autoit]

    MouseGetPos

    [/autoit]

    und

    [autoit]

    GuiCtrlSetPos

    [/autoit]

    arbeite dann habe ich ja z.B. ein Bild an meiner Maus, das dieser folgt...
    Jetzt zu meiner Frage. Kann mir irgendjemand vllcht sagen, wie ich es vom Mauszeiger weg bekomme, dass es sich genau dort absetzt, wo ich mit der Maus gerade bin ?

    hoffe ihr versteht meine Frage.

    mfg Bio

  • ja, das meine ich abaer ich habe keine ahnung wie das gehen soll...

    mfg Bio

  • Das habe ich mir vor ein paar Tagen zusammen gebastelt:

    Da wären einmal die Case Anweisungen der Gui:

    [autoit]


    Case $msg = $GUI_EVENT_PRIMARYUP
    $prim_down = False

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

    Case $msg = $GUI_EVENT_PRIMARYDOWN And Not $prim_down = True
    $prim_down = True

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

    $mouse_x = MouseGetPos( 0 )
    $mouse_y = MouseGetPos( 1 )
    $ctrl_props = ControlGetPos( "[Active]" ,"" , $the_pic )
    $pic_l = $ctrl_props[ 0 ]
    $pic_t = $ctrl_props[ 1 ]

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

    $diff_pic_mouse_l = $mouse_x - $pic_l
    $diff_pic_mouse_w = $mouse_y - $pic_t

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

    Case $prim_down = True
    If $ops_out = False Or $ops_out = True And $mouse_y > 15 + $corr_move_y Then
    _move_pic( $the_pic, $diff_pic_mouse_l, $diff_pic_mouse_w )
    EndIf

    [/autoit]


    Man beachte dabei:

    [autoit]


    Case $msg = $GUI_EVENT_PRIMARYDOWN And Not $prim_down = True
    $prim_down = True

    [/autoit]


    und

    [autoit]

    Case $msg = $GUI_EVENT_PRIMARYUP
    $prim_down = False

    [/autoit]

    Und die entsprechende Funktion:

    [autoit]


    Func _move_pic( $pic_id, $from_x, $from_y )
    $was_moved = True
    $last_mouse_pos_x = $mouse_x
    $last_mouse_pos_y = $mouse_y
    $mouse_x = MouseGetPos( 0 )
    $mouse_y = MouseGetPos( 1 )

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

    $ctrl_props= ControlGetPos( "[Active]", "", $pic_id )
    $ctrl_l = $ctrl_props[ 0 ]
    $ctrl_t = $ctrl_props[ 1 ]

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

    $x_moved_by = $ctrl_l - $pic_start_pos_x
    $y_moved_by = $ctrl_t - $pic_start_pos_y

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

    If $last_mouse_pos_x = $mouse_x And $last_mouse_pos_y = $mouse_y Then
    Else
    $pic_l = - ( $from_x - $mouse_x )
    $pic_t = - ( $from_y - $mouse_y )
    GUICtrlSetPos( $pic_id, $pic_l, $pic_t )
    EndIf
    EndFunc

    [/autoit]

    Wenn du schlau raus wirst sag Bescheid.. wenn nicht dann auch ;)

  • das ist es das suche ich ganze zeit und versuche die ganze zeit es zusmannen zubauen?

    kannst du mir ein beispiel zeigen mit der GUI? vielleicht wenn du zeit hast mit einem Slider für transparents?

    lg SubZero ;)
    ==========================================================================

    "Der Computer ist die logische Weiterentwicklung des Menschen: Intelligenz ohne Moral."

  • Kann ich machen.. hab nur jetzt grad nicht so viel Zeit

    Nur das mit der Transparenz kann ich nicht machen.. ist genau das was ich auch haben will, habs leider noch nicht hinbekommen.. oder jedenfalls nicht akzeptabel^^

  • Hab doch etwas Zeit^^
    Von daher:

    [autoit]


    #include <GUIConstantsEx.au3>

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

    $msg = GUICreate( "Drag and Drop", 600, 400, -1, -1 ) ; Gui erstellen
    $pic = GUICtrlCreatePic( @WindowsDir & "\Web\Wallpaper\Stonehenge.jpg", 10, 10, 150, 100 ) ;Das Bild erstellen

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

    Dim $prim_down = False ; notwendige Variablen
    Dim $pic_start_pos_x, $pic_start_pos_y ; deklarieren

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

    GUISetState( @SW_SHOW )

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

    While 1
    $msg = GUIGetMsg()
    Select
    Case $msg = $GUI_EVENT_CLOSE
    Exit

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

    ;~ Die drei Case Anweisungen
    Case $msg = $GUI_EVENT_PRIMARYUP
    $prim_down = False
    Case $msg = $GUI_EVENT_PRIMARYDOWN And Not $prim_down = True
    $prim_down = True

    $mouse_x = MouseGetPos( 0 )
    $mouse_y = MouseGetPos( 1 )
    $ctrl_props = ControlGetPos( "[Active]" ,"" , $pic )
    $pic_l = $ctrl_props[ 0 ]
    $pic_t = $ctrl_props[ 1 ]

    $diff_pic_mouse_l = $mouse_x - $pic_l
    $diff_pic_mouse_w = $mouse_y - $pic_t
    Case $prim_down = True
    _move_pic( $pic, $diff_pic_mouse_l, $diff_pic_mouse_w )

    EndSelect
    WEnd

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

    ;~ Die Funktion zum verschieben:
    Func _move_pic( $pic_id, $from_x, $from_y )
    ConsoleWrite( $from_x & "," & $from_y &@CRLF)
    $was_moved = True
    $last_mouse_pos_x = $mouse_x
    $last_mouse_pos_y = $mouse_y
    $mouse_x = MouseGetPos( 0 )
    $mouse_y = MouseGetPos( 1 )

    $ctrl_props = ControlGetPos( "[Active]", "", $pic_id )
    $ctrl_l = $ctrl_props[ 0 ]
    $ctrl_t = $ctrl_props[ 1 ]

    $x_moved_by = $ctrl_l - $pic_start_pos_x
    $y_moved_by = $ctrl_t - $pic_start_pos_y

    If $last_mouse_pos_x = $mouse_x And $last_mouse_pos_y = $mouse_y Then
    Else
    $pic_l = - ( $from_x - $mouse_x )
    $pic_t = - ( $from_y - $mouse_y )
    GUICtrlSetPos( $pic_id, $pic_l, $pic_t )
    EndIf
    EndFunc

    [/autoit]
  • Ich bin ja bemüht auch selber was zu machen bin ja ein anfänger ;)
    Habe resizing eingebaut fürs die GUI.
    Hat jemand eine idee wie mann mehrere bilder einfügen könnte

    Spoiler anzeigen
    [autoit]

    $message = "Bild auswählen"
    $bild = FileOpenDialog($message, @WindowsDir & "\", "Bilder (*.jpg;*.bmp)", 1 + 4 )
    $Pic=GUICtrlCreatePic($bild, 150, 150)
    GUISetState(@SW_SHOW , $hGUI)

    [/autoit]

    so könnte mann es ja machen, das gilt aber dann nur für ein Bild wollte ja mehrer einfügen können und einzeln auch entfernen können??!!
    jemand eine idee?

    Spoiler anzeigen
    [autoit]

    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>

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

    $msg = GUICreate( "Drag and Drop", 375, 310, Default, Default, BitOR($WS_MINIMIZEBOX, $WS_MAXIMIZEBOX, $WS_SIZEBOX), $WS_EX_ACCEPTFILES) ; Gui erstellen
    $pic = GUICtrlCreatePic( @WindowsDir & "\Web\Wallpaper\Stonehenge.jpg", 10, 10, 150, 100 ) ;Das Bild erstellen

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

    Dim $prim_down = False ; notwendige Variablen
    Dim $pic_start_pos_x, $pic_start_pos_y ; deklarieren

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

    GUISetState( @SW_SHOW )

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

    While 1
    $msg = GUIGetMsg()
    Select
    Case $msg = $GUI_EVENT_CLOSE
    Exit

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

    ;~ Die drei Case Anweisungen
    Case $msg = $GUI_EVENT_PRIMARYUP
    $prim_down = False
    Case $msg = $GUI_EVENT_PRIMARYDOWN And Not $prim_down = True
    $prim_down = True

    $mouse_x = MouseGetPos( 0 )
    $mouse_y = MouseGetPos( 1 )
    $ctrl_props = ControlGetPos( "[Active]" ,"" , $pic )
    $pic_l = $ctrl_props[ 0 ]
    $pic_t = $ctrl_props[ 1 ]

    $diff_pic_mouse_l = $mouse_x - $pic_l
    $diff_pic_mouse_w = $mouse_y - $pic_t
    Case $prim_down = True
    _move_pic( $pic, $diff_pic_mouse_l, $diff_pic_mouse_w )

    EndSelect
    WEnd

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

    ;~ Die Funktion zum verschieben:
    Func _move_pic( $pic_id, $from_x, $from_y )
    ConsoleWrite( $from_x & "," & $from_y &@CRLF)
    $was_moved = True
    $last_mouse_pos_x = $mouse_x
    $last_mouse_pos_y = $mouse_y
    $mouse_x = MouseGetPos( 0 )
    $mouse_y = MouseGetPos( 1 )

    $ctrl_props = ControlGetPos( "[Active]", "", $pic_id )
    $ctrl_l = $ctrl_props[ 0 ]
    $ctrl_t = $ctrl_props[ 1 ]

    $x_moved_by = $ctrl_l - $pic_start_pos_x
    $y_moved_by = $ctrl_t - $pic_start_pos_y

    If $last_mouse_pos_x = $mouse_x And $last_mouse_pos_y = $mouse_y Then
    Else
    $pic_l = - ( $from_x - $mouse_x )
    $pic_t = - ( $from_y - $mouse_y )
    GUICtrlSetPos( $pic_id, $pic_l, $pic_t )
    EndIf
    EndFunc

    [/autoit]

    lg SubZero ;)
    ==========================================================================

    "Der Computer ist die logische Weiterentwicklung des Menschen: Intelligenz ohne Moral."

  • Dann kannst du einfach mehrere Bilder einfügen:

    [autoit]

    $pic1 = GUICtrlCreatePic( @WindowsDir & "\Web\Wallpaper\Stonehenge.jpg", 10, 10, 150, 100 )
    $pic2 = GUICtrlCreatePic( @WindowsDir & "\Web\Wallpaper\Stonehenge.jpg", 10, 10, 150, 100 )

    [/autoit]


    und in der Funktion kannst du ja die Id des Bildes angeben, welches verschoben werden soll.

    Und dann müsste man das

    [autoit]

    $GUI_EVENT_PRIMARYUP

    [/autoit]

    bzw

    [autoit]

    $GUI_EVENT_PRIMARYUDOWN

    [/autoit]

    mit

    [autoit]

    AND $msg = $pic1

    [/autoit]

    bzw

    [autoit]

    AND $msg = $pic2

    [/autoit]

    erweitern.

    Also z.B.:

    [autoit]

    Case $msg = $GUI_EVENT_PRIMARYDOWN AND $msg = $pic2
    _move_pic( $pic2, $diff_pic_mouse_l, $diff_pic_mouse_w )

    [/autoit]


    Wenn die Gui ein MausDown bekommt UND einen Klick auf das Bild 2 bekommt soll die Funktion das Pic 2 verschieben.

    Habs nicht getestet aber sollte klappen;)

  • Hey,
    Hört sich ja schick an und wie entfernt man bilder?
    Nächste frage hast du zeit? stehe gerade im dunkeln ?(

    lg SubZero ;)
    ==========================================================================

    "Der Computer ist die logische Weiterentwicklung des Menschen: Intelligenz ohne Moral."

  • Um Bilder zu entfernen muss man sich erstmal merken, welches Bild als letztes angewählt wurde, da man ja sonst nicht weiß welches gelöscht werden soll..

    Dazu deklariert man eine Var die bei einem Klick auf ein Bild sich dieses merkt:

    [autoit]


    Case $msg = $GUI_EVENT_PRIMARYDOWN AND $msg = $pic2
    _move_pic( $pic2, $diff_pic_mouse_l, $diff_pic_mouse_w )
    $last_clicked = $pic2

    [/autoit]


    und für andere Bilder halt die entsprechende Var.. $pic1, $pic3, usw..

    Dann kann man, z.B. wenn man "Del" drückt mit

    [autoit]

    GUICtrlDelete( $last_clicked)

    [/autoit]


    das entsprechende Pic wieder löschen.


    Zeit hab ich grad leider nicht da ich arbeiten muss ;)

  • dazu habe ich noch eine frage?

    $pic1 = GUICtrlCreatePic( @WindowsDir & "\Web\Wallpaper\Stonehenge.jpg", 10, 10, 150, 100 )
    $pic2 = GUICtrlCreatePic( @WindowsDir & "\Web\Wallpaper\Stonehenge.jpg", 10, 10, 150, 100 )

    wenn ich aber nur ein button habe wie soll das dann gehen?
    ich will ja nicht für jeden Pic ein button erzeugen?

    lg SubZero ;)
    ==========================================================================

    "Der Computer ist die logische Weiterentwicklung des Menschen: Intelligenz ohne Moral."

  • Genau z.B. Insert Pic.
    ich will ja nicht für jedes Bild ein Button erzeugen??
    Ich will ein Button Bild erzeugen "insert Pic" und einen Bild Löschen "Del Pic"
    und dabei ein neues hinzufügen und entsprechend löschen können und dabei auswählen welches bild ich löschen will.
    eine idee?

    lg SubZero ;)
    ==========================================================================

    "Der Computer ist die logische Weiterentwicklung des Menschen: Intelligenz ohne Moral."

  • Wie wärs mit alle Bilder in einen Array schreiben?

    $pic[ 0 ] = ...
    $pic[ 1 ] = ...
    $pic[ 2 ] = ...


    ;)

  • Bin ja auch ein Lernender ich bin bloss wohl ganz am anfang wie macht man das?

    lg SubZero ;)
    ==========================================================================

    "Der Computer ist die logische Weiterentwicklung des Menschen: Intelligenz ohne Moral."

  • subzero007 also nach all deinen fragen, die du hier im forum schon gestellt hast, behaupte ich einfach mal, das du die hier angebotenen tutorials sowie die autoit eigene hilfe einfach nicht verwendest - und das nervt langsam!

    bevor du hier noch weitere derartige fragen stellst, bin ich schwer dafür, dass du dich mal intensiv mit diesem tutorial, bzw. der hilfe befasst:

    Tutorial: http://wiki.autoit.de/wiki/index.php/Tutorial
    Online Hilfe: http://www.autoit.de/dokumentation_aktuell/AutoIt.htm
    -> zum thema arrays hat bugfix ein sehr schönes tutorial erstellt, welches du dir auch mnal zu gemüte führen kannst: http://www.bug-fix.info/array_tut.htm

    wir helfen hier gern, wie du sicherlich schon festgestellt hast, aber bitte bitte bitte versucht euch doch auch mal selber zu helfen... das bringt nichts, wenn man immer alles gezeigt bekommt...

  • Da stimm ich jetzt mal zu ;)

    Ich bin auch der Meinung dass das was du vorhast nicht unbedingt für einen Anfänger geeignet ist.. Mach lieber erstmal was kleineres

  • ok ich werde mich befassen heisst das jetzt das ich garkeine fragen mehr stellen darf ??

    lg SubZero ;)
    ==========================================================================

    "Der Computer ist die logische Weiterentwicklung des Menschen: Intelligenz ohne Moral."