![]() |
|
||||||||||
|
|||||||
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | Опции просмотра |
|
![]() |
![]() |
|
|
|
|||||
|
Имеется TextField с текстом в нем, к примеру черного цвета. Этот TextField можно редактировать, необходимо чтобы все изменения отображались хайлайтом, т.е. другим цветом.
Пример: Текст до редактирования: "Lorem ipsum dolor sit amet, consectetuer adipiscing elit" После редактирования: "Lorem ipsum la-la consectetuer next adipiscing elit" Пробовал делать чтото с input_txt.onChanged, но ничего хорошего из этого не вышло this.createTextField("input_txt", 999, 34, 105, 530, 156);
input_txt.border = true;
//input_txt.selectable = false;
input_txt.wordWrap = true;
input_txt.multiline = true;
input_txt.type = "input";
input_txt.size = 20;
input_txt.background = 0x3052C0;
input_txt.color = 0xFF0000;
input_txt.text = "Lorem ipsum dolor sit amet, consectetuer adipiscing elit.";
var text_old:String = input_txt.text;
var text_new:String;
var i:Number;
input_txt.onChanged = function(textfield_txt:TextField) {
text_new = input_txt.text;
trace(text_new);
if (text_old<>text_new) {
i = 0;
maxlen = Math.max(text_old.length, text_new.length);
while ((i<maxlen) && (text_old.charAt(i) == text_new.charAt(i))) {
i++;
}
j = 0;
while ((j<maxlen) && (text_old.charAt(text_old.length-j) == text_new.charAt(text_new.length-j))) {
j++;
}
j2 = text_new.length-j;
trace(i+':'+j+':'+j2);
}
text_old = input_txt.text;
var my_fmt:TextFormat = input_txt.getTextFormat();
my_fmt.color = 0xFF0000;
input_txt.setTextFormat(i, j2+1, my_fmt);
};
|
|
|||||
|
что-то типа такого может сработать:
this.createTextField("input_txt", 999, 34, 105, 530, 156);
input_txt.border = true;
input_txt.wordWrap = true;
input_txt.multiline = true;
input_txt.type = "input";
input_txt.size = 20;
input_txt.background = 0x3052C0;
input_txt.color = 0xFF0000;
input_txt.text = "Lorem ipsum dolor sit amet, consectetuer adipiscing elit.";
var text_old:String = input_txt.text;
var tf=new TextFormat();
tf.color=0xFF0000;
var i:Number;
input_txt.onChanged = function(textfield_txt:TextField) {
var oldArr=text_old.split("");
var newArr=this.text.split("");
text_old=this.text;
if(newArr.length<oldArr.length)return;//только удаление
for(var i=0;i<newArr.length;i++) {//добавление и замена
if(newArr[i]!=oldArr[i]){
//trace(i)
this.setTextFormat(i,i+1,tf);
return;
}
}
};
|
|
|||||
|
Получается почти тоже самое, но работает для ввода повторяющихся символов, в отличае от моего, однако если вставить кусок текста, то срабатывает лишь для первого символа.
Да и также случается, что при вводе какойто символ возьмёт и не закрасится посреди слова(( Может запретить Ctrl+V какнибудь, чтобы не портить дело или думать ещё какой страшный алгоритм... |
|
|||||
|
внимательно не смотрел, но часть проблем снимает
var text_old:String = input_txt.text;
var tf=new TextFormat();
tf.color=0xFF0000;
input_txt.onChanged = function(textfield_txt:TextField) {
var oldArr=text_old.split("");
var newArr=this.text.split("");
text_old=this.text;
var dn=newArr.length-oldArr.length;
if(dn==1){
var indx1=Selection.getCaretIndex();
this.setTextFormat(indx1-1,indx1,tf);
}
for(var indx1=0;indx1<newArr.length;indx1++) if(newArr[indx1]!=oldArr[indx1]) break;
for(var indx2=newArr.length;indx2;indx2--) if(newArr[indx2]!=oldArr[indx2-dn]) break;
this.setTextFormat(indx1,indx2+1,tf);
};
|
|
|||||
|
ммм, это уже лучше, вероятность незакрасить введенный символ почти ноль
silin, спасибо за помощь ![]() |
![]() |
![]() |
Часовой пояс GMT +4, время: 01:30. |
|
|
« Предыдущая тема | Следующая тема » |
|
|