在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”字符串字体变为红色,如下所示:
相关推荐
13. link、symlink和unlink函数:link用于创建一个指向现有文件的硬链接,函数原型为`int link(const char *oldpath, const char *newpath);`。symlink用于创建一个符号链接,函数原型为`int symlink(const char *...
- **库函数的链接**:如果源代码中调用了库函数,链接器会将相应的函数代码从系统库中添加到可执行文件中。 3. **编译与链接的区别**: - **时间点**:编译通常在源代码级别完成,而链接发生在所有相关目标文件或...
在Delphi编程环境中,DLL(Dynamic Link Library)是一种可重用代码的库,它包含一组可供其他应用程序调用的函数和过程。回调函数是DLL中一个特殊的概念,它允许DLL将控制权交还给调用者,让调用者执行特定的代码。...
DLL(Dynamic Link Library)是Windows操作系统中的一个重要组成部分,它是一种可重用的代码库,包含了一组可执行的函数和过程,供多个程序共享使用。DLL接口函数则是这些可调用的功能点,允许应用程序通过调用这些...
Excel是Microsoft Office套件中的一个强大电子表格程序,它提供了丰富的功能来处理数据,包括复杂的计算、数据分析和数据可视化。...通过深入理解并利用这些函数,我们可以更好地管理和分析数据,提升工作效率。
然而,开发过程中,调用DLL函数并不总是一帆风顺,有时我们需要深入DLL内部,查看其提供的函数及参数,以解决调用问题。这就是“各种DLL文件函数查看器”软件的作用所在。 该软件的核心功能是提供一个直观的界面,...
2. **查看导出表**:工具会自动解析DLL并展示导出函数列表。 3. **搜索特定函数**:如果你知道某个函数名,可以使用搜索功能快速找到它。 4. **分析函数信息**:查看每个函数的详细信息,如地址、参数、是否为入口...
通过返回值或设置全局错误码的方式,DLL函数需要提供错误处理机制,以便在出现问题时,主程序能获取到错误信息并作出相应处理。 5. **多线程安全** 通达信可能在多线程环境中调用DLL函数,因此,开发者需要确保...
DLL(Dynamic Link Library)函数查看器是一款用于帮助程序员和系统管理员深入理解DLL文件内部功能的工具。DLL文件是Windows操作系统中的一个重要组成部分,它包含了可被多个程序共享的代码和数据,以此实现资源的...
本篇将详细介绍如何在VB中创建一个导出函数的DLL,并讨论如何在其他应用程序中链接和调用这些函数。 首先,我们需要了解DLL的基本概念。DLL是一种包含可由多个程序同时使用的函数和其他资源的库。它们允许代码和...
《VB Make DLL Link:创建可输出函数的DLL工具详解》 在编程领域,动态链接库(DLL)是一种共享代码的方式,它可以被多个程序同时使用,从而节省内存并提高执行效率。VB Make DLL Link是一款专为Visual Basic(VB)...
在Windows操作系统中,DLL(Dynamic Link Library)是包含可由多个程序同时使用的代码和数据的库。DLL文件是C++编程中的一个重要组成部分,它允许开发者将功能模块化,提高代码重用性和系统效率。有时,我们需要查看...
在编程领域,动态库(Dynamic Link Library,DLL)是一种共享代码的方式,允许多个应用程序使用同一份存储在内存中的代码,从而节省系统资源。Delphi 是一个强大的 Object Pascal 开发环境,它支持创建 Windows 平台...
在Windows操作系统中,动态链接库(Dynamic Link Library,简称DLL)是一种共享代码的机制,它允许不同程序共享同一段内存中的代码,从而节省系统资源。当涉及到64位应用程序开发时,对DLL的管理与32位环境有所不同...
DLL(Dynamic Link Library)是Windows操作系统中的一个核心特性,它允许多个程序共享同一段代码和数据,从而节省内存并简化软件开发。回调函数是DLL中一个重要的编程概念,它允许DLL将控制权交还给调用者,使得调用...
DLL,即动态链接库(Dynamic Link Library),是Windows操作系统中的一种共享库机制,它包含了一系列可被多个程序同时调用的函数和资源。DLL文件的主要作用在于代码复用和节省系统资源,允许开发者将功能模块化,...
- **报告结果**:最终,函数会根据关闭情况输出相应的报告,包括成功消息或失败信息。 #### 三、函数应用场景分析 - **文件操作**:这部分可能包含了读取、写入文件的操作函数,例如读取配置文件、日志文件等,...
在IT行业中,动态链接库(Dynamic Link Library,简称DLL)是操作系统提供的一种机制,它允许程序在运行时加载和使用其他模块。在Unix和Linux系统中,这种功能由`dlopen`函数实现。本篇文章将深入探讨如何使用`...
在编程领域,动态链接库(Dynamic Link Library,简称 DLL)是一种可执行文件格式,它包含可供其他程序调用的函数和资源。DLL 文件允许多个应用程序共享同一代码库,从而节省内存并提高系统效率。VC++6.0 是 ...
当用户在VBA编辑器中开始输入函数名时,这些信息会被加载并显示为自动完成选项,提高了编程的效率和准确性。 要使用这些XLL文件,用户通常需要在VBA环境中进行以下步骤: 1. 打开Excel,进入VBA编辑器(按下Alt + ...