Этот полезный getCharBoundaries()...

Да, действительно полезный. Ведь метод getCharBoundaries() позволяет реализовать в флеш-приложениях тот функционал, которого так не хватает во Flash (особенно тем, кто имел дело с HTML). Немного упрощая, можно сказать, что метод getCharBoundaries принимает индекс символа в строке, а возвращает данные о координатах и размере блока с данным символом в текстовом поле.

На практике данный метод используется, как правило, в двух случаях:

1.) Внедрение визуальных объектов в текстовое поле.

В качестве внедряемых объектов могут выступать компоненты, поля ввода и т. д.. Допустим, что мы создаём тест, в котором пользователю надо вводить какие-то данные. Есть следующий вопрос:

Город Псков основан в 903 году.

Наша задача в том, чтобы вместо 903 пользователь видел поле ввода, куда ему предстоит ввести свою версию правильного ответа.

Код ActionScript 3.0:

/* импорт классов */ import flash.display.Sprite; import flash.text.*; import flash.geom.Rectangle; /* спрайт-контейнер, внутрь которого мы поместим все текстовые поля */ var conteinerText:Sprite = new Sprite(); conteinerText.graphics.beginFill(0x999999,1); conteinerText.graphics.drawRect(0,0,550,400); conteinerText.graphics.endFill(); addChild(conteinerText); /* форматирование текстовых полей */ var textFormat:TextFormat = new TextFormat(); textFormat.color = 0x333333; textFormat.font = "_serif"; textFormat.size = 32; textFormat.bold = true; /* динамическое текстовое поле */ var txtField:TextField = new TextField(); txtField.defaultTextFormat = textFormat; txtField.width = 550; txtField.height = 400; txtField.text = "Город Псков основан в 903 году."; conteinerText.addChild(txtField); /* поле ввода */ var txtInput:TextField = new TextField(); txtInput.type = TextFieldType.INPUT; txtInput.defaultTextFormat = textFormat; txtInput.border = true; txtInput.background = true; conteinerText.addChild(txtInput); /* с помощью метода getCharBoundaries настраиваем размеры поля ввода и помещаем его в нужные координаты */ var rect:Rectangle = txtField.getCharBoundaries(22); txtInput.x = rect.x; txtInput.y = rect.y; txtInput.height = rect.height; rect = txtField.getCharBoundaries(24); txtInput.width = rect.x + rect.width - txtInput.x;

Результат:

Да, выглядит не очень красиво, но суть, думаю, раскрыта :-)

2.) Подсветка подстроки в текстовом поле.

Оставляем прежнее текстовое поле и прежний текст. Но теперь мы дату будем не накрывать полем ввода, а подсвечивать ядовито-красным цветом...

Код ActionScript 3.0:

/* импорт классов */ import flash.display.Sprite; import flash.text.*; import flash.geom.Rectangle; /* спрайт-контейнер */ var conteinerText:Sprite = new Sprite(); conteinerText.graphics.beginFill(0x999999,1); conteinerText.graphics.drawRect(0,0,550,400); conteinerText.graphics.endFill(); addChild(conteinerText); /* форматирование */ var textFormat:TextFormat = new TextFormat(); textFormat.color = 0x333333; textFormat.font = "_serif"; textFormat.size = 32; textFormat.bold = true; /* динамическое текстовое поле */ var txtField:TextField = new TextField(); txtField.defaultTextFormat = textFormat; txtField.width = 550; txtField.height = 400; txtField.text = "Город Псков основан в 903 году."; conteinerText.addChild(txtField); /* с помощью метода getCharBoundaries получаем координаты и размеры подсвечиваемой области */ var rectHighlighting:Rectangle = new Rectangle(); var rect:Rectangle = txtField.getCharBoundaries(22); rectHighlighting.x = rect.x; rectHighlighting.y = rect.y; rectHighlighting.height = rect.height; rect = txtField.getCharBoundaries(24); rectHighlighting.width = rect.x + rect.width - rectHighlighting.x; /* рисуем подстветку */ conteinerText.graphics.beginFill(0xff0000,1); conteinerText.graphics.drawRect(rectHighlighting.x,rectHighlighting.y,rectHighlighting.width,rectHighlighting.height); conteinerText.graphics.endFill();

Результат:

Если вы внимательно смотрели код, то, возможно, у вас появился вопрос: «Да откуда, б..., он взял 22 и 24?!» Если честно, то я их подсчитал вручную (считать надо с начала строки, причём счёт идёт не с 1, а с 0 + учитываются пробелы). Это не совсем правильный подход. В ActionScript-е есть встроенные инструменты для автоматизации данной операции. Но, как говорит Леонид Каневский: «Впрочем, это уже совсем другая история...» :-)

Автор: admin

Дата добавления: 2013-11-06

Просмотров: 3312

Рейтинг поста: +5-

Правила перепечатки

Социальные закладки:
Комментарии:
К данной заметке комментариев пока нет. Ваш комментарий может стать первым.
Добавить комментарий:







[ + ] помощь по форматирование текста

Идиот-тест

Если все обязательные поля (отмечены * ) заполнены необходимой информацией, то нажимаем кнопку Добавить комментарий.

Меню
Подписка
Рубрики
Метки
Последние комментарии
Рейтинг постов
Реклама
Друзья
География гостей
Статистика
Яндекс.Метрика