↑  ←  Описание функции


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