`

改变RichEditableText的LinkElement颜色并相应函数

 
阅读更多

在Flex中,需要LinkElement来添加事件监听,但不能改变字体颜色,而SpanElement可以设置字体颜色,但是不能添加监听事件。解决方案就是将二者嵌套,如:

<p>Search for product info on <a><span color="#ff0000">Google</span></a></p>

详细代码如下:

<?xml version="1.0" encoding="utf-8"?>
<!-- http://blog.flexexamples.com/2009/08/11/setting-text-in-a-spark-richtext-control-in-flex-4/ -->
<s:Application name="Spark_RichText_text_test"
			   xmlns:fx="http://ns.adobe.com/mxml/2009"
			   xmlns:s="library://ns.adobe.com/flex/spark"
			   xmlns:mx="library://ns.adobe.com/flex/halo" xmlns:local="*">
	
	<fx:Script>
		<![CDATA[
			import flashx.textLayout.conversion.TextConverter;
			import flashx.textLayout.elements.FlowElement;
			import flashx.textLayout.elements.FlowGroupElement;
			import flashx.textLayout.elements.LinkElement;
			import flashx.textLayout.elements.SpanElement;
			import flashx.textLayout.elements.TextFlow;
			import flashx.textLayout.events.FlowElementMouseEvent;
			
			import mx.controls.Alert;
			
			import spark.utils.TextFlowUtil;
			
			protected function button1_clickHandler(event:MouseEvent):void
			{
				// TODO Auto-generated method stub
				var d:String = '<p>The quick brown <span color="#ff0000">fox jumps over</span> the lazy dogg.</p>';
				richTxt.textFlow = TextFlowUtil.importFromString(d);
			}
			
			private function handleClickEvent(e:FlowElementMouseEvent):void {
				Alert.show("dd");
			}   
			
			protected function button2_clickHandler(event:MouseEvent):void
			{
				var d:String = '<p>Search for product info on <a click="handleClickEvent(event)">Google</a></p>';
				richTxt2.textFlow = TextConverter.importToFlow(d, TextConverter.TEXT_FIELD_HTML_FORMAT);
			}
			
			protected function button3_clickHandler(event:MouseEvent):void
			{
				var d:String = '<p>Search for product info on <a><span color="#ff0000">Google</span></a></p>';			
				//var d:String = '<p>Search for product info on <span color="#ff0000">Google</span></p>';
				//richTxt2.textFlow = TextConverter.importToFlow(d, TextConverter.TEXT_FIELD_HTML_FORMAT);
				richTxt3.textFlow = addLinkClickHandler(d, handleClickEvent);
			}
			
			/**
			 * Converts the html string (from the resources) into a TextFlow object
			 * using the TextConverter class. Then it iterates through all the 
			 * elements in the TextFlow until it finds a LinkElement, and adds a 
			 * FlowElementMouseEvent.CLICK event handler to that Link Element.
			 */
			public static function addLinkClickHandler(html:String, 
													   linkClickedHandler:Function):TextFlow {
				//var textFlow:TextFlow = TextConverter.importToFlow(html, TextConverter.TEXT_FIELD_HTML_FORMAT);
				var textFlow:TextFlow = TextFlowUtil.importFromString(html);
				var link:LinkElement = findLinkElement(textFlow);
				if (link != null) {
					link.addEventListener(FlowElementMouseEvent.CLICK, 
						linkClickedHandler, false, 0, true);
				} else {
					trace("Warning - couldn't find link tag in: " + html);
				}
				return textFlow;
			}
			
			/**
			 * Finds the first LinkElement recursively and returns it.
			 */
			private static function findLinkElement(group:FlowGroupElement):LinkElement {
				var childGroups:Array = [];
				// First check all the child elements of the current group,
				// Also save any children that are FlowGroupElement
				for (var i:int = 0; i < group.numChildren; i++) {
					var element:FlowElement = group.getChildAt(i);
					if (element is LinkElement) {
						return (element as LinkElement);
					} else if (element is FlowGroupElement) {
						childGroups.push(element);
					}
				}
				// Recursively check the child FlowGroupElements now
				for (i = 0; i < childGroups.length; i++) {
					var childGroup:FlowGroupElement = childGroups[i];
					var link:LinkElement = findLinkElement(childGroup);
					if (link != null) {
						return link;
					}
				}
				return null;
			}
			
			
			
			
		]]>
	</fx:Script>
	
	<fx:Declarations>
		<fx:String id="htmlTextAsMarkup"><![CDATA[<p>The quick brown <span fontWeight="bold">fox jumps over</span> the lazy dogg.</p>]]></fx:String>
	</fx:Declarations>	

	<s:RichText id="richTxt"
				horizontalCenter="0" verticalCenter="0" />
	<s:Button x="34" y="32" label="richtext" click="button1_clickHandler(event)"/>
	
	<s:RichEditableText top="70" editable="false" focusEnabled="false"  id="richTxt2">
	</s:RichEditableText>
	<local:HtmlLabel id="richTxt3" top="100">
		
	</local:HtmlLabel>
	<s:Button x="130" y="32" label="RichEditableText" click="button2_clickHandler(event)"/>
	<s:Button x="258" y="32" label="htmlLabel" click="button3_clickHandler(event)"/>
	
</s:Application>

 组件HtmlLabel的代码如下:

<?xml version="1.0" encoding="utf-8"?>
<s:RichEditableText xmlns:fx="http://ns.adobe.com/mxml/2009"
					xmlns:s="library://ns.adobe.com/flex/spark"
					xmlns:mx="library://ns.adobe.com/flex/mx"
					focusEnabled="false"
					selectable="false"
					editable="false">
	
	<fx:Script>
		<![CDATA[
			import flashx.textLayout.conversion.TextConverter;
			
			override public function set text(value:String):void {
				super.textFlow = TextConverter.importToFlow(value, 
					TextConverter.TEXT_FIELD_HTML_FORMAT);
			}
		]]>
	</fx:Script>
	
</s:RichEditableText>

 运行结果“Google”字符串字体变为红色,如下所示:



 

  • 大小: 4.2 KB
分享到:
评论

相关推荐

    linux目录操作函数汇总 遍历,改变路径等

    13. link、symlink和unlink函数:link用于创建一个指向现有文件的硬链接,函数原型为`int link(const char *oldpath, const char *newpath);`。symlink用于创建一个符号链接,函数原型为`int symlink(const char *...

    complie和link函数

    - **库函数的链接**:如果源代码中调用了库函数,链接器会将相应的函数代码从系统库中添加到可执行文件中。 3. **编译与链接的区别**: - **时间点**:编译通常在源代码级别完成,而链接发生在所有相关目标文件或...

    Delphi中DLL的回调函数使用

    在Delphi编程环境中,DLL(Dynamic Link Library)是一种可重用代码的库,它包含一组可供其他应用程序调用的函数和过程。回调函数是DLL中一个特殊的概念,它允许DLL将控制权交还给调用者,让调用者执行特定的代码。...

    DLL接口函数查看工具

    DLL(Dynamic Link Library)是Windows操作系统中的一个重要组成部分,它是一种可重用的代码库,包含了一组可执行的函数和过程,供多个程序共享使用。DLL接口函数则是这些可调用的功能点,允许应用程序通过调用这些...

    EXCEL常用函数库代码

    Excel是Microsoft Office套件中的一个强大电子表格程序,它提供了丰富的功能来处理数据,包括复杂的计算、数据分析和数据可视化。...通过深入理解并利用这些函数,我们可以更好地管理和分析数据,提升工作效率。

    各种DLL文件函数查看器

    然而,开发过程中,调用DLL函数并不总是一帆风顺,有时我们需要深入DLL内部,查看其提供的函数及参数,以解决调用问题。这就是“各种DLL文件函数查看器”软件的作用所在。 该软件的核心功能是提供一个直观的界面,...

    DLL函数查看器,查看DLL文件入口函数

    2. **查看导出表**:工具会自动解析DLL并展示导出函数列表。 3. **搜索特定函数**:如果你知道某个函数名,可以使用搜索功能快速找到它。 4. **分析函数信息**:查看每个函数的详细信息,如地址、参数、是否为入口...

    通达信DLL函数编程规范

    通过返回值或设置全局错误码的方式,DLL函数需要提供错误处理机制,以便在出现问题时,主程序能获取到错误信息并作出相应处理。 5. **多线程安全** 通达信可能在多线程环境中调用DLL函数,因此,开发者需要确保...

    DLL函数查看器 DLL函数查看

    DLL(Dynamic Link Library)函数查看器是一款用于帮助程序员和系统管理员深入理解DLL文件内部功能的工具。DLL文件是Windows操作系统中的一个重要组成部分,它包含了可被多个程序共享的代码和数据,以此实现资源的...

    VB生成导出函数的DLL-link源码-蓝夜精灵

    本篇将详细介绍如何在VB中创建一个导出函数的DLL,并讨论如何在其他应用程序中链接和调用这些函数。 首先,我们需要了解DLL的基本概念。DLL是一种包含可由多个程序同时使用的函数和其他资源的库。它们允许代码和...

    VB Make Dll Link 创建可输出函数的DLL工具

    《VB Make DLL Link:创建可输出函数的DLL工具详解》 在编程领域,动态链接库(DLL)是一种共享代码的方式,它可以被多个程序同时使用,从而节省内存并提高执行效率。VB Make DLL Link是一款专为Visual Basic(VB)...

    查看c++ dll内部函数

    在Windows操作系统中,DLL(Dynamic Link Library)是包含可由多个程序同时使用的代码和数据的库。DLL文件是C++编程中的一个重要组成部分,它允许开发者将功能模块化,提高代码重用性和系统效率。有时,我们需要查看...

    delphi 编写动态库并实现回调函数

    在编程领域,动态库(Dynamic Link Library,DLL)是一种共享代码的方式,允许多个应用程序使用同一份存储在内存中的代码,从而节省系统资源。Delphi 是一个强大的 Object Pascal 开发环境,它支持创建 Windows 平台...

    x64位DLL接口导出函数查看器

    在Windows操作系统中,动态链接库(Dynamic Link Library,简称DLL)是一种共享代码的机制,它允许不同程序共享同一段内存中的代码,从而节省系统资源。当涉及到64位应用程序开发时,对DLL的管理与32位环境有所不同...

    dll 回调函数

    DLL(Dynamic Link Library)是Windows操作系统中的一个核心特性,它允许多个程序共享同一段代码和数据,从而节省内存并简化软件开发。回调函数是DLL中一个重要的编程概念,它允许DLL将控制权交还给调用者,使得调用...

    DLL函数查看器(DLL+Export+Viewer),支持64位DLL查看顺.zip

    DLL,即动态链接库(Dynamic Link Library),是Windows操作系统中的一种共享库机制,它包含了一系列可被多个程序同时调用的函数和资源。DLL文件的主要作用在于代码复用和节省系统资源,允许开发者将功能模块化,...

    常用QTP函数合集

    - **报告结果**:最终,函数会根据关闭情况输出相应的报告,包括成功消息或失败信息。 #### 三、函数应用场景分析 - **文件操作**:这部分可能包含了读取、写入文件的操作函数,例如读取配置文件、日志文件等,...

    dlopen加载c++ 函数及类

    在IT行业中,动态链接库(Dynamic Link Library,简称DLL)是操作系统提供的一种机制,它允许程序在运行时加载和使用其他模块。在Unix和Linux系统中,这种功能由`dlopen`函数实现。本篇文章将深入探讨如何使用`...

    动态库回调函数示例

    在编程领域,动态链接库(Dynamic Link Library,简称 DLL)是一种可执行文件格式,它包含可供其他程序调用的函数和资源。DLL 文件允许多个应用程序共享同一代码库,从而节省内存并提高系统效率。VC++6.0 是 ...

    VBA自定义函数智能提示.rar

    当用户在VBA编辑器中开始输入函数名时,这些信息会被加载并显示为自动完成选项,提高了编程的效率和准确性。 要使用这些XLL文件,用户通常需要在VBA环境中进行以下步骤: 1. 打开Excel,进入VBA编辑器(按下Alt + ...

Global site tag (gtag.js) - Google Analytics