- Offizieller Beitrag
Hi,
da MouseGetPos uns mit der Standard Opt('MouseCoordMode') die absoluten Koordinaten liefert und ich i.A. nicht für das ganze Skript den Modus ändern möchte, habe ich mal die Schritte (Mode wechseln, Koordinaten ermitteln, zurück zu altem Mode) in einer Funktion zusammengefasst mit einem optionalen Parameter zur Berücksichtigung (einer evtl. vorhandenen) Titelleiste. Denn das Fenster beginnt für die relativen Koordinaten am Fensterrand.
Falls ein randloser Style verwendet wird, gibt es hier kleine Differenzen. Da ich die Positionsabfrage aber selten pixelgenau benötige, ist das wenig dramatisch.
Syntax (und Rückgabe) identisch zu MouseGetPos, zusätzlicher Parameter True/False für Titelhöhe berücksichtigen.
Falls es wer braucht:
Spoiler anzeigen
Func _MouseGetPosRel($i=-1, $fAddTitleHeight=False)
Local $ret, $iTitleHeight = 0, $iBorder
If $fAddTitleHeight Then
; === Höhe Caption
$ret = DllCall("user32.dll", "long", "GetSystemMetrics", "long", 4)
$iTitleHeight = $ret[0]
EndIf
; === Höhe Border
$ret = DllCall("user32.dll", "long", "GetSystemMetrics", "long", 6)
$iBorder = $ret[0]
If $fAddTitleHeight Then $iTitleHeight += 2*$iBorder
Local $old = Opt('MouseCoordMode', 0)
Local $aM = MouseGetPos()
Opt('MouseCoordMode', $old)
Switch $i
Case 0
Return $aM[0] -$iBorder
Case 1
Return $aM[1] -$iTitleHeight
Case Else
$aM[0] -= $iBorder
$aM[1] -= $iTitleHeight
Return $aM
EndSwitch
EndFunc
Es funktioniert für XP, aber wie ich schon gehört habe, liefert Systemmetrics bei Win7 wohl fehlerhafte Werte. Könnt ihr ja testen.