|
|
« Предыдущая тема | Следующая тема » |
Опции темы | Опции просмотра |
|
|
|||||
Регистрация: Dec 2008
Сообщений: 87
|
Цвет выделения текста как в Word можно сделать?
Друзья, подскажите, пожалуйста.
Есть текстовое поле (динамическое), надо мышкой подсветить ЧАСТЬ текста (не сам текст, а его фон). В Word это называется - "Цвет выделения текста". Есть ли такая возможность в принципе? |
|
|||||
Встроенной возможности сделать это нет. Придется вручную. (Хотя может в TLF такая возможность и есть, не знаю). TextField.getCharBoundaries(), TextField.getLineMetrics() и прочие методы TextField'а вам в помощь.
|
|
|||||
Нуб нубам
модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
|
В TLF — SelectionFormat
__________________
Reality.getBounds(this); |
|
|||||
Регистрация: Dec 2008
Сообщений: 87
|
Большое спасибо за ответы!
ps А в SelectionFormat все свойства для чтения только вроде. Выделить можно с помощью setSelection и alwaysShowSelection = true, но там голубоватый цвет только. Вот его можно ли поменять? Последний раз редактировалось Bred45; 26.07.2012 в 17:40. |
|
|||||
Нуб нубам
модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
|
SelectionFormat это класс.
Свойства для чтения, да. Потому что задаются они все в конструкторе, и "на лету" уже не меняются. Голубоватый? У меня серый. В хелпе тоже))) Может это как-то зависит от системы.
__________________
Reality.getBounds(this); |
|
|||||
Нуб нубам
модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
|
package { import flash.display.Sprite; import flash.events.Event; import flashx.textLayout.container.ContainerController; import flashx.textLayout.edit.SelectionFormat; import flashx.textLayout.edit.SelectionManager; import flashx.textLayout.elements.ParagraphElement; import flashx.textLayout.elements.SpanElement; import flashx.textLayout.elements.TextFlow; import flashx.textLayout.events.SelectionEvent; import flashx.textLayout.formats.TextLayoutFormat; /** * ... * @author wolsh */ public class Main extends Sprite { //// Цвет и непрозрачность закрашивания полосы "подсветки" при выделении private var _selectionColorFocusOn:uint = 0xDD2222; //Different color is 0x4fe4e4 private var _selectionColorFocusOff:uint = 0xDDDD00; private var _selectionAlpha:Number = 1; public function Main():void { if (stage) init(); else addEventListener(Event.ADDED_TO_STAGE, init); } private function init(e:Event = null):void { removeEventListener(Event.ADDED_TO_STAGE, init); //// отображаемый контейнер текста var textContainer:Sprite = new Sprite(); this.addChild(textContainer); textContainer.x = 100; textContainer.y = 100; //// Стиль для выделения (в фокусе) var colorOn:uint = getDifferentColor(_selectionColorFocusOn); var selectionStyleFocusOn:SelectionFormat = new SelectionFormat(colorOn, _selectionAlpha); //// Стиль для выделения (без фокуса) var colorOff:uint = getDifferentColor(_selectionColorFocusOff); var selectionStyleFocusOff:SelectionFormat = new SelectionFormat(colorOff, _selectionAlpha); //// Менеджер стилей для выделения var selectionManager:SelectionManager = new SelectionManager(); //// Устанавливаем стиль для выделения в фокусе selectionManager.focusedSelectionFormat = selectionStyleFocusOn; selectionManager.unfocusedSelectionFormat = selectionStyleFocusOff; //// Text Font settings var textFormat:TextLayoutFormat = new TextLayoutFormat(); textFormat.fontFamily = "Arial"; textFormat.fontSize = 14; //// Контроллер для управления отображением нашего текста var textController:ContainerController = new ContainerController(textContainer); //// Устанавливаем формат текста textController.format = textFormat; //// Устанавливаем размеры текстового блока textController.setCompositionSize(1000, 40); //// строчный элемент var textSpan:SpanElement = new SpanElement(); textSpan.text = "Вот какой-то текст, который будем выделять."; //// блок текста, содержащий наш строчный элемент var textParagraph:ParagraphElement = new ParagraphElement(); textParagraph.addChild(textSpan); //// Главный управляющий элемент)) var textFlow:TextFlow = new TextFlow(); textFlow.addChild(textParagraph); //// Устанавливаем управляющего выделением textFlow.interactionManager = selectionManager; //// Добавляем управляющего нашим текстом textFlow.flowComposer.addController(textController); //// Запускаем обновление отображения textFlow.flowComposer.updateAllControllers(); //// Подписываемся на собтие выделения textFlow.addEventListener(SelectionEvent.SELECTION_CHANGE, handlerSelection); } private function getDifferentColor(selectionColor:uint):uint { var r:uint = 0xFF - (selectionColor >> 16); var g:uint = 0xFF - (selectionColor >> 8) & 0xFF; var b:uint = 0xFF - selectionColor & 0xFF; var rgb:uint = (r << 16) + (g << 8) + b; return rgb; } private function handlerSelection(event:SelectionEvent):void { var selectionBegin:int = event.selectionState.absoluteStart; var selectionEnd:int = event.selectionState.absoluteEnd; trace(event.selectionState.textFlow.getText(selectionBegin, selectionEnd)) } } }
__________________
Reality.getBounds(this); |
|
|||||
Регистрация: Dec 2008
Сообщений: 87
|
Большое спасибо за пример, буду изучать.
Пока у меня есть сомнения в возможности решения данной задачи встроенными способами. Selection - это не совсем то, что мне надо. Даже если удастся поменять его цвет. Мне ведь нужна возможность выделить в одном текстовом блоке разные фрагменты, возможно, разным цветом. Т.е. выделение не должно сбрасываться при клике по тексту. Здесь нужен другой инструмент. Но Ваш код я пока не изучал. Спасибо еще раз. ps Скажите, а есть ли возможность добиться такого результата, если использовать уже готовое текстовое окно (а не текст превращать в поток), созданное во Flash Professional? Никак не могу понять, как это сделать. Последний раз редактировалось Bred45; 29.07.2012 в 15:52. |
|
|||||
Нуб нубам
модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
|
Про текстфилд Вам ответили в первом же ответе. Нет там раскраски фона, ни в IDE ни программно. Там же отвечено, как делать самому — определяете область с нужными символами и закрашиваете в шейпе/спрайте под текстфилдом нужную область нужным цветом.
Может Вы нормально опишите проблему, не предполагая, что каждый флэшер однажды такое делал. В частности, объясните что значит "надо мышкой подсветить". Как подсветить? При наведении мышки на слово, при нажатии мышкой на слово, при стандартном выделении (протаскивании мышкой с нажатой кнопкой) и т.д. Что значит разными цветами? Откуда цвета, как определить, каким и что подсвечивать? Вы спросили про Выделение, Вам ответили про Выделение. Нужна раскраска — спрашивайте о раскраске. Подробно спрашивайте — подробно ответят.
__________________
Reality.getBounds(this); |
|
|||||
Регистрация: Dec 2008
Сообщений: 87
|
Вы правы, для TLF можно сформулировать проще: нужен программный инструмент "highlight".
|
|
|||||
Нуб нубам
модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
|
Ну, ну? Подробности?))) Что надо закрашивать фон под буквами это уже все поняли. Что именно Вы хотите, что он должен делать, какие методы иметь? Просто "закраситьФон(начальныйИндекс, конечный индекс)"? И чтобы закраска не исчезала, пока такой же командой не перекрасят ее в другой цвет?
Добавлено через 6 минут Текст должен менять цвет в областях подсветки? Новый цвет должен рассчитываться автоматически, или устанавливаться в другом методе (собственно, другой то есть готовый, setTextFormat)?
__________________
Reality.getBounds(this); |
Часовой пояс GMT +4, время: 08:12. |
|
« Предыдущая тема | Следующая тема » |
|
|