Просмотр полной версии : Текст внутри поля
Как узнать какой текст вошел в текстовое поле, а какой требует прокрутки для просмотра. Короче. Мне нужно вместо последних трёх символов текстового поля вставить многоточие, кабы показав, что текст не вошел и продолжается, если , кпримеру, вы на него щелкните (естественно удалив всё, что находится после многоточия).
гляньте метод scroll класса textField
Molecula
11.10.2007, 20:05
Мне кажется, тут надо смотреть в сторону класса String.
screamge
11.10.2007, 20:14
Считать количество символов на ширину и длину текстового поля флеш не умеет. Можно самостоятельно посчитать. Единственное что существуют грагли, если используется хтмл текст то теги тоже считаются в количестве символов хоть и конечно визуально не отображаются.
Можно же поидее забить всё посимвольно в массив,и вычитать из ширины поля*2(строки поопределению две) ширину буковки пока ширина не станет отрицательной, в этот момент и отловить номер символа, невошедшего, отмотать на три назад и дописать многоточие.
Если то что я сказал не бред, можете, пожалуйста, показать как это будет выглядеть в виде кода, а то я слабо представляю?
screamge
11.10.2007, 20:50
Ну и какой длинны будет массив, как вы собираетесь вычислать ширину буквы с учётом того что 'W' и 'i' разной и даже если и так то плейер зависнет не успев открыться на маломощных, а может и не только компьютерах.
А разве нельзя узнать пиксельную ширину каждой буквы отдельно?
Fernando Costa
11.10.2007, 21:15
можно еще гемороиться через битмапдату
screamge
11.10.2007, 21:18
Что-то я не слышал про такие методы узнающие ширину буквы.
Fernando Costa
11.10.2007, 21:24
записываешь в текстовое поле весь алфавит, конвертишь в битмапдату и прогоняешь в цыкле по всей длине текстового поля, и дальше пляшешь с черныим и белыми точками, ну так приблизительно ...
screamge
11.10.2007, 21:25
записываешь в текстовое поле весь алфавит...
Лучше сразу два, цифры и символы...ага и на выходе получим нереальный зависус :)
Fernando Costa
11.10.2007, 21:29
Лучше сразу два, цифры и символы...ага и на выходе получим нереальный зависус :)
зато идея какая, универсальная , на все фонты подойдет :)
Наверное придётся просто делать мувик с многоточием, который понеобходимости будет появляться =)
O.K., вот и правильно, зачем такая универсальность то? неужеле lengh нельзя обрезать до многоточия, тем паче, что увидев, что неровно обреалось - юзер поймёт, что есть текст дальше, как вариант ещё одна переменная с обрезанным где нужно тектом.
screamge
11.10.2007, 21:34
зато идея какая, универсальная , на все фонты подойдет
Это да. :)
О.К., С мувиком вы замучетесь ещё больше, лучше substring и + '...';
Если грубо, то вот так. Только не говорите, что нечестно, почитайте свои советы :) С переносом и обрезкой по пробелам можно поработать.
screamge
11.10.2007, 22:39
А если предположить что текста больше чем на две строчки? :)
А если прочитать вопрос автора внимательней? В своем втором посте О.К. утверждает, что строчек "поопределению две".
screamge
11.10.2007, 23:04
Так ты отвечаешь на вопрос или предлагаешь решение проблемы? Если первое то отлично, вопросов больше нет. Если второе то мой вопрос остаётся в силе.
Человек обратился за помощью, я ему помогаю. Можно?
А суперуниверсальные проблемы пусть прогеры решают.
Если, конечно, есть смысл делать обрезаемое поле с 12 строчками. Я бы после четырех уже скроллер ставил и не мучался.
Вот, короче, более цивильный вариант, нормально обрезающий текст по пробелам и с решенной рекурсией (а то в первом варианте при тексте больше 256 символов запрет скрипта за рекурсию).
Mnilionic
12.10.2007, 00:34
так по-проще мне кажется:
var str = "какой-нить длинный текст";
var words = str.split(" ", 200);
var newstr = "";
for(var i=0; i<words.length; i++){
newstr += words[i];
txt.text = newstr + "\n"
if(txt.maxscroll != 1) break;
else newstr += " ";
}
txt.text = newstr + "..."
+
а вот так вообще идеально :)
var str = "какой-нить длинный текст";
var words = str.split(" ", 200);
var newstr = "";
for (var i = 0; i<words.length; i++) {
newstr += words[i];
txt.text = newstr + " " + words[i+1] + "...";
if (txt.maxscroll != 1) {
newstr += "..."
break;
} else newstr += " ";
}
txt.text = newstr;
2Mnilionic : И при каких условиях это работает? Первый же вставленный текст просто обрезался на 200-м символе и добавились три точки :)
Mnilionic
12.10.2007, 02:03
при условии, что показать надо как максмум 200 слов.. ну или 256
Wolsh, в качестве сепаратора в функции сплит стоит пробел - думаю вы ег пропустили случайно.
Ты сам придумал себе эту задачу ? :) Тогда хоть не сравнивай решенья :)
Mnilionic
12.10.2007, 02:12
А что имено вас не устраивает в моем решении вопроса топика?
То, что оно его вообще никак не решает.
Что требуется - обрезать текст любой длины так, чтобы он заполнил текстфилд размером в две строчки и заменить последние символы на троеточие. Делаю текстфилд в две строчки, пишу Ваш код, заменяю строку на абзац обычного русского текста - в результате в текстфилде длинная строка, уходящая далеко за пределы границ, обрезанная где-то посередине слова и закрытая троеточием. Второй строки нет вообще.
Mnilionic
12.10.2007, 13:43
специально для криворуких :) без обид
Клёво! Мог просто сказать что мультилайн надо включить, а точнее - мог бы записать это в коде, раз уж это необходимое условие. Прикинь сколько препирательств избежали бы?
Работает, молодец!
Теперь-то понял, что ты делаешь, красивое решение!
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.