Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 1.0/2.0 (http://www.flasher.ru/forum/forumdisplay.php?f=93)
-   -   Как узнать положение каретки в текстовом поле? (http://www.flasher.ru/forum/showthread.php?t=113611)

crazyone 03.07.2008 16:55

Как узнать положение каретки в текстовом поле?
 
Все мы знаем(надеюсь) о существовании класса Selection, а у него — метода getCaretIndex(). Он хороший, но он возвращает значение с начала строки в поле. Это удобно, если текстовое поле однострочное. Но у меня многострочное поле и мне нужен номер строки, в которой находится каретка, а еще лучше — ее координаты на сцене.
Кто-нибудь сталкивался с этим? Как решать?
Спасибо.

Wolsh 03.07.2008 19:06

Как часто надо узнавать? Теоретически есть способ с битмапдатой, но несколько раз в секунду наверно тяжеловато будет))

crazyone 03.07.2008 19:15

*артистично*
С битмапдатой? Да это же извращение! Рассказывайте поподробней.

А классических поз способов нет?

iNils 03.07.2008 20:39

Цитата:

Сообщение от crazyone (Сообщение 749855)
С битмапдатой? Да это же извращение! Рассказывайте поподробней.

Классом Selection выбирается символ (он принимает квадратный черную рамку), снимается скрин и детектится рамка.

Wolsh 03.07.2008 20:45

Аксакалы говорили, что если, узнав положение каретки в строке и сделав предварительно весь текст белым, выделить из сего текста символ перед кареткой, а потом сфотать эту красоту в битмапдату, можно будет увидеть черный прямоугольник на белом фоне! Так говорят. Еще говорят, что знающие люди могут догадаться по форме этого прямоугольника, где была каретка - в точности до пикселя, чтоб мне провалиться! Говорят, они используют для этого инструмент с дьявольским названием getColorBoundsRect()! Я сказал всё что знаю.

А нет, не всё. Номер строки можно узнать maxscroll-ом, но чето он гонит ошибку.

crazyone 04.07.2008 16:42

Клевый способ. Мне нравится. Нет, правда. Спасибо за него.
А еще варианты есть?
maxscroll'ом можно количество строк узнать, а не номер строки.

Wolsh 04.07.2008 16:52

Цитата:

maxscroll'ом можно количество строк узнать, а не номер строки.
Копируем текст до каретки, создаем временное текстовое поле высотой в одну строку но такой же ширины, забиваем туда проверяемый текст, вешаем на него формат исходного поля и спрашиваем maxscroll. Достаточно извращенно? К сожалению ошибается уже примерно к пятой стоке, и далее ошибка накапливается.
Пока не поборол((((

qazwsx 04.07.2008 17:00

Нужно знать что содержит твое поле. Например если бы каждая строка заканчивалась переводом строки то все было бы легко -_-

crazyone 04.07.2008 17:07

Цитата:

Сообщение от qazwsx (Сообщение 750070)
Нужно знать что содержит твое поле. Например если бы каждая строка заканчивалась переводом строки то все было бы легко -_-

У меня, кстати, в каком-то проекте был недометод в классе, ставящий переносы в конец строк текстового поля:

Код:

        private function correctSting(str){
                return str;
                var tmpstr=this.body_tf.text;
                this.body_tf.text=str;
                var lines=this.body_tf.bottomScroll+this.body_tf.maxscroll;
                var i=this.body_tf.text.length;
                while(i!=-1){
                        var str=this.body_tf.text;
                        i=String(this.body_tf.text).lastIndexOf(" ",i-1);
                        this.body_tf.text=String(this.body_tf.text).slice(0,i+1)+"\n"+String(this.body_tf.text).slice(i+1,this.body_tf.text.length);
                        if(lines!=this.body_tf.bottomScroll+this.body_tf.maxscroll){
                                this.body_tf.text=str;
                        }
                }
                var res=this.body_tf.text;
                this.body_tf.text=tmpstr;
                return res;
        }

Цитата:

Копируем текст до каретки, создаем временное текстовое поле высотой в одну строку но такой же ширины, забиваем туда проверяемый текст, вешаем на него формат исходного поля и спрашиваем maxscroll. Достаточно извращенно? К сожалению ошибается уже примерно к пятой стоке, и далее ошибка накапливается.
Пока не поборол((((
О, тема. Сейчас буду делать.

qazwsx 04.07.2008 17:17

Ну также можно поле сделать однострочныйм туда забить весь текст, затем сделать селекшен и посмотреть значение scroll >_<


Часовой пояс GMT +4, время: 16:27.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.