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

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

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

Регистрация: Jul 2007
Сообщений: 44
По умолчанию TextFormat.getTextExtent работает неверно

Код:
var newstyle:TextFormat = new TextFormat();
newstyle.bold = true;
newstyle.color = 0x990000;
newstyle.font = "Courier New";
newstyle.size = this.__font_sizes[fs];

var metrics:Object = newstyle.getTextExtent(CodeText.text);

CodeText.setTextFormat(newstyle);

// CodeText:TextField
CodeText._width = metrics.width+4; // 2 gutters, every is 2 pixels
CodeText._height = metrics.height+4; // same
Текст не влазит в TextField. Почему?

Старый 26.07.2007, 12:46
etc вне форума Посмотреть профиль Найти все сообщения от etc
  № 2  
Ответить с цитированием
etc
Et cetera
 
Аватар для etc

Регистрация: Sep 2002
Сообщений: 30,784
Вообше говоря, autoSize автоматом такие вещи делает.

А текст не влезает, судя по всему из-за того что размер текста не указан (массив не существует, либо fs).


Последний раз редактировалось etc; 26.07.2007 в 12:49.
Старый 26.07.2007, 12:58
CrazyFlasher вне форума Посмотреть профиль Отправить личное сообщение для CrazyFlasher Найти все сообщения от CrazyFlasher
  № 3  
Ответить с цитированием
CrazyFlasher
 
Аватар для CrazyFlasher

Регистрация: May 2003
Адрес: Tallinn
Сообщений: 3,181
кстати autoSize не со всеми фонтами верно работает.
__________________
Flash Developer
Папа TDP4 Team Battle

Старый 26.07.2007, 13:07
etc вне форума Посмотреть профиль Найти все сообщения от etc
  № 4  
Ответить с цитированием
etc
Et cetera
 
Аватар для etc

Регистрация: Sep 2002
Сообщений: 30,784
Например?

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

Регистрация: May 2003
Адрес: Tallinn
Сообщений: 3,181
Код:
//Сделано на скорую руку и покорявому =)
//на сцене: sendBtn - кнопка
//			input - текстовое поле

i = 1;
textY = 0;
lineHeight = input.textHeight;

sendBtn.onRelease = function(){
	createText();
}

function createText(){
	this.createTextField("m"+i, i, 0, textY, input.textWidth, lineHeight);
	createField();
	
	this["m"+i].text = input.text;
	input.text = "";
	
	textY += lineHeight;
	i++;
}


function createField(){
	this["m"+i].type = "dynamic"
	this["m"+i].border = true;
	this["m"+i].multiline = true;
	this["m"+i].color = 0x000000;
}
к примеру, здесь не верно работает. по крайней мере у меня. шрифт на инпуте стоит "Times New Roman"
__________________
Flash Developer
Папа TDP4 Team Battle


Последний раз редактировалось CrazyFlasher; 26.07.2007 в 13:50.
Старый 26.07.2007, 13:53
etc вне форума Посмотреть профиль Найти все сообщения от etc
  № 6  
Ответить с цитированием
etc
Et cetera
 
Аватар для etc

Регистрация: Sep 2002
Сообщений: 30,784
В приведенном коде autoSize отсутствует.

Старый 26.07.2007, 13:55
CrazyFlasher вне форума Посмотреть профиль Отправить личное сообщение для CrazyFlasher Найти все сообщения от CrazyFlasher
  № 7  
Ответить с цитированием
CrazyFlasher
 
Аватар для CrazyFlasher

Регистрация: May 2003
Адрес: Tallinn
Сообщений: 3,181
чёрт возьми =) точно...извиняюсь за невнимательность =)
__________________
Flash Developer
Папа TDP4 Team Battle

Старый 26.07.2007, 13:56
romantique вне форума Посмотреть профиль Отправить личное сообщение для romantique Найти все сообщения от romantique
  № 8  
Ответить с цитированием
romantique

Регистрация: Jul 2007
Сообщений: 44
Цитата:
Сообщение от __etc
Вообше говоря, autoSize автоматом такие вещи делает.

А текст не влезает, судя по всему из-за того что размер текста не указан (массив не существует, либо fs).
Не работает даже при явном указании размера.
Код:
newstyle.size = 12;
Попробовал найти иное решение:

пробежался по всей строке, и складывал в одну переменную все значения metrics.width, взятые от каждой буквы. Теперь работает пиксель в пиксель. Хотя решение наверное не самое красивое. Видимо то, что выдаёт getTextExtent() - это какое-то теоретическое значение, может он считает все буквы одинакового размера. В общем по логике вещей разницы быть не должно, взять getTextExtent() от всей строки, или пройтись по каждой буквы. Но она есть.

Старый 26.07.2007, 14:04
etc вне форума Посмотреть профиль Найти все сообщения от etc
  № 9  
Ответить с цитированием
etc
Et cetera
 
Аватар для etc

Регистрация: Sep 2002
Сообщений: 30,784
А у меня работает. В AS3 он, кстати, убран.
И, похоже, правильно это работает только для не-embed шрифтов.


Последний раз редактировалось etc; 26.07.2007 в 14:07.
Старый 26.07.2007, 14:09
romantique вне форума Посмотреть профиль Отправить личное сообщение для romantique Найти все сообщения от romantique
  № 10  
Ответить с цитированием
romantique

Регистрация: Jul 2007
Сообщений: 44
Может ты проверял на короткой строчке... В общем у меня строка в линию, там несколько десятков тыщ символов (там типа символы нуклеотидов ДНК), вот на ней разница видна конкретно... По несколько сотен символов не влазит.
На котротких у меня тоже работает, разницы не видно.

Может у мну руки не оттуда. Но я просто сравнил численно getTextExtent().width от строки, и сумма по всем getTextExtent().width от каждого символа - числа разные, клянусь.

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

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

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


 


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


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