Auswahlmarkierung mit Angaben (Position, Breite und Höhe)

  • Hallo Leute,

    ich möchte gerne eine Auswahlmarkierung mit der Maus erstellen können, die vier Werte zurückgibt: X, Y, Breite und Höhe.
    Um es Verständlicher zu machen, habe ich ein Bild hochgeladen.

  • Dieses Thema kenn ich schon. Gibt es da keine Alternative, ich denke das geht doch einfacher.

  • Und dann mit GDI+ malöööööööhn ^^

    Aber ich glaub auch das das leichter geht.. 8|

  • Mit MouseSetOnEvent funktioniert das so: (benötigt BETA oder _WinAPI_SetLayeredWindowAttributes)

    Spoiler anzeigen
    [autoit]

    ;#BETA
    #include "WindowsConstants.au3"
    #include "WinAPI.au3"
    #include "MouseSetOnEvent\MouseSetOnEvent_UDF.au3"

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

    Global $STARTPOS[1]
    Global $hMainGUI = GUICreate("test", 10, 10, 0, 0, BitOR($WS_POPUP,$WS_BORDER) , BitOR($WS_EX_LAYERED,$WS_EX_TOPMOST))
    GUISetBkColor(0xFFFFFF)
    _WinAPI_SetLayeredWindowAttributes($hMainGUI, 0xFFFFFF, 200)

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

    $RUNNING = 1
    _MouseSetOnEvent($MOUSE_PRIMARYDOWN_EVENT, "MousePrimaryDown_Event")
    While $RUNNING
    Sleep(100)
    WEnd
    _MouseSetOnEvent($MOUSE_PRIMARYUP_EVENT) ;Enable mouse button back.
    _MouseSetOnEvent($MOUSE_MOVE_EVENT)
    _MouseSetOnEvent($MOUSE_PRIMARYDOWN_EVENT) ;Enable mouse button back.
    $TheCoords = WinGetPos($hMainGUI)
    GUISetState(@SW_HIDE)
    MsgBox(0, '', "Das Rechteck: " &@CRLF & "X: " & $TheCoords[0] &@CRLF & "Y: " & $TheCoords[1]&@CRLF & "W: " & $TheCoords[2]&@CRLF & "H: " & $TheCoords[3])

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

    Func MousePrimaryDown_Event()
    $STARTPOS = MouseGetPos()
    WinMove($hMainGUI, "", $STARTPOS[0], $STARTPOS[1], 1, 1)
    GUISetState()
    _MouseSetOnEvent($MOUSE_MOVE_EVENT, "MouseMove_Event", "", "", 0, 0)
    _MouseSetOnEvent($MOUSE_PRIMARYUP_EVENT, "MousePrimaryUp_Event")
    EndFunc

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

    Func MouseMove_Event()
    Local $NEWPOS = MouseGetPos()
    Local $x=$STARTPOS[0], $y=$STARTPOS[1], $w=$NEWPOS[0]-$STARTPOS[0], $h=$NEWPOS[1]-$STARTPOS[1]
    If $w<0 Then $x = $NEWPOS[0]
    If $h<0 Then $y = $NEWPOS[1]
    WinMove($hMainGUI, "", $x, $y, Abs($w), Abs($h))
    EndFunc

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

    Func MousePrimaryUp_Event()
    $RUNNING = 0
    EndFunc

    [/autoit]
  • Danke für eure Antworten!

    latemail

    Zitat

    2. Position erfassen wenn linke Maustaste losgelassen wird

    Geht das auch mit _IsPressed("") Befehl? Denn ich habe nur ein Befehl gefunden, wenn man auf die linke Maustaste drauf klickt, aber nicht loslässt.

  • Ok danke Leute. Ich habe es jetzt so ähnlich gemacht wie latemail es geschrieben hat, nur halt ohne Markierung.

    Spoiler anzeigen
    [autoit]

    Func _markierung()
    $gui_maus = GUICreate("", @DesktopWidth, @DesktopHeight, -1, -1, $WS_POPUP)
    WinSetTrans($gui_maus, "", 10)
    GUISetState()

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

    GUISetCursor(3, 1)

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

    While 1
    If _IsPressed("01") Then ;Wenn die linke Mausstate geklickt wird.
    $mausbewegung = MouseGetPos()
    ExitLoop
    EndIf
    WEnd

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

    While 1
    If Not _IsPressed("01") Then ;Wenn die Linke Mausstate losgelassen wird.
    $mausbewegungende = MouseGetPos()
    ExitLoop
    EndIf
    WEnd

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

    GUIDelete($gui_maus)

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

    GUICtrlSetData($b_x_achse, $mausbewegung[0])
    GUICtrlSetData($b_y_achse, $mausbewegung[1])
    GUICtrlSetData($b_breite, $mausbewegungende[0] - $mausbewegung[0])
    GUICtrlSetData($b_hoehe, $mausbewegungende[1] - $mausbewegung[1])

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

    GUISetCursor(2, 0)
    EndFunc

    [/autoit]
  • genau so hatte ich es gemeint, ich hätte die While´s zwar verschachtelt, hat aber gleichen Effekt .............