1

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>

前もって感謝します、

ジェリー

4

1 に答える 1

0

これは、Adobe が SDK 4.6 で修正したバグのようです。

追加情報として、上記の pasteOp.textScrap 行を次のように置き換えます。

pasteOp.textScrap = pasteOp.textScrap.clone() は以前は null ポインター例外をスローしていましたが、4.6 ではそれも機能するようになりました。

また、このバグは textarea / textinput が空の場合にのみ発生しました。すでにそこに何かがあれば、すべてが期待どおりに機能しました。

于 2012-08-24T19:53:51.340 に答える