Динамическое задание выделения. Метод setSelection()

Самой важной для практики задачей из тех, которые позволяют решать методы объекта Selection, является динамическое выделение произвольного участка текста поля. Служит для этого особый метод setSelection(). Он принимает 2 параметра: первый определяет индекс символа, который начинает подлежащую выделению последователь гость, второй — соответствует индексу символа, перед которым выделяемый участок текста заканчивается.

Метод setSelection() выделяет фрагмент текста того поля, которое в данный момент располагается в фокусе. Поэтому, прежде чем его использовать, нужно проверить, необходимое ли поле активно. Сделать это можно при помощи метода getFocus(). Если окажется, что в фокусе находится иное поле (или активных полей нет в принципе), то фокус необходимо перевести на нужный элемент, используя метод setFocus().

При динамическом создании выделения курсор ввода автоматически перемещается к последнему выделенному символу.

Если выделяется участок текста, который располагается за пределами видимой области поля, то автоматически будет осуществлена прокрутка так, чтобы он отобразился. Это позволяет не беспокоиться о реализации соответствующего механизма дополнительно.




Типичным примером использования метода setSelection() является организация возможности поиска в текстовых полях фильма. Если ваш Flash-сайт содержит большие объемы текстовой информации, то создать соответствующий инструмент просто необходимо. Иначе у пользователя могут возникнуть сложности при работе с вашим ресурсом, обусловленные тем, что стандартная функция браузера по поиску на странице в случае Flash-сайта не работает.

Для тренировки мы создадим код, позволяющий осуществлять поиск в одном текстовом поле. При необходимости сделать его более универсальным не составит труда. Итак:

1. Создаем при помощи инструмента Text большое (приблизительно 200x200 пикселей) динами-ческое текстовое поле. Называем его pole.

2. Связываем с созданным полем текст (500—1000 знаков).

3. Создаем небольшое поле типа Input, в которое будет вводиться строка, которую нужно найти. Называем его str.

4. Добавляем в фильм кнопку, нажатие которой будет активизировать поиск. Называем ее but.

5. Основная идея алгоритма инструмента поиска следующая:

o Приводим текст поля и искомую строку к одному регистру при помощи метода toLowerCase() или toUpperCase().


Это необходимо сделать, чтобы строка находилась
вне зависимости оттого, начинает ли она предложение ил и располагается в его середине.

o Ищем необходимую строку, начиная от символа, которым был завершен прошлый поиск. Найти подстроку в строке позволяет метод indexOf() класса String.

o Если подстрока будет найдена, ее нужно выделить. Также в специальной переменной необходимо отметить, какой индекс имеет последний символ выделенной последовательности. Эта информация пригодится, если поиск будет продолжен.

o Если необходимая подстрока на участке поиска найдена не была, значит, до конца
текста она больше не встречается. Это означает, что поиск нужно начать сначала.

Описанному алгоритму соответствует следующий код:

var index:Number = 0; // Индекс символа, на котором был завершен
// прошлый этап поиска
// Переменная, хранящая искомую строку
var stroke:String="";
function poisk():Void {
// Приводим текст поля и искомый текст к полному регистру
var big_text:String = pole.text.toLowerCase();
var stroke:String = stroka.toLowerCase();
// Ищем подстроку stroka с позиции index
var search_res = big_text.indexOf(stroka, index);
// Если подстрока найдена, выделяем ее и переопределяем index
if (search_res!= -1) {
index = search_res+stroka.length;
Selection.setFocus(pole);
Selection.setSelection(search_res, search_res+stroka.length);
} else { // Если подстрока не найдена, начинаем поиск сначала index = 0;
index = 0;
}
}

6.


При нажатии кнопки but должен осуществляться очередной этап поиска. Для этого нужно переопределить переменную stroke и запустить функцию poisk(). Использовать можно событие onRelease, но не onPress, так как иначе выделение будет пропадать при отпускании кнопки мыши:

but.onRelease = function{):Void {
stroka=str.text;
poisk();
};

Оцените статью: (0 голосов)
0 5 0

Статьи из раздела Action Script на эту тему:
Автоматическое удаление пробелов. Свойство condenseWhite
Встраивание в фильм целого шрифта
Динамическая замена выделенного текста. Метод replaceSel()
Задание и извлечение текста поля
Копирование текста в буфер обмена

Вернуться в раздел: Action Script / 13. Работа с текстом