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

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

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

Регистрация: Jan 2008
Адрес: Украина, Славутич
Сообщений: 646
Отправить сообщение для willis83 с помощью ICQ
По умолчанию Скролл TextField

Есть текстовое поле, тип INPUT и про вводе текста большего чем сам TextField хотелось бы чтобы появлялся скролл по вертикали автоматически. При углублении в тему выход нашел через casheAsBitmap и rectangle, но может есть выход попроще?

Старый 26.04.2009, 01:23
Rzer вне форума Посмотреть профиль Отправить личное сообщение для Rzer Посетить домашнюю страницу Rzer Найти все сообщения от Rzer
  № 2  
Ответить с цитированием
Rzer
 
Аватар для Rzer

блогер
Регистрация: Feb 2007
Адрес: Spb
Сообщений: 613
Записей в блоге: 8
Отправить сообщение для Rzer с помощью ICQ
textHeight*numLines = высота текстового поля для плавной прокрутки. Маска к тексту и скрол - всё, что тебе нужно. Или скролить тектовое поле через scrollV. Число строк которое мы видим = bottomScrollV - scrollV, сравнивая с количеством строк numLines можем также определить скролл.


Последний раз редактировалось Rzer; 26.04.2009 в 01:28.
Старый 26.04.2009, 01:53
willis83 вне форума Посмотреть профиль Отправить личное сообщение для willis83 Найти все сообщения от willis83
  № 3  
Ответить с цитированием
willis83
 
Аватар для willis83

Регистрация: Jan 2008
Адрес: Украина, Славутич
Сообщений: 646
Отправить сообщение для willis83 с помощью ICQ
Вы меня не так поняли. Мы имеем поля для ввода текста определённого размера, пользователь вводит текст и объем текста не помещается в это поле, так вот я хотел чтобы когда верхние строки начнут уходить за поле, автоматически появлялся вертикальный скролинг. Подобие ScrollPane.

Старый 26.04.2009, 10:53
Rzer вне форума Посмотреть профиль Отправить личное сообщение для Rzer Посетить домашнюю страницу Rzer Найти все сообщения от Rzer
  № 4  
Ответить с цитированием
Rzer
 
Аватар для Rzer

блогер
Регистрация: Feb 2007
Адрес: Spb
Сообщений: 613
Записей в блоге: 8
Отправить сообщение для Rzer с помощью ICQ
Цитата:
Или скролить тектовое поле через scrollV. Число строк которое мы видим = bottomScrollV - scrollV, сравнивая с количеством строк numLines можем также определить скролл.
Текстовое поле в этом случае имеет заданную высоту. Оба случая, описанные мною имеют поведение ScrollPane, сама по себе полоса прокрутки у поля не появится.


Последний раз редактировалось Rzer; 26.04.2009 в 10:56.
Старый 27.04.2009, 17:40
sabarn вне форума Посмотреть профиль Отправить личное сообщение для sabarn Найти все сообщения от sabarn
  № 5  
Ответить с цитированием
sabarn
 
Аватар для sabarn

Регистрация: Nov 2008
Адрес: МО
Сообщений: 105
Отправить сообщение для sabarn с помощью ICQ
добавить компоненту UIScrollBar к текстовому полю
и описать его:
Код AS3:
myScroll.scrollTargetName = "myTextField";
__________________
так то оно так, но ежели иначе - так вот тебе и пожалуста

Старый 15.05.2009, 13:03
Gal4enochek вне форума Посмотреть профиль Отправить личное сообщение для Gal4enochek Найти все сообщения от Gal4enochek
  № 6  
Ответить с цитированием
Gal4enochek

Регистрация: May 2008
Адрес: Днепропетровск
Сообщений: 151
Отправить сообщение для Gal4enochek с помощью ICQ
Столкнулась с похожей проблемой. Надо прицепить скроллбар к динамическому текстовому полю.
Прочитала тут и про UIScrollBar, решила попробовать, но не выходит.
Пишу на AS3. Компилирую через Flash CS3 , а код пишу во Flexe. Flex не видит библиотеки fl.controls.UIScrollBar.
Как быть? Может какую-то библиотеку подключить?

