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

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

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

Регистрация: Dec 2008
Сообщений: 87
Question Цвет выделения текста как в Word можно сделать?

Друзья, подскажите, пожалуйста.
Есть текстовое поле (динамическое), надо мышкой подсветить ЧАСТЬ текста (не сам текст, а его фон).
В Word это называется - "Цвет выделения текста".

Есть ли такая возможность в принципе?

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

Регистрация: Oct 2010
Сообщений: 1,049
Отправить сообщение для bav с помощью ICQ
Встроенной возможности сделать это нет. Придется вручную. (Хотя может в TLF такая возможность и есть, не знаю). TextField.getCharBoundaries(), TextField.getLineMetrics() и прочие методы TextField'а вам в помощь.

Старый 25.07.2012, 23:59
Wolsh вне форума Посмотреть профиль Отправить личное сообщение для Wolsh Найти все сообщения от Wolsh
  № 3  
Ответить с цитированием
Wolsh
Нуб нубам
 
Аватар для Wolsh

модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
В TLF — SelectionFormat
__________________
Reality.getBounds(this);

Старый 26.07.2012, 12:52
Bred45 вне форума Посмотреть профиль Отправить личное сообщение для Bred45 Найти все сообщения от Bred45
  № 4  
Ответить с цитированием
Bred45

Регистрация: Dec 2008
Сообщений: 87
Большое спасибо за ответы!

ps
А в SelectionFormat все свойства для чтения только вроде.
Выделить можно с помощью
setSelection и alwaysShowSelection = true, но там голубоватый цвет только.
Вот его можно ли поменять?


Последний раз редактировалось Bred45; 26.07.2012 в 17:40.
Старый 26.07.2012, 20:43
Wolsh вне форума Посмотреть профиль Отправить личное сообщение для Wolsh Найти все сообщения от Wolsh
  № 5  
Ответить с цитированием
Wolsh
Нуб нубам
 
Аватар для Wolsh

модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
SelectionFormat это класс.
Свойства для чтения, да.
Потому что задаются они все в конструкторе, и "на лету" уже не меняются.

Голубоватый? У меня серый. В хелпе тоже))) Может это как-то зависит от системы.
__________________
Reality.getBounds(this);

Старый 27.07.2012, 14:30
Wolsh вне форума Посмотреть профиль Отправить личное сообщение для Wolsh Найти все сообщения от Wolsh
  № 6  
Ответить с цитированием
Wolsh
Нуб нубам
 
Аватар для Wolsh

модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
Код AS3:
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))
		}
 
	}
 
}
Вложения
Тип файла: zip SelectionColor.zip (352.9 Кб, 69 просмотров)
__________________
Reality.getBounds(this);

Старый 29.07.2012, 15:40
Bred45 вне форума Посмотреть профиль Отправить личное сообщение для Bred45 Найти все сообщения от Bred45
  № 7  
Ответить с цитированием
Bred45

Регистрация: Dec 2008
Сообщений: 87
Большое спасибо за пример, буду изучать.
Пока у меня есть сомнения в возможности решения данной задачи встроенными способами.
Selection - это не совсем то, что мне надо. Даже если удастся поменять его цвет.
Мне ведь нужна возможность выделить в одном текстовом блоке разные фрагменты, возможно, разным цветом.
Т.е. выделение не должно сбрасываться при клике по тексту. Здесь нужен другой инструмент.

Но Ваш код я пока не изучал.
Спасибо еще раз.

ps
Скажите, а есть ли возможность добиться такого результата, если использовать уже готовое текстовое окно (а не текст превращать в поток), созданное во Flash Professional? Никак не могу понять, как это сделать.


Последний раз редактировалось Bred45; 29.07.2012 в 15:52.
Старый 29.07.2012, 20:14
Wolsh вне форума Посмотреть профиль Отправить личное сообщение для Wolsh Найти все сообщения от Wolsh
  № 8  
Ответить с цитированием
Wolsh
Нуб нубам
 
Аватар для Wolsh

модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
Про текстфилд Вам ответили в первом же ответе. Нет там раскраски фона, ни в IDE ни программно. Там же отвечено, как делать самому — определяете область с нужными символами и закрашиваете в шейпе/спрайте под текстфилдом нужную область нужным цветом.
Может Вы нормально опишите проблему, не предполагая, что каждый флэшер однажды такое делал.
В частности, объясните что значит "надо мышкой подсветить". Как подсветить? При наведении мышки на слово, при нажатии мышкой на слово, при стандартном выделении (протаскивании мышкой с нажатой кнопкой) и т.д. Что значит разными цветами? Откуда цвета, как определить, каким и что подсвечивать?
Вы спросили про Выделение, Вам ответили про Выделение. Нужна раскраска — спрашивайте о раскраске. Подробно спрашивайте — подробно ответят.
__________________
Reality.getBounds(this);

Старый 30.07.2012, 21:21
Bred45 вне форума Посмотреть профиль Отправить личное сообщение для Bred45 Найти все сообщения от Bred45
  № 9  
Ответить с цитированием
Bred45

Регистрация: Dec 2008
Сообщений: 87
Вы правы, для TLF можно сформулировать проще: нужен программный инструмент "highlight".

Старый 30.07.2012, 21:45
Wolsh вне форума Посмотреть профиль Отправить личное сообщение для Wolsh Найти все сообщения от Wolsh
  № 10  
Ответить с цитированием
Wolsh
Нуб нубам
 
Аватар для Wolsh

модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
Ну, ну? Подробности?))) Что надо закрашивать фон под буквами это уже все поняли. Что именно Вы хотите, что он должен делать, какие методы иметь? Просто "закраситьФон(начальныйИндекс, конечный индекс)"? И чтобы закраска не исчезала, пока такой же командой не перекрасят ее в другой цвет?

Добавлено через 6 минут
Текст должен менять цвет в областях подсветки? Новый цвет должен рассчитываться автоматически, или устанавливаться в другом методе (собственно, другой то есть готовый, setTextFormat)?
__________________
Reality.getBounds(this);

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

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

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


 


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


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