Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 1.0/2.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 09.12.2006, 23:42
Andrew_J вне форума Посмотреть профиль Отправить личное сообщение для Andrew_J Найти все сообщения от Andrew_J
  № 1  
Ответить с цитированием
Andrew_J

Регистрация: Aug 2004
Сообщений: 110
Отправить сообщение для Andrew_J с помощью ICQ
Post Редактирование 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);
};
Подскажите как это реализовать?

Старый 10.12.2006, 01:30
silin вне форума Посмотреть профиль Посетить домашнюю страницу silin Найти все сообщения от silin
  № 2  
Ответить с цитированием
silin
 
Аватар для silin

блогер
Регистрация: Mar 2003
Адрес: Моск. обл.
Сообщений: 5,269
Записей в блоге: 6
что-то типа такого может сработать:
Код:
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;
		}
	}
};

Старый 10.12.2006, 02:05
Andrew_J вне форума Посмотреть профиль Отправить личное сообщение для Andrew_J Найти все сообщения от Andrew_J
  № 3  
Ответить с цитированием
Andrew_J

Регистрация: Aug 2004
Сообщений: 110
Отправить сообщение для Andrew_J с помощью ICQ
Получается почти тоже самое, но работает для ввода повторяющихся символов, в отличае от моего, однако если вставить кусок текста, то срабатывает лишь для первого символа.
Да и также случается, что при вводе какойто символ возьмёт и не закрасится посреди слова((

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

Старый 10.12.2006, 12:07
silin вне форума Посмотреть профиль Посетить домашнюю страницу silin Найти все сообщения от silin
  № 4  
Ответить с цитированием
silin
 
Аватар для silin

блогер
Регистрация: Mar 2003
Адрес: Моск. обл.
Сообщений: 5,269
Записей в блоге: 6
внимательно не смотрел, но часть проблем снимает
Код:
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);
};

Старый 10.12.2006, 13:41
Andrew_J вне форума Посмотреть профиль Отправить личное сообщение для Andrew_J Найти все сообщения от Andrew_J
  № 5  
Ответить с цитированием
Andrew_J

Регистрация: Aug 2004
Сообщений: 110
Отправить сообщение для Andrew_J с помощью ICQ
ммм, это уже лучше, вероятность незакрасить введенный символ почти ноль

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

Создать новую тему Ответ Часовой пояс GMT +4, время: 01:30.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


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


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