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

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

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 27.10.2006, 02:39
Хемуль вне форума Посмотреть профиль Отправить личное сообщение для Хемуль Найти все сообщения от Хемуль
  № 1  
Ответить с цитированием
Хемуль
Квач
 
Аватар для Хемуль

Регистрация: Sep 2006
Адрес: Украина, Киев
Сообщений: 1,526
По умолчанию Ограничение ввода в input TextField

Возник вопрос... Допустим, имеется где-нибудь на сцене input TextField с некоторыми размерами. Многострочное поле, без autoSize. Естественно, когда вводим текст, он сперва заполняет собой всю область текстового поля, а затем начинает прокручиваться вверх. При этом срабатывает обработчик события onScroller. Необходимо сделать так, чтобы ввод в поле прекращался, как только текст начинает "вылазить" за пределы прямоугольника текстового поля. То есть, необходимо как-то отследить эту ситуацию и отсечь лишнее. По "лишним" имеется ввиду та часть текста, которая не влезла в прямоугольник поля ввода.
Проблемы:
- Желательно предусмотреть ситуацию, при которой текст не вводится пользователем с клавиатуры посимвольно, а вставляется в поле ввода из буфера обмена.
- Желательно предусмотреть ситуацию, когда текст, вставленный в текстовое поле и помещающийся там целиком без прокрутки вдруг меняет свой стиль, становится больше и начинает вылазить за пределы текстового поля.

Сталкивался ли кто-то с чем-то подобным? Как видите, ограничение идёт не по количеству символов, в по его фактическому размеру в пикселях.
Есть ли какие-то советы у кого-то по поводу того, с чего лучше начать?
__________________
Да не нужно тебе читать документацию по Flash и AS от Adobe - ты слишком умён для этого

Старый 27.10.2006, 02:58
iNils вне форума Посмотреть профиль Отправить личное сообщение для iNils Посетить домашнюю страницу iNils Найти все сообщения от iNils
  № 2  
Ответить с цитированием
iNils
Негуру
 
Аватар для iNils

администратор
Регистрация: Jan 2000
Адрес: Кёнигсберг in Moscow
Сообщений: 21,883
Записей в блоге: 7
На базе этого http://www.flasher.ru/forum/showthread.php?t=86093
Как только количество строк превышает заданное, запускаем метод отсечения лишнего.
__________________
(и)Нильс.ru | Плагины для FlashDevelop

Старый 27.10.2006, 04:00
wvxvw вне форума Посмотреть профиль Отправить личное сообщение для wvxvw Найти все сообщения от wvxvw
  № 3  
Ответить с цитированием
wvxvw
Modus ponens
 
Аватар для wvxvw

модератор форума
Регистрация: Jul 2006
Адрес: #1=(list #1#)
Сообщений: 8,049
Записей в блоге: 38
Код:
var a_txt:TextField = _root.createTextField("a_txt", 0, 0, 0, 200, 100);
var tf:TextFormat = new TextFormat();
tf.size = 20;
tf.font = "_sans";
a_txt.border = true;
a_txt.multiline = true;
a_txt.type = "input";
a_txt.borderColor = 0x000000;
a_txt.wordWrap = true;
a_txt.onChanged = function() {
	a_txt.setTextFormat(tf);
	if (this.maxscroll>1) {
		for (i=0; i<this.length; ) {
			this.text = this.text.substring(-1, this.text.length-1);
			trace(this.text);
			if (checkLength(this.text, this)) {
				break;
			}
			i++;
		}
	}
};
function checkLength(_str:String, _txt:TextField):Boolean {
	_txt.text = _str;
	_txt.setTextFormat(_root.tf);
	if (_txt.maxscroll>1) {
		return false;
	} else {
		return true;
	}
}
как-то сделал, не пинайте, если криво %)
__________________
Hell is the possibility of sanity

Старый 27.10.2006, 04:06
wvxvw вне форума Посмотреть профиль Отправить личное сообщение для wvxvw Найти все сообщения от wvxvw
  № 4  
Ответить с цитированием
wvxvw
Modus ponens
 
Аватар для wvxvw

модератор форума
Регистрация: Jul 2006
Адрес: #1=(list #1#)
Сообщений: 8,049
Записей в блоге: 38
единственное... обратил внимание на неприятноу особенность - onChanged почему-то не вызывается если например скопировать в буфер текст из поля, а потом, не убирая выделения, его вставить. Т.е. полю "кажется" что оно не изменилось, хотя, на самом деле это не так, TextFormat пропадает... сорри, что в этой же теме спрашиваю, просто никогда раньше не интересовался, а можно ли как-то отследить вышеописаную ситуацию?
__________________
Hell is the possibility of sanity

Старый 27.10.2006, 04:24
iNils вне форума Посмотреть профиль Отправить личное сообщение для iNils Посетить домашнюю страницу iNils Найти все сообщения от iNils
  № 5  
Ответить с цитированием
iNils
Негуру
 
Аватар для iNils

