![]() |
|
||||||||||
|
|
|
|||||
|
Квач
Регистрация: Sep 2006
Адрес: Украина, Киев
Сообщений: 1,526
|
Возник вопрос... Допустим, имеется где-нибудь на сцене input TextField с некоторыми размерами. Многострочное поле, без autoSize. Естественно, когда вводим текст, он сперва заполняет собой всю область текстового поля, а затем начинает прокручиваться вверх. При этом срабатывает обработчик события onScroller. Необходимо сделать так, чтобы ввод в поле прекращался, как только текст начинает "вылазить" за пределы прямоугольника текстового поля. То есть, необходимо как-то отследить эту ситуацию и отсечь лишнее. По "лишним" имеется ввиду та часть текста, которая не влезла в прямоугольник поля ввода.
Проблемы: - Желательно предусмотреть ситуацию, при которой текст не вводится пользователем с клавиатуры посимвольно, а вставляется в поле ввода из буфера обмена. - Желательно предусмотреть ситуацию, когда текст, вставленный в текстовое поле и помещающийся там целиком без прокрутки вдруг меняет свой стиль, становится больше и начинает вылазить за пределы текстового поля. Сталкивался ли кто-то с чем-то подобным? Как видите, ограничение идёт не по количеству символов, в по его фактическому размеру в пикселях. Есть ли какие-то советы у кого-то по поводу того, с чего лучше начать?
__________________
Да не нужно тебе читать документацию по Flash и AS от Adobe - ты слишком умён для этого |
|
|||||
|
Негуру
администратор
Регистрация: Jan 2000
Адрес: Кёнигсберг in Moscow
Сообщений: 21,883
Записей в блоге: 7
|
На базе этого http://www.flasher.ru/forum/showthread.php?t=86093
Как только количество строк превышает заданное, запускаем метод отсечения лишнего. |
|
|||||
|
Modus ponens
|
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 |
|
|||||
|
Modus ponens
|
единственное... обратил внимание на неприятноу особенность - onChanged почему-то не вызывается если например скопировать в буфер текст из поля, а потом, не убирая выделения, его вставить. Т.е. полю "кажется" что оно не изменилось, хотя, на самом деле это не так, TextFormat пропадает... сорри, что в этой же теме спрашиваю, просто никогда раньше не интересовался, а можно ли как-то отследить вышеописаную ситуацию?
__________________
Hell is the possibility of sanity |
|
|||||
|
Негуру
администратор
Регистрация: Jan 2000
Адрес: Кёнигсберг in Moscow
Сообщений: 21,883
Записей в блоге: 7
|
Выдели любую букву и нажми любую другую - onChanged вызывается. Выдели опять любую, но нажми такую же какую выделил - onChanged не вызывается. Получается, что флеш отслеживает была ли реальная "замена" и если была, то вызывает onChanged.
|
|
|||||
|
Modus ponens
|
Цитата:
__________________
Hell is the possibility of sanity |
|
|||||
|
Квач
Регистрация: 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);
}
}
Если ещё добавить на сцену кнопочку и код: 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 - ты слишком умён для этого |
|
|||||
|
Квач
Регистрация: Sep 2006
Адрес: Украина, Киев
Сообщений: 1,526
|
2 iNils:
Спасибо, помогло. ^_^
__________________
Да не нужно тебе читать документацию по Flash и AS от Adobe - ты слишком умён для этого |
![]() |
![]() |
Часовой пояс GMT +4, время: 01:52. |
|
|
« Предыдущая тема | Следующая тема » |
|
|