Пыталась написать скроллбар сама. Смотрела в примерах, везде используется маска. То есть просто средствами текстового поля проскролить текст на указанное число строк нельзя?


Последний раз редактировалось Gal4enochek; 15.05.2009 в 13:07.
Старый 15.05.2009, 13:40
wvxvw вне форума Посмотреть профиль Отправить личное сообщение для wvxvw Найти все сообщения от wvxvw
  № 7  
Ответить с цитированием
wvxvw
Modus ponens
 
Аватар для wvxvw

модератор форума
Регистрация: Jul 2006
Адрес: #1=(list #1#)
Сообщений: 8,049
Записей в блоге: 38
Если есть Флеш - положите компонент скроллбара в отдельный файл, скомпилируйте его в SWC и подключите библиотеку к проекту.
Если Флеша нету, но вы пользуетесь Флексовым фреймворком - во Флексе есть свой скроллбар:
http://livedocs.adobe.com/flex/3/lan...ScrollBar.html
Если ни то и ни дрогое и у самой не получается написать:
http://code.google.com/p/e4xu/source...ui/Scroller.as
http://e4xu.googlecode.com/files/scrollertest.zip
можете взять за основу или прямо так и использовать.
__________________
Hell is the possibility of sanity


Последний раз редактировалось wvxvw; 15.05.2009 в 13:44.
Старый 15.05.2009, 13:59
Gal4enochek вне форума Посмотреть профиль Отправить личное сообщение для Gal4enochek Найти все сообщения от Gal4enochek
  № 8  
Ответить с цитированием
Gal4enochek