администратор
Регистрация: Jan 2000
Адрес: Кёнигсберг in Moscow
Сообщений: 21,883
Записей в блоге: 7
Выдели любую букву и нажми любую другую - onChanged вызывается. Выдели опять любую, но нажми такую же какую выделил - onChanged не вызывается. Получается, что флеш отслеживает была ли реальная "замена" и если была, то вызывает onChanged.
__________________
(и)Нильс.ru | Плагины для FlashDevelop

Старый 27.10.2006, 07:41
wvxvw вне форума Посмотреть профиль Отправить личное сообщение для wvxvw Найти все сообщения от wvxvw
  № 6  
Ответить с цитированием
wvxvw
Modus ponens
 
Аватар для wvxvw

модератор форума
Регистрация: Jul 2006
Адрес: #1=(list #1#)
Сообщений: 8,049
Записей в блоге: 38
Цитата:
Сообщение от iNils
Выдели любую букву и нажми любую другую - onChanged вызывается. Выдели опять любую, но нажми такую же какую выделил - onChanged не вызывается. Получается, что флеш отслеживает была ли реальная "замена" и если была, то вызывает onChanged.
дык, я же об этом и говорю. Но, на мой взгляд, это не логично во-первых (текст ведь был изменен, если к нему до этого применялось форматирование, то форматирование пропадет). А во-вторых, непонятно как отследить такую ситуацию, если флеш на нее никак не реагирует. Это ж в таком случае нужно вне зависимости от того, что делает пользователь, циклически вызывать проверку соответствия форматирования поля изначальному =( а если там разные символы с разным форматированием... это ж вообще вешалка =(
__________________
Hell is the possibility of sanity

Старый 27.10.2006, 04:31
Хемуль вне форума Посмотреть профиль Отправить личное сообщение для Хемуль Найти все сообщения от Хемуль
  № 7  
Ответить с цитированием
Хемуль
Квач
 
Аватар для Хемуль

Регистрация: Sep 2006
Адрес: Украина, Киев
Сообщений: 1,526
Сделал пока так:
Код:
myTextField.onChanged = function(thisTextField:TextField)
{
	cutText(thisTextField);
}

function cutText(targetTextField:TextField)
{
	while(targetTextField.maxscroll > 1)
	{
		targetTextField.text = targetTextField.text.substr(0, targetTextField.text.length - 1);
	}
}
Редактирование, копирование и вставка ведут себя нормально, а вот с TextFormat'ом проблема...
Если ещё добавить на сцену кнопочку и код:
Код:
bigButton.onRelease = function()
{
	var bigTextFormat:TextFormat = new TextFormat();	
	bigTextFormat.size = 40;
	myTextField.setTextFormat(bigTextFormat);
	cutText(myTextField);
}
то не выходит каменный цветок. ^_^ Происходит следующее:
- При нажатии на кнопку, вместо того, чтобы увеличиться, шрифт не увеличивается (исходный размер шрифта - 30).
- Но при этом из строки удаляется последний символ.
- Если нажимать кнопку и дальше, удаляется по одному символу из конца строки.
- Когда из конца строки удалится определённое количество символов, текст наконец-то становится большим.
Я трейсил код в разных местах. В функции cutText после назначения шрифту большого размера targetTextField.maxscroll равен больше 1, но цикл while не выполняется достаточное количество раз...

О, написал сообщение позже ответов... ^_^
__________________
Да не нужно тебе читать документацию по Flash и AS от Adobe - ты слишком умён для этого

Старый 27.10.2006, 06:53
iNils вне форума Посмотреть профиль Отправить личное сообщение для iNils Посетить домашнюю страницу iNils Найти все сообщения от iNils
  № 8  
Ответить с цитированием
iNils
Негуру
 
Аватар для iNils

администратор
Регистрация: Jan 2000
Адрес: Кёнигсберг in Moscow
Сообщений: 21,883
Записей в блоге: 7
А как насчет кроме setTextFormat, сразу за ним добавить setNewTextFormat?
__________________
(и)Нильс.ru | Плагины для FlashDevelop

Старый 27.10.2006, 08:44
iNils вне форума Посмотреть профиль Отправить личное сообщение для iNils Посетить домашнюю страницу iNils Найти все сообщения от iNils
  № 9  
Ответить с цитированием
iNils
Негуру
 
Аватар для iNils

администратор
Регистрация: Jan 2000
Адрес: Кёнигсберг in Moscow
Сообщений: 21,883
Записей в блоге: 7
Логика хромает.
1. Форматирование не пропадает.
2. А зачем ее отслеживать, когда ничего не меняется (см. пункт 1)?
__________________
(и)Нильс.ru | Плагины для FlashDevelop

Старый 27.10.2006, 12:36
Хемуль вне форума Посмотреть профиль Отправить личное сообщение для Хемуль Найти все сообщения от Хемуль
  № 10  
Ответить с цитированием
Хемуль
Квач
 
Аватар для Хемуль

Регистрация: Sep 2006
Адрес: Украина, Киев
Сообщений: 1,526
2 iNils:
Спасибо, помогло. ^_^
__________________
Да не нужно тебе читать документацию по Flash и AS от Adobe - ты слишком умён для этого

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

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

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


 


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


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