在Flex 4中修改PasteOperation的内容

时间:2012-08-23 19:43:06

标签: flex flex4

我需要在Flex 4应用程序中捕获和修改粘贴操作的内容。我正在侦听TextOperation.CHANGING事件,拉出PasteOperation,并设置其textScrap属性。一切似乎都在起作用,除了在修改textScrap之后,在粘贴中添加了换行符。我创建了一些示例代码来说明问题的最简单版本。我实际上并没有更改副本,我正在抓取现有的textScrap的textFlow,用它创建一个新的TextScrap,并在PasteOperation上设置它。我这样做是为了排除TextFlow创建问题:

<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" 
           xmlns:s="library://ns.adobe.com/flex/spark" 
           xmlns:mx="library://ns.adobe.com/flex/mx" minWidth="955" minHeight="600">
<fx:Declarations>
    <!-- Place non-visual elements (e.g., services, value objects) here -->
</fx:Declarations>

<fx:Script>
    <![CDATA[
        import flash.desktop.Clipboard;
        import flash.desktop.ClipboardFormats;

        import flashx.textLayout.edit.TextScrap;
        import flashx.textLayout.elements.TextFlow;
        import flashx.textLayout.operations.PasteOperation;
        import flashx.textLayout.tlf_internal;

        import spark.events.TextOperationEvent;

        use namespace tlf_internal;

        protected function textArea_changingHandler(event:TextOperationEvent):void
        {
            if (event.operation is PasteOperation)
            {
                var pasteOp:PasteOperation = event.operation as PasteOperation;

                pasteOp.textScrap = new TextScrap(pasteOp.textScrap.textFlow);
            }
        }

    ]]>
</fx:Script>
<s:TextArea id="textArea" changing="textArea_changingHandler(event)"/>
</s:Application>

提前致谢,

格里

1 个答案:

答案 0 :(得分:0)

这似乎是Adobe在sdk 4.6中修复的错误。

作为一些附加信息,将上面的pasteOp.textScrap行替换为:

pasteOp.textScrap = pasteOp.textScrap.clone()用于抛出空指针异常,而4.6现在也可以。

此外,只有当textarea / textinput为空时才会出现此错误。如果那里已有东西,一切都按预期工作。