![]() |
|
||||||||||
|
|||||||
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | Опции просмотра |
|
![]() |
![]() |
|
|||||
|
Всем привет, вот пытаюсь придумать такую штуку с текстом.
Есть предложение, состоящее из нескольких строк. Нужно вывести это предложение на экран. Необходимо сделать чтобы при нажатии мышой на какое то из слов это слово выделилось, к примеру другим цветом и надо получить номер слова в предложении на которое произвелось нажатие в какую либо переменную. Подскажите как тут поступить и какие возможны способы? зы: текст заранее не известен, есть только массив слов или строка слов разделенных пробелом. |
|
|||||
|
Регистрация: Nov 2005
Сообщений: 1,155
|
Сделай не текстовое поле а набор movieclip с единственным словом в нем.
рабей строку на массив и последовательно аттач мувики со следующими друг за другом словами, выдернутыми из массива. Создай в прототипе мувика свойство onPress которое бы выводило номер этого мувика и перекрашивало его в нужный цвет.. Вроде так |
|
|||||
|
Регистрация: May 2006
Адрес: Город О
Сообщений: 169
|
Если поле - динамическое, со включенным selectable, то можно проверить на какой позиции стоит курсор (объект Selection, метод getCaretIndex).
Потом написать функцию, определяющую какое слово занимает такую позицию. Выяснив слово и определив его начальный и конечный индексы - применить TextFormat для переформатирования слова. Если selectable = false; - то геморрой обеспечен. Конечно можно выяснить какой высоты-ширины текстовое поле, какая гарнитура, попытатся определить длину каждого слова исходя из букв, его составляющих, но уверяю - это будет мерзкое занятие. Тут действительно проще будет составить текст из муви Клипов, и на них уже вешать код. |
|
|||||
|
.grin! wuz here
|
var txt = 'Всем привет, вот пытаюсь придумать такую штуку с текстом.';
txt += 'Есть предложение, состоящее из нескольких строк. Нужно вывести это предложение на экран. Необходимо сделать чтобы при нажатии мышой на какое то из слов это слово выделилось, к примеру другим цветом и надо получить номер слова в предложении на которое произвелось нажатие в какую либо переменную.';
txt += 'Подскажите как тут поступить и какие возможны способы?';
var _txt = this.createTextField('_txt', 0, 0, 0, 500,null);
_txt.html = true;
_txt.autoSize = true;
_txt.selectable = false;
_txt.wordWrap = true;
var arr = txt.split(' ');
var i = arr.length;
while(i--){
arr[i] = '<a href="asfunction:trace, '+i+'">'+arr[i]+'</a>';
}
txt = arr.join(' ');
_txt.htmlText = txt;
|
|
|||||
|
[+1 13.10.2006]
[+1 13.10.06] Регистрация: Sep 2005
Сообщений: 88
|
KidsKilla всех порвал =)
|
|
|||||
|
.grin! wuz here
|
Цитата:
function arr2html(arr) {
var a = arr.concat([])
var i = a.length;
while (i--) {
a[i] = '<a href="asfunction:fun, '+i+'">'+a[i]+'</a>';
}
return a.join(' ');
}
function fun(num:String):Void {
var a:Array = arr.concat([]);
var n:Number = parseInt(num);
trace('"'+a[n]+'": '+n)
a[n] = '<font color="#FF0000">'+a[n]+'</font>';
_txt.htmlText = arr2html(a);
}
var txt = 'Всем привет, вот пытаюсь придумать такую штуку с текстом.';
txt += 'Есть предложение, состоящее из нескольких строк. Нужно вывести это предложение на экран. Необходимо сделать чтобы при нажатии мышой на какое то из слов это слово выделилось, к примеру другим цветом и надо получить номер слова в предложении на которое произвелось нажатие в какую либо переменную.';
txt += 'Подскажите как тут поступить и какие возможны способы?';
var _txt = this.createTextField('_txt', 0, 0, 0, 500, null);
_txt.html = true;
_txt.autoSize = true;
_txt.selectable = false;
_txt.wordWrap = true;
var arr = txt.split(' ');
_txt.htmlText = arr2html(arr);
Последний раз редактировалось KidsKilla; 04.08.2006 в 18:46. |
|
|||||
|
Ветеран форума
|
Как вариант
my_array = ["Вот", "такое", "вот", "предложение", "получается", "бла-бла-бла"];
F_createText = function () {
_root.createTextField("tf", 1, 10, 10, 530, 420);
with (tf) {
border = true;
html = true;
}
//
var len = my_array.length;
firstIndex = 0;
lastIndex = 0;
for (var i = 0; i<len; i++) {
lastIndex += my_array[i].length+1;
if (i != 0) {
firstIndex = lastIndex-my_array[i].length-1;
}
tf.htmlText += '<a href=\"asfunction:F_change,'+firstIndex+','+lastIndex+'\">'+my_array[i]+" </a>";
}
};
F_createText();
//
F_change = function (index) {
a = index.split(",");
//
var str = tf.text.substring(a[0], a[1]);
tf.replaceText(a[0], a[1], str.toUpperCase());
};
__________________
BestMasterиZация |
|
|||||
|
.grin! wuz here
|
Цитата:
кстати, в одинарных кавычках двойные экранировать не надо... |
|
|||||
|
Всё гениальное просто
Не думал, что можно было все так сделать без гемора на пару дней. Спасибо вам друзья ![]() KidsKilla, расскажи секрет, почему слова начинают нажиматься как кнопки, и что значит эта строчка: |
|
|||||
|
Регистрация: Nov 2005
Сообщений: 1,155
|
вот еще накалякал, может подойдет?
|
![]() |
![]() |
Часовой пояс GMT +4, время: 00:59. |
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | |
| Опции просмотра | |
|
|