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

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

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

Регистрация: Mar 2009
Адрес: Москва [СЗАО]
Сообщений: 107
По умолчанию Длина строки/количество строк dynamic textField

Добрый вечер.
Есть динамическое текстовое поле. Необходимо узнать длину строки и общее кол-во строк текстового поля, а не загружаемого в него текста.

Текст загружается из XML-тэга из внешнего XML-файла, поэтому привожу только часть кода, отвечающую за параметры textField.
Текст в textField отображается корректно, нужно только получить кол-во строк и кол-во символов в одной строке
Код AS3:
tfText.multiline = true;
tfText.wordWrap = true;
tfText.selectable = false;
tfText.embedFonts = true;
tfText.appendText(xmlTextList[j]);
 
trace(tfText.length); //Возвращает 712 - правильно
trace(tfText.numLines); //Возвращает 1 - я так понял мне возвращают кол-во строк загружаемого текста, а не их кол-во в textField.
trace(tfText.getLineLength(0)); textField  //Возвращает 712 - ну и соответственно раз строка одна, то и символы в ней все

Старый 07.05.2011, 00:34
Psycho Tiger вне форума Посмотреть профиль Отправить личное сообщение для Psycho Tiger Найти все сообщения от Psycho Tiger
  № 2  
Ответить с цитированием
Psycho Tiger
 
Аватар для Psycho Tiger

блогер
Регистрация: Jun 2005
Адрес: Toronto
Сообщений: 6,599
Записей в блоге: 17
Нет. Просто одна строка длинной 712 символов. Строки разделяются символом \n. Требуется узнать число получившихся строк из за переносов?

Старый 07.05.2011, 00:37
niks_13 вне форума Посмотреть профиль Отправить личное сообщение для niks_13 Найти все сообщения от niks_13
  № 3  
Ответить с цитированием
niks_13

Регистрация: Mar 2009
Адрес: Москва [СЗАО]
Сообщений: 107
Да. Но перенос осуществляется по достижении правой границы textField, то бишь Flash сам расставляет переносы в зависимоcти от ширины textField.


Последний раз редактировалось niks_13; 07.05.2011 в 00:56.
Старый 07.05.2011, 03:13
Psycho Tiger вне форума Посмотреть профиль Отправить личное сообщение для Psycho Tiger Найти все сообщения от Psycho Tiger
  № 4  
Ответить с цитированием
Psycho Tiger
 
Аватар для Psycho Tiger

блогер
Регистрация: Jun 2005
Адрес: Toronto
Сообщений: 6,599
Записей в блоге: 17
Меня тоже озадачивал этот вопрос в неочень давнем времени, но в моём случае мне вполне подходила и высота в пикселях и я заюзал textHeight.
Пожалуй, присоединюсь к вопросу.

Если есть желание попробовать найти ответ самому - попробуйте посмотреть в сторону maxScrollH и иже с ним. Я бы начал поиск ответа оттуда.


Последний раз редактировалось Psycho Tiger; 07.05.2011 в 03:17.
Старый 07.05.2011, 04:08
Wolsh вне форума Посмотреть профиль Отправить личное сообщение для Wolsh Найти все сообщения от Wolsh
  № 5  
Ответить с цитированием
Wolsh
Нуб нубам
 
Аватар для Wolsh

модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
Код AS3:
trace(tfText.bottomScrollV + tfText.maxScrollV - 1)
Добавлено через 8 минут
Хотя у меня и numLines то же самое возвращает, уж не знаю, что у Вас случилось.

Добавлено через 22 минуты
И да, getLineLength() тоже исправно работает.
Я думаю у Вас что-то в настройках поля не так. Например, в Вашем фрагменте кода указано что шрифт внедренный, но никаких назначений ТекстФормата не прописано. Поэтому сделать выводы, в чем ошибка, невозможно.
__________________
Reality.getBounds(this);

Старый 07.05.2011, 08:30
niks_13 вне форума Посмотреть профиль Отправить личное сообщение для niks_13 Найти все сообщения от niks_13
  № 6  
Ответить с цитированием
niks_13

Регистрация: Mar 2009
Адрес: Москва [СЗАО]
Сообщений: 107
Wolsh
А никакого текст формата я и не задавал, мне кто-то говорил, что надо прописывать
Код AS3:
embedFonts
для корректоного отображения, я и прописал.

Добавлено через 4 часа 14 минут
Цитата:
Сообщение от Wolsh Посмотреть сообщение
Код AS3:
trace(tfText.bottomScrollV + tfText.maxScrollV - 1)
Всё равно возвращает 1.

Может всё дело в том, что в моём XML весь текст без переносов? Но это ж бред. Нельзя же подгонять текст под код. Я хочу получить кол-во строк, к-рые создаёт textField, а получаю кол-во строк XML'а =((

Возникла идея, но я не знаю как реализовать:
Мы же знаем ширину textField. Посчитать кол-во символов, помещающееся на эту самую ширину при текущем форматировании текста. - это длина строки.
Разделить общее кол-во символов на получившуюся длину строки - получим кол-во строк.
Замудрёно, но по-моему должно прокатить. Есть идеи реализации сего алгоритма?


Последний раз редактировалось niks_13; 07.05.2011 в 12:50.
Старый 07.05.2011, 15:46
Wolsh вне форума Посмотреть профиль Отправить личное сообщение для Wolsh Найти все сообщения от Wolsh
  № 7  
Ответить с цитированием
Wolsh
Нуб нубам
 
Аватар для Wolsh

модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
Не надо выдумывать костыли и хаки, надо найти свою ошибку. Методы прекрасно работают.
Вложения
Тип файла: rar LineNumsTest.rar (33.5 Кб, 110 просмотров)
__________________
Reality.getBounds(this);

Старый 07.05.2011, 15:48
Wolsh вне форума Посмотреть профиль Отправить личное сообщение для Wolsh Найти все сообщения от Wolsh
  № 8  
Ответить с цитированием
Wolsh
Нуб нубам
 
Аватар для Wolsh

модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
Цитата:
Посчитать кол-во символов, помещающееся на эту самую ширину при текущем форматировании текста.
10 i и 10 w :
iiiiiiiiii
wwwwwwwwww
__________________
Reality.getBounds(this);

Старый 07.05.2011, 18:20
Dukobpa3 вне форума Посмотреть профиль Отправить личное сообщение для Dukobpa3 Найти все сообщения от Dukobpa3
  № 9  
Ответить с цитированием
Dukobpa3
 
Аватар для Dukobpa3

блогер
Регистрация: Oct 2010
Адрес: Киев
Сообщений: 1,678
Записей в блоге: 12
Отправить сообщение для Dukobpa3 с помощью Skype™
Возможно глупое подположение но вдруг вы хотите чтоб оно вам по буквам переносило?
Код AS3:
tfText.wordWrap = true;
- переносит только по словам. т.е. только после пробелов. Если строка длинная и без пробелов то ничего никуда не перенесется и будет таки одна строка.
__________________
Кто к нам с чем для чего - тот у нас того от того.

Старый 08.05.2011, 00:58
niks_13 вне форума Посмотреть профиль Отправить личное сообщение для niks_13 Найти все сообщения от niks_13
  № 10  
Ответить с цитированием
niks_13

Регистрация: Mar 2009
Адрес: Москва [СЗАО]
Сообщений: 107
Wolsh
Я так понял то, что в архиве Вы выложили это на Flex'е написано. У меня Flash.

Dukobpa3
У меня обычный текст. Слова разделены пробелами. И именно так и надо, чтобы они переносились - по словам.

Вот полный код создания текстового поля и все его параметры. Полнее привести не могу.
Код AS3:
                          var tfText:TextField = new TextField();
				tfText.type = TextFieldType.DYNAMIC;
				if (xmlTextList.attribute('textBorder')[j] == "true")
				{
					tfText.border = true;
				}
				else
				{
					tfText.border = false;
				}
				tfText.x = xmlTextList.attribute('textX')[j];
				tfText.y = xmlTextList.attribute('textY')[j];
				tfText.width = xmlTextList.attribute('textWidth')[j];
				tfText.height = xmlTextList.attribute('textHeight')[j];
				tfText.multiline = true;
				tfText.wordWrap = true;
				tfText.selectable = false;
				tfText.embedFonts = true;
				tfText.appendText(xmlTextList[j]);
 
				trace(tfText.length);
				trace(tfText.numLines);
				trace(tfText.getLineLength(0));
				trace(tfText.getParagraphLength(0));
				trace(tfText.bottomScrollV + tfText.maxScrollV - 1);
 
				tftTextX = tfText.x;
				tftTextY = tfText.y;
				tftTextHeight = tfText.height;
				tftTextWidth = tfText.width;
 
	var tftText:TextFormat = new TextFormat();
            	tftText.font = xmlTextList.attribute('textFont')[j];
            	tftText.color = xmlTextList.attribute('textColor')[j];
            	tftText.size = xmlTextList.attribute('textSize')[j];
 
				if (xmlTextList.attribute('textBold')[j] == "true"){
					tftText.bold = true;}
					else{
						tftText.bold = false;}
 
				if (xmlTextList.attribute('textItalic')[j] == "true"){
					tftText.italic = true;}
					else{
						tftText.italic = false;}
 
				if (xmlTextList.attribute('textUnderline')[j] == "true"){
					tftText.underline = true;}
					else{
						tftText.underline = false;}
 
		         	tfText.setTextFormat(tftText);
 
			var textMount:Shape = new Shape();
                                	textMount.graphics.beginFill(0xCCCCCC, 0.3);
                        	textMount.graphics.lineStyle(2, 0x000000, 0.3);
                         	textMount.graphics.drawRoundRect(xmlTextList.attribute('textX')[j]-10, xmlTextList.attribute('textY')[j]-5, tfText.width+35, tfText.height+10, 20);
            	textMount.graphics.endFill();
 
			var mcText:MovieClip = new MovieClip();
				mcText.mouseChildren = true;
				mcText.x = xmlTextList.attribute('textX')[j];
				mcText.y = xmlTextList.attribute('textY')[j];
 
 
				addChild(mcText);
				mcText.addChild(textMount);
				mcText.addChild(tfText);
Вот так выглядит загружаемый XML:
Код:
<?xml version = "1.0" encoding = "utf-8"?>
<objects>
	<text>
		<text1 textBorder = "false"
			   textX = "20"
			   textY = "150"
			   textWidth = "200"
			   textHeight = "100"
			   textFont = "Tahoma"
			   textColor = "0x993300"
			   textSize = "16"
			   textBold = "false"
			   textItalic = "false"
			   textUnderline = "false">Коллективное владение кодом позволяет каждому разработчику выдвигать новые идеи в любой части проекта, изменять любую строку программы, добавлять функциональность, фиксировать ошибку и проводить реорганизацию. Один человек просто не в состоянии удержать в голове проект нетривиальной системы. Благодаря коллективному владению кодом снижается риск принятия неверного решения (главным разработчиком) и устраняется нежелательная зависимость проекта от одного человека.</text1>
	</text>
</objects>

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

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

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


 


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


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