![]() |
|
||||||||||
|
|
|
|||||
|
Есть текстовое поле, тип INPUT и про вводе текста большего чем сам TextField хотелось бы чтобы появлялся скролл по вертикали автоматически. При углублении в тему выход нашел через casheAsBitmap и rectangle, но может есть выход попроще?
|
|
|||||
|
textHeight*numLines = высота текстового поля для плавной прокрутки. Маска к тексту и скрол - всё, что тебе нужно. Или скролить тектовое поле через scrollV. Число строк которое мы видим = bottomScrollV - scrollV, сравнивая с количеством строк numLines можем также определить скролл.
__________________
if (love is true) break my.heart; Последний раз редактировалось Rzer; 26.04.2009 в 01:28. |
|
|||||
|
Вы меня не так поняли. Мы имеем поля для ввода текста определённого размера, пользователь вводит текст и объем текста не помещается в это поле, так вот я хотел чтобы когда верхние строки начнут уходить за поле, автоматически появлялся вертикальный скролинг. Подобие ScrollPane.
|
|
|||||
|
Цитата:
__________________
if (love is true) break my.heart; Последний раз редактировалось Rzer; 26.04.2009 в 10:56. |
|
|||||
|
добавить компоненту UIScrollBar к текстовому полю
и описать его:
__________________
так то оно так, но ежели иначе - так вот тебе и пожалуста |
|
|||||
|
Столкнулась с похожей проблемой. Надо прицепить скроллбар к динамическому текстовому полю.
Прочитала тут и про UIScrollBar, решила попробовать, но не выходит. Пишу на AS3. Компилирую через Flash CS3 , а код пишу во Flexe. Flex не видит библиотеки fl.controls.UIScrollBar. Как быть? Может какую-то библиотеку подключить? Пыталась написать скроллбар сама. Смотрела в примерах, везде используется маска. То есть просто средствами текстового поля проскролить текст на указанное число строк нельзя? Последний раз редактировалось Gal4enochek; 15.05.2009 в 13:07. |
|
|||||
|
Modus ponens
|
Если есть Флеш - положите компонент скроллбара в отдельный файл, скомпилируйте его в 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. |
|
|||||
|
Спасибо.
Почти получилось написать свой скроллбар: устанавливаю text_field.scrollV в значение, которое соответствует текущему положения ползунка. Правда в этом случае пришлось отказаться от скроллинга колесиком мыши. Либо колесиком текстовое поле само себя скролит (и скроллбар в соответствии двигает ползунок), либо если используется полоса скроллбар, то на колесико не реагируем. Во что вышло (пока без кнопок, ползунок - тоже самостоятельно написанная кнопка) 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){}; } } } |
|
|||||
|
А зачем лишняя работа если есть компонента TextArea? Вполне удобно. И скроллбар сама показывает и вид нормальный. Были проблемы со шрифтами, но я разобрался. на адобе дурацкий пример настройки выложили... как будто специально не хотят учить 8)
|
|
|||||
|
Опять же Flex не знает, что такое fl.controls.TextArea
То есть надо его как-то отдельно присоединять к проекту + скроллбар нужно скинить.А так вышло неплохое упражнение по написанию собственных контролов ![]() |
![]() |
![]() |
Часовой пояс GMT +4, время: 00:14. |
|
|
« Предыдущая тема | Следующая тема » |
|
|