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.
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.
Vllt hilft dir das?
[ gelöst ] Bildschirmauschnittscreenshot - Rahmen ziehen mit Maus - Wie?
Dieses Thema kenn ich schon. Gibt es da keine Alternative, ich denke das geht doch einfacher.
Dieses Thema kenn ich schon. Gibt es da keine Alternative, ich denke das geht doch einfacher.
ich würde die Funktion _IsPressed nehmen;
1. Position erfassen wenn linke Maustaste gedrückt wird
2. Position erfassen wenn linke Maustaste losgelassen wird
3. Ausgabe der beiden Positionen bzw. der daraus errechneten Abmessungen
Und dann mit GDI+ malöööööööhn
Aber ich glaub auch das das leichter geht..
Mit MouseSetOnEvent funktioniert das so: (benötigt BETA oder _WinAPI_SetLayeredWindowAttributes)
;#BETA
#include "WindowsConstants.au3"
#include "WinAPI.au3"
#include "MouseSetOnEvent\MouseSetOnEvent_UDF.au3"
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)
$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])
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
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
Func MousePrimaryUp_Event()
$RUNNING = 0
EndFunc
Danke für eure Antworten!
Zitat2. 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.
Func _markierung()
$gui_maus = GUICreate("", @DesktopWidth, @DesktopHeight, -1, -1, $WS_POPUP)
WinSetTrans($gui_maus, "", 10)
GUISetState()
GUISetCursor(3, 1)
[/autoit] [autoit][/autoit] [autoit]While 1
If _IsPressed("01") Then ;Wenn die linke Mausstate geklickt wird.
$mausbewegung = MouseGetPos()
ExitLoop
EndIf
WEnd
While 1
If Not _IsPressed("01") Then ;Wenn die Linke Mausstate losgelassen wird.
$mausbewegungende = MouseGetPos()
ExitLoop
EndIf
WEnd
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])
GUISetCursor(2, 0)
EndFunc
Alles anzeigenSpoiler anzeigen
[autoit]Func _markierung()
[/autoit] [autoit][/autoit] [autoit]
$gui_maus = GUICreate("", @DesktopWidth, @DesktopHeight, -1, -1, $WS_POPUP)
WinSetTrans($gui_maus, "", 10)
GUISetState()GUISetCursor(3, 1)
[/autoit] [autoit][/autoit] [autoit]While 1
[/autoit] [autoit][/autoit] [autoit]
If _IsPressed("01") Then ;Wenn die linke Mausstate geklickt wird.
$mausbewegung = MouseGetPos()
ExitLoop
EndIf
WEndWhile 1
[/autoit] [autoit][/autoit] [autoit]
If Not _IsPressed("01") Then ;Wenn die Linke Mausstate losgelassen wird.
$mausbewegungende = MouseGetPos()
ExitLoop
EndIf
WEndGUIDelete($gui_maus)
[/autoit] [autoit][/autoit] [autoit]GUICtrlSetData($b_x_achse, $mausbewegung[0])
[/autoit] [autoit][/autoit] [autoit]
GUICtrlSetData($b_y_achse, $mausbewegung[1])
GUICtrlSetData($b_breite, $mausbewegungende[0] - $mausbewegung[0])
GUICtrlSetData($b_hoehe, $mausbewegungende[1] - $mausbewegung[1])GUISetCursor(2, 0)
[/autoit]
EndFunc
genau so hatte ich es gemeint, ich hätte die While´s zwar verschachtelt, hat aber gleichen Effekt .............