Войти
ПрограммированиеФорумВеб

ActionScript 3.0. Проблема с прокруткой текстового поля

#0
13:15, 3 фев. 2012

Всем доброго дня!

Возникла проблема с прокруткой текстого поля (TextField). На flasher.ru проблему не смогли решить (код вроде правильный, почему не работает - никто не знает). Решил написать окно отладки чтобы туда выводить всю информацию и уже в нужные моменты открывать это окно и пролистывать весь лог. Нарисовал (работаю в связке Adobe Flash CS5 и FlashDevelop):

Изображение

Строчка с надписью Debug - это такая строчка, за которую данное окно можно таскать по экрану. Далее следуют три кнопки и их описание в порядке следования:

Справа располагается ScrollBar и на текущий момент на нём работают только кнопки навигации (то есть ползунок пока не работает). Всё это дело я оформил в классе вот как:

public var caption:MovieClip=null;              // Окно заголовка
public var buttonNew:DebugCheck=null;            // Кнопка привязки к новому сообщению
public var buttonClear:DebugButton=null;          // Кнопка очистки
public var buttonClose:DebugButton=null;          // Кнопка закрытия
public var buttonScroll:DebugButton=null;          // Ползунок прокрутки
public var buttonUp:DebugButton=null;            // Кнопка прокрутки вверх
public var buttonDown:DebugButton=null;            // Кнопка прокрутки вниз
public var text:TextField=null;                // Текст

Что касается кнопок навигации, то на них я подписался и вот что происходит когда они срабатывают:

case ID_BUTTON_SCROLL_UP:
  text.scrollV--;
  break;
              
case ID_BUTTON_SCROLL_DOWN:
  text.scrollV++;
  break;

И тут проблем нет. Действительно, когда я добавляю новые строки в текстовое поле, что оно заходит за области видимости, то с помощью этих клавиш я могу перемещаться по строкам (тоже самое я могу делать и с помощью колёсика мышки). А вот же моя функция добавления строк:

public function Add(_text:String):void
{
  var date:Date=new Date();
  var timeHours:String=date.getHours().toString();
  var timeMinutes:String=date.getMinutes().toString();
  var timeSeconds:String=date.getSeconds().toString();
  var timeMilliseconds:String=date.getMilliseconds().toString();
  var info:String=null;
      
  if(timeHours.length==1) timeHours="0"+timeHours;
  if(timeMinutes.length==1) timeMinutes="0"+timeMinutes;
  if(timeSeconds.length==1) timeSeconds="0"+timeSeconds;
      
  if(timeMilliseconds.length==1)
    timeMilliseconds="00"+timeMilliseconds;
  else if(timeMilliseconds.length==2)
    timeMilliseconds="0"+timeMilliseconds;
      
  info=timeHours+":"+timeMinutes+":"+timeSeconds+":"+timeMilliseconds+"-"+buttonNew.GetChecked().toString()+" ";
      
  if(text.length) text.appendText("\n");
  text.appendText(info+_text);
  buttonClear.Enable();
      
  if(buttonNew.GetChecked()) text.scrollV=text.maxScrollV;
}

В отладке видно что buttonNew.GetChecked() всегда возвращает true. Но почему тогда текстовое окно не отображает последнюю добавленную строку?

Свойство scrollV у текстового поля определяет текущее положение прокрутки по вертикали, а свойство maxScrollV - максимально возможное положение.


#1
16:17, 3 фев. 2012

s3dworld

> В отладке видно что buttonNew.GetChecked() всегда возвращает true. Но почему
> тогда текстовое окно не отображает последнюю добавленную строку?

Попробуй закомментить проверку. Если по прежнему работать не будет, то проблема в скролле. Если будет работать, значит, что-то не так с условием.

#2
17:56, 3 фев. 2012

>text.scrollV=text.maxScrollV;

Попробуй повесить на событие resize или что там у текст филда есть. Вобще эта событийная ориентированность чаще мешает, чем помогает, имхо.

ПрограммированиеФорумВеб

Тема в архиве.