![]() |
|
||||||||||
|
|||||||
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | Опции просмотра |
|
![]() |
![]() |
|
|||||
|
Регистрация: Nov 2006
Сообщений: 89
|
Подскажите плз. почему когда листенишь ScrollEvent.SCROLL у TextArea то verticalScrollPosition показывает значение предыдущщего скроллинга, и какое событие нужно листенить чтобы после скролла получить реально значение verticalScrollPosition и других свойств
TextArea. спасибо Последний раз редактировалось lephik; 15.03.2007 в 06:40. |
|
|||||
|
Et cetera
Регистрация: Sep 2002
Сообщений: 30,787
|
Кажется, там нужен validateNow выполнить. Не смотрел.
Последний раз редактировалось etc; 15.03.2007 в 13:40. |
|
|||||
|
Регистрация: Nov 2006
Сообщений: 89
|
да, слышал про такую штуку
![]() validateNow называется, пробовал - не помогает. |
|
|||||
|
Et cetera
Регистрация: Sep 2002
Сообщений: 30,787
|
Собери нерабочий пример.
|
|
|||||
|
Регистрация: 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>
|
|
|||||
|
Et cetera
Регистрация: 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;
}
}
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;
}
}
Кстати, event.position выдает верное значение. Что мешает его использовать? Последний раз редактировалось etc; 15.03.2007 в 15:40. |
|
|||||
|
Регистрация: Nov 2006
Сообщений: 89
|
Дело в том что я пытаюсь добавить смайлы в этот самый TextArea,
для этого экстендю TextArea, и делаю внутренний TextField публичным. У TextField есть метод - getCharBoundaries, который возвращает Rectangle в котором находится определённая буква ( в моём случае - смайл ). Так вот после скролла этот метод getCharBoundaries внетреннегно текстфилда тоже выдаёт неправильное значение ![]() Спасибо большое за ответ, думаю теперь я разберусь. Последний раз редактировалось lephik; 16.03.2007 в 08:01. |
|
|||||
|
Et cetera
Регистрация: Sep 2002
Сообщений: 30,787
|
Тебе нужно отложить выполнение до следующего кадра хотя бы. Или на некоторое кол-во миллисекунд. Или переписать scrollHandler.
|
|
|||||
|
МЕГАФЛЭШЕР
Регистрация: May 1999
Адрес: Россия, Москва
Сообщений: 1,181
|
Последний раз редактировалось etc; 16.03.2007 в 13:00. |
|
|||||
|
Et cetera
Регистрация: Sep 2002
Сообщений: 30,787
|
Примерчик заодно:
http://livedocs.macromedia.com/flex/.../00001438.html Хотя, раз наследуемся от TextArea, то можно и переписать scrollHandler. Не знаю, правда, может это к глюкам каким-нибудь привести или нет… |
![]() |
![]() |
Часовой пояс GMT +4, время: 02:00. |
|
|
« Предыдущая тема | Следующая тема » |
|
|