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

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

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 27.08.2010, 15:20
AL.exe вне форума Посмотреть профиль Отправить личное сообщение для AL.exe Посетить домашнюю страницу AL.exe Найти все сообщения от AL.exe
  № 1  
Ответить с цитированием
AL.exe
 
Аватар для AL.exe

Регистрация: Jan 2004
Адрес: Net
Сообщений: 1,049
Отправить сообщение для AL.exe с помощью ICQ
По умолчанию Динамическое изменение высоты TextField

Подскажите, пожалуйста решение. Столкнулся с такой проблемой: требуется создать текстовое поле с постоянной шириной, скажем, в 200 пикселей. В поле добавляется какой-либо текст. Нужно, чтобы поле автоматчиески изменило высоту. Казалось бы, задача не такая сложная, но textHeight, к сожалению, возвращает всегда высоту одной строки

Может, я изобретаю велосипед и есть какой-то штатный способ?
__________________
Дело не в тебе

Старый 27.08.2010, 15:27
-De- вне форума Посмотреть профиль Отправить личное сообщение для -De- Найти все сообщения от -De-
  № 2  
Ответить с цитированием
-De-
 
Аватар для -De-

блогер
Регистрация: Oct 2005
Адрес: Днепродзержинск - город Брежнева и других логопедов
Сообщений: 1,421
Записей в блоге: 4
Отправить сообщение для -De- с помощью ICQ Отправить сообщение для -De- с помощью Skype™
ставишь ему width = 200 ... и вроде всё.
а, ещё wordWrap = true;
__________________
Бобры отвечают на вопросы не потому, что знают на них ответы; они отвечают потому, что их спрашивают.


Последний раз редактировалось -De-; 27.08.2010 в 15:40.
Старый 27.08.2010, 15:30
AL.exe вне форума Посмотреть профиль Отправить личное сообщение для AL.exe Посетить домашнюю страницу AL.exe Найти все сообщения от AL.exe
  № 3  
Ответить с цитированием
AL.exe
 
Аватар для AL.exe

Регистрация: Jan 2004
Адрес: Net
Сообщений: 1,049
Отправить сообщение для AL.exe с помощью ICQ
Цитата:
ставишь ему width = 200 ... и вроде всё.
На самом деле надо было еще сделать multiline=true, wordWrap=true и autosize = TextFieldAutoSize.LEFT, а так Вы даже почти правы ))

Вернее, я плохо описал проблему.

Мне нужно сделать, чтобы текст по умолчанию был 150 пикселей в ширину, если текст больше 150, но меньше 200, то он должен растягивать поле по горизонтали. Если больше 200, то переносится в несколько строк и по ширине стать ровно стоько, сколько нужо (но не меньше 150) - вот тут-то и покрадывается проблема: когда тест становится могострочным, невозможно определить его реальную ширину (т.е. шириной самой широкой строки) т.к. textWidth возвращает длину всего текста
__________________
Дело не в тебе

Старый 27.08.2010, 15:59
-De- вне форума Посмотреть профиль Отправить личное сообщение для -De- Найти все сообщения от -De-
  № 4  
Ответить с цитированием
-De-
 
Аватар для -De-

блогер
Регистрация: Oct 2005
Адрес: Днепродзержинск - город Брежнева и других логопедов
Сообщений: 1,421
Записей в блоге: 4
Отправить сообщение для -De- с помощью ICQ Отправить сообщение для -De- с помощью Skype™
Я там дописал - wordWrap = true и textWidth возвращает ширину самой широкой строки. Не оч. понял, что хотите, но вродь должно хватить. Если что скейлить по горизонтали - scaleX ещё есть.
__________________
Бобры отвечают на вопросы не потому, что знают на них ответы; они отвечают потому, что их спрашивают.

Старый 27.08.2010, 16:09
AL.exe вне форума Посмотреть профиль Отправить личное сообщение для AL.exe Посетить домашнюю страницу AL.exe Найти все сообщения от AL.exe
  № 5  
Ответить с цитированием
AL.exe
 
Аватар для AL.exe

Регистрация: Jan 2004
Адрес: Net
Сообщений: 1,049
Отправить сообщение для AL.exe с помощью ICQ
Ну, я вижу, что плохо объяснил.

Скажем, проблема такая:

Нужно, чтобы поле автоматически изменяло высоту (этого добиться понятно как - выше перечислено) и автоматически уменьшало ширину до ширины самой длинной строки. Вот в этом как раз проблема, т.к. textWidth возвращает не длину самой длинной строки, а всего текста, если бы он стоял в одну строку.
__________________
Дело не в тебе

Старый 27.08.2010, 16:19
incvizitor вне форума Посмотреть профиль Отправить личное сообщение для incvizitor Найти все сообщения от incvizitor
  № 6  
Ответить с цитированием
incvizitor
 
Аватар для incvizitor

блогер
Регистрация: Sep 2008
Адрес: Менск
Сообщений: 586
Записей в блоге: 1
Отправить сообщение для incvizitor с помощью Skype™
Код AS3:
override public function set text(s:String):void{
      super.text=s;
      wordWrap=false;
      var tw:Number=Math.min(Math.max(textWidth,150),200);
      wordWrap=true;
      width=tw;
}
?
__________________
ranga

Старый 27.08.2010, 16:53
AL.exe вне форума Посмотреть профиль Отправить личное сообщение для AL.exe Посетить домашнюю страницу AL.exe Найти все сообщения от AL.exe
  № 7  
Ответить с цитированием
AL.exe
 
Аватар для AL.exe

Регистрация: Jan 2004
Адрес: Net
Сообщений: 1,049
Отправить сообщение для AL.exe с помощью ICQ
incvizitor, думал б этом, но не будет работать, т.к. этот код установит ширину в 150 при наличии нескольких строк, а в тексте может быть слово длинее 150 пикселей. Соответственно, оно разобьется. В идеале в таком случае ширина должна устанавливаться как ширина самого длинного слова.

Добавлено через 5 минут
Кстати, а можно как-то сделать, чтобы текст переносился по словам, а не по буквам? А то бьющиеся слова - это как-то вообще не весело

Добавлено через 50 минут
В общем, правильынй ответ, хоть и извращеный:

split'им текст исходного текстового поля по пробелу, в цикле содаем с таким же форматированием текстовые поля с каждым из этих слов, смотрим ширину самого длинного (естественно с autosize). Присваиваем ширину самого длинного слова исходном полю. Единственная проблема - почему-то полученное значение примерно на 15 пикселей меньше реального. Блин, во флеше постоянно какие-то проблемы с текстом были. Ужас просто.
__________________
Дело не в тебе

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

блогер
Регистрация: Sep 2008
Адрес: Менск
Сообщений: 586
Записей в блоге: 1
Отправить сообщение для incvizitor с помощью Skype™
Цитата:
Блин, во флеше постоянно какие-то проблемы с текстом были. Ужас просто.
ыгы, вроде в CS5 аккуратней сделали))
__________________
ranga

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

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

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


 


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


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