Регистрация: May 2008
Адрес: Днепропетровск
Сообщений: 151
Отправить сообщение для Gal4enochek с помощью ICQ
Спасибо.
Почти получилось написать свой скроллбар: устанавливаю text_field.scrollV в значение, которое соответствует текущему положения ползунка.
Правда в этом случае пришлось отказаться от скроллинга колесиком мыши. Либо колесиком текстовое поле само себя скролит (и скроллбар в соответствии двигает ползунок), либо если используется полоса скроллбар, то на колесико не реагируем.
Во что вышло (пока без кнопок, ползунок - тоже самостоятельно написанная кнопка)
Код AS3:
public class ScrollBar extends MovieClip
	{
		private var background		:MovieClip;
		private var slider			:BasicButton;
		private var max_value		:Number;
		private var delta_y			:Number = 10;
		private var anchor_y		:Number;
		private var vis_lines_count :int;
 
		private var	text_field		:TextField; 
		private var enable_whell	:Boolean;	
 
		public function ScrollBar()
		{
			super();
			background = this.getChildByName("bg") as MovieClip;
			max_value = background.height;
			slider = new BasicButton(this.getChildByName("slider_mc") as MovieClip);
			slider.addEventListener(MouseEvent.MOUSE_DOWN, sliderMouseDownHandler);
			slider.addEventListener(MouseEvent.MOUSE_UP, sliderMouseUpHandler);
			this.addEventListener(Event.ENTER_FRAME, enterFrameHandler);
			enable_whell = true;
		}
 
		public function attachTextField(textField :TextField):void{
			text_field = textField;
			text_field.addEventListener(Event.SCROLL, scrollTextHandler);
			vis_lines_count = Math.floor(textField.height * textField.numLines / textField.textHeight);
			scrollTextHandler(null);
		}
 
		private function sliderMouseDownHandler(event:MouseEvent):void{
			startSlide();
		}
 
		private function sliderMouseUpHandler(event:MouseEvent):void{
			stopSlide();
		}
 
		private function mouseOutHandler(event:MouseEvent):void{
			stopSlide();
		}
 
		private function sliderMouseMoveHandler(event:MouseEvent):void{
			slider.Clip.y = this.mouseY - anchor_y;
			normalizePosition();	
		}
 
		private function enterFrameHandler(event :Event):void{
			if (text_field && this.visible && !enable_whell){
				var n:int = text_field.numLines;
				var percent :Number = slider.Clip.y/(max_value - slider.Clip.height)
				text_field.scrollV = Math.round(percent*(n-(vis_lines_count-1))) + 1;
			}
		} 
 
		private function scrollTextHandler(event :Event):void{
			if (text_field && enable_whell){
				var n:int = text_field.numLines;
				var cur:int = text_field.bottomScrollV; 
				var percent :Number = (cur - vis_lines_count)/(n - vis_lines_count)
				slider.Clip.y = (max_value - slider.Clip.height)*percent;
				visible = (n >= vis_lines_count);
			}
		}
 
		private function normalizePosition():void{
			if (slider.Clip.y > max_value - slider.Clip.height)
				slider.Clip.y = max_value - slider.Clip.height;
			if (slider.Clip.y < 0)
				slider.Clip.y = 0;
		}
 
		private function startSlide():void{
			if (!this.hasEventListener(MouseEvent.MOUSE_OUT))
				this.addEventListener(MouseEvent.MOUSE_OUT, mouseOutHandler);	
			slider.Clip.startDrag(false, new Rectangle(0, 0, 0, max_value - slider.Clip.height));
			enable_whell = false;
		}
 
		private function stopSlide():void{
			if (this.hasEventListener(MouseEvent.MOUSE_OUT))	
				this.removeEventListener(MouseEvent.MOUSE_OUT, mouseOutHandler);	
			slider.Clip.stopDrag();
			enable_whell = true;
		}
 
		private function slideDown():void{
			slider.Clip.y += delta_y;
			normalizePosition();
		}
 
		private function slideUp():void{
			slider.Clip.y -= delta_y;
			normalizePosition();
		}
 
		public function destoy():void{
			slider.destroy();
			try{slider.removeEventListener(MouseEvent.MOUSE_DOWN, sliderMouseDownHandler);}
				catch(e:Error){};
			try{slider.removeEventListener(MouseEvent.MOUSE_UP, sliderMouseUpHandler);}
				catch(e:Error){};
			try{this.removeEventListener(MouseEvent.MOUSE_OUT, mouseOutHandler);}
				catch(e:Error){};	
			try{this.removeEventListener(Event.ENTER_FRAME, enterFrameHandler);}
				catch(e:Error){};	
			if (text_field){	
				try{text_field.removeEventListener(Event.SCROLL, scrollTextHandler);}
					catch(e:Error){};
			}		
		}
 
	}

Старый 15.05.2009, 17:12
willis83 вне форума Посмотреть профиль Отправить личное сообщение для willis83 Найти все сообщения от willis83
  № 9  
Ответить с цитированием
willis83
 
Аватар для willis83

Регистрация: Jan 2008
Адрес: Украина, Славутич
Сообщений: 646
Отправить сообщение для willis83 с помощью ICQ
А зачем лишняя работа если есть компонента TextArea? Вполне удобно. И скроллбар сама показывает и вид нормальный. Были проблемы со шрифтами, но я разобрался. на адобе дурацкий пример настройки выложили... как будто специально не хотят учить 8)

Старый 15.05.2009, 17:28
Gal4enochek вне форума Посмотреть профиль Отправить личное сообщение для Gal4enochek Найти все сообщения от Gal4enochek
  № 10  
Ответить с цитированием
Gal4enochek

Регистрация: May 2008
Адрес: Днепропетровск
Сообщений: 151
Отправить сообщение для Gal4enochek с помощью ICQ
Опять же Flex не знает, что такое fl.controls.TextArea То есть надо его как-то отдельно присоединять к проекту + скроллбар нужно скинить.
А так вышло неплохое упражнение по написанию собственных контролов

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

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

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


 


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


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