Форум 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)
-   -   Редактирование TextField, цвет введеного текста. (http://www.flasher.ru/forum/showthread.php?t=89205)

Andrew_J 09.12.2006 23:42

Редактирование TextField, цвет введеного текста.
 
Имеется 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);
};

Подскажите как это реализовать?

silin 10.12.2006 01:30

что-то типа такого может сработать:
Код:

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;
                }
        }
};


Andrew_J 10.12.2006 02:05

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

Может запретить Ctrl+V какнибудь, чтобы не портить дело или думать ещё какой страшный алгоритм...

silin 10.12.2006 12:07

внимательно не смотрел, но часть проблем снимает
Код:

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);
};


Andrew_J 10.12.2006 13:41

ммм, это уже лучше, вероятность незакрасить введенный символ почти ноль :p

silin, спасибо за помощь :drinks:


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

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