WinGetCaretPos
Возвращает координаты каретки (курсор в текстовом поле) активного окна
WinGetCaretPos ( )
Возвращаемое значение
Успех: | Возвращает 2-х элементный массив, содержащий следующую информацию: |
$array[0] = X-координата | |
$array[1] = Y-координата | |
Ошибка: | Устанавливает @error равным 1. |
Примечания
WinGetCaretPos не может возвратить точные значения для Multiple Document Interface (MDI) приложений, если используются режим абсолютных координат в CaretCoordMode. Смотрите пример для решения проблемы. Примечание: Некоторые приложения передают статические координаты независимо от позиции каретки!См. также
CaretCoordMode (Опция)Пример
; Пример 1
GUICreate('Координаты каретки', 350, 360)
$e = GUICtrlCreateEdit('Вводите текст', 10, 30, 310, 280)
GUISetState()
Do
$a = WinGetCaretPos()
ToolTip('x=' & $a[0] & ', y=' & $a[1], $a[0] + 10, $a[1] + 30) ; добавляем координаты элемента 10 и 30
Until GUIGetMsg() = -3
GUIDelete()
; ===========================================
; Пример 2
Local $aCaretPos = WinGetCaretPos()
If Not @error Then
ToolTip("Первый метод получения координат", $aCaretPos[0], $aCaretPos[1])
EndIf
Sleep(2000)
; ===========================================
; Пример 3
$aCaretPos = _WinGetCaretPos()
If Not @error Then ToolTip("Второй способ получения координат", $aCaretPos[0], $aCaretPos[1])
Sleep(2000)
; Более надежный способ для получения координат каретки в MDI текстовых редакторах.
Func _WinGetCaretPos()
Local $iXAdjust = 5
Local $iYAdjust = 40
Local $iOpt = Opt("CaretCoordMode", 0) ; Устанавливаем относительный режим и сохраняем предыдущую опцию.
Local $aGetCaretPos = WinGetCaretPos() ; Извлекает относительные координаты каретки.
Local $aGetPos = WinGetPos("[ACTIVE]") ; Извлекает координаты и размеры активного окна.
Local $sControl = ControlGetFocus("[ACTIVE]") ; Извлекает ClassNameNN области с фокусом ввода с клавиатуры.
Local $aControlPos = ControlGetPos("[ACTIVE]", "", $sControl) ; Извлекает координаты и размеры элемента.
$iOpt = Opt("CaretCoordMode", $iOpt) ; Восстанавливает предыдущий режим "CaretCoordMode".
Local $aReturn[2] = [0, 0] ; Создаёт массив, чтобы хранить координаты x, y.
If IsArray($aGetCaretPos) And IsArray($aGetPos) And IsArray($aControlPos) Then
$aReturn[0] = $aGetCaretPos[0] + $aGetPos[0] + $aControlPos[0] + $iXAdjust
$aReturn[1] = $aGetCaretPos[1] + $aGetPos[1] + $aControlPos[1] + $iYAdjust
Return $aReturn ; Возвращает массив.
Else
Return SetError(1, 0, $aReturn) ; Возвращает массив и устанавливает @error = 1.
EndIf
EndFunc