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

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

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

Регистрация: Nov 2006
Сообщений: 89
По умолчанию Смайлы в TextArea

Подскажите плз. почему когда листенишь ScrollEvent.SCROLL у TextArea то verticalScrollPosition показывает значение предыдущщего скроллинга, и какое событие нужно листенить чтобы после скролла получить реально значение verticalScrollPosition и других свойств
TextArea.
спасибо


Последний раз редактировалось lephik; 15.03.2007 в 06:40.
Старый 15.03.2007, 13:16
etc вне форума Посмотреть профиль Найти все сообщения от etc
  № 2  
Ответить с цитированием
etc
Et cetera
 
Аватар для etc

Регистрация: Sep 2002
Сообщений: 30,787
Кажется, там нужен validateNow выполнить. Не смотрел.


Последний раз редактировалось etc; 15.03.2007 в 13:40.
Старый 15.03.2007, 13:31
lephik вне форума Посмотреть профиль Отправить личное сообщение для lephik Найти все сообщения от lephik
  № 3  
Ответить с цитированием
lephik

Регистрация: Nov 2006
Сообщений: 89
да, слышал про такую штуку
validateNow называется,
пробовал - не помогает.

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

Регистрация: Sep 2002
Сообщений: 30,787
Собери нерабочий пример.

Старый 15.03.2007, 14:54
lephik вне форума Посмотреть профиль Отправить личное сообщение для lephik Найти все сообщения от lephik
  № 5  
Ответить с цитированием
lephik

Регистрация: Nov 2006
Сообщений: 89
не буду приводить код полностью но в целом проблема сводится вот к такой:
Код:
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute">
<mx:Script>
<![CDATA[
import mx.events.ScrollEvent;
private function ta_scroll(e:ScrollEvent) {
	ta.validateNow();
	trace("verticalScrollPosition: " + ta.verticalScrollPosition);
	//trace(e.position);
}
]]>
</mx:Script>
<mx:TextArea id="ta" text="kykykykykykkyykykkykykykykykykykykykykykkykykyky" 
	width="100" height="50" scroll="ta_scroll(event);" >	
</mx:TextArea>
</mx:Application>
ну так вот в этом примере ta.verticalScrollPosition выдаёт неправильное значене.

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

Регистрация: Sep 2002
Сообщений: 30,787
Заглянул в сорцы TextArea и увидел там любопытные строчки:

Код:
    override protected function scrollHandler(event:Event):void
    {
		// TextField.scroll bubbles so you might see it here
		if (event is ScrollEvent)
		{
			if (!liveScrolling &&
				ScrollEvent(event).detail == ScrollEventDetail.THUMB_TRACK)
			{
				return;
			}

			super.scrollHandler(event);

			textField.scrollH = horizontalScrollPosition;
			textField.scrollV = verticalScrollPosition + 1;

			_vScrollPosition = textField.scrollV - 1;
			_hScrollPosition = textField.scrollH;
		}
    }
А внутри ScrollControlBase:

Код:
	protected function scrollHandler(event:Event):void
	{
		// TextField.scroll bubbles so you might see it here
		if (event is ScrollEvent)
		{
			var scrollBar:ScrollBar = ScrollBar(event.target);

			var pos:Number = scrollBar.scrollPosition;

			var prop:QName;
			if (scrollBar == verticalScrollBar)
				prop = new QName(mx_internal, "_verticalScrollPosition");
			else if (scrollBar == horizontalScrollBar)
				prop = new QName(mx_internal, "_horizontalScrollPosition");

			dispatchEvent(event);

			if (prop)
				this[prop] = pos;
		}
	}
Т.е. событие для скролла вызывается до того, как свойство изменилось в самом TextArea. Как это обходить, я не знаю, жди спецов по флексу.

Кстати, event.position выдает верное значение. Что мешает его использовать?


Последний раз редактировалось etc; 15.03.2007 в 15:40.
Старый 16.03.2007, 07:42
lephik вне форума Посмотреть профиль Отправить личное сообщение для lephik Найти все сообщения от lephik
  № 7  
Ответить с цитированием
lephik

Регистрация: Nov 2006
Сообщений: 89
Дело в том что я пытаюсь добавить смайлы в этот самый TextArea,
для этого экстендю TextArea, и делаю внутренний TextField публичным.
У TextField есть метод - getCharBoundaries, который возвращает Rectangle в котором находится определённая буква ( в моём случае - смайл ).
Так вот после скролла этот метод getCharBoundaries внетреннегно текстфилда тоже выдаёт неправильное значение
Спасибо большое за ответ, думаю теперь я разберусь.


Последний раз редактировалось lephik; 16.03.2007 в 08:01.
Старый 16.03.2007, 12:14
etc вне форума Посмотреть профиль Найти все сообщения от etc
  № 8  
Ответить с цитированием
etc
Et cetera
 
Аватар для etc

Регистрация: Sep 2002
Сообщений: 30,787
Тебе нужно отложить выполнение до следующего кадра хотя бы. Или на некоторое кол-во миллисекунд. Или переписать scrollHandler.

Старый 16.03.2007, 12:56
john вне форума Посмотреть профиль Отправить личное сообщение для john Посетить домашнюю страницу john Найти все сообщения от john
  № 9  
Ответить с цитированием
john
МЕГАФЛЭШЕР

Регистрация: May 1999
Адрес: Россия, Москва
Сообщений: 1,181
удобно таком случае пользоваться callLater -

Код:
callLater(function():void
{
   ....
});


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

Регистрация: Sep 2002
Сообщений: 30,787
Примерчик заодно:
http://livedocs.macromedia.com/flex/.../00001438.html

Хотя, раз наследуемся от TextArea, то можно и переписать scrollHandler. Не знаю, правда, может это к глюкам каким-нибудь привести или нет…

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

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

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


 


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


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