何年も経った後、私は自分自身の質問に出くわしました。
Flash での貼り付けは、ユーザー開始アクションの 1 つです。(を除く) がフォーカスされているときに、右クリックして組み込みのコンテキスト メニューから選択するか、コンビネーション (Windows の場合) をPaste
押して開始する必要があります。CTRL+V
InteractiveObject
TextField
これらの要件が満たされると、Event.PASTE
ディスパッチされ、リスナー内でメソッドにアクセスできますClipboard.getData()
。
1つだけ残っており、解決策を求めてここに私を連れてきましたPaste
.クリップボードに何もないときに、カスタムコンテキストメニューでボタンを無効にする方法は? 唯一の解決策があるようです - を定期的にチェックすることClipboard.generalClipboard.formats.length
です。
package simpletests
{
import flash.display.Sprite;
import flash.display.Stage;
import flash.events.Event;
import flash.events.FocusEvent;
import flash.events.TimerEvent;
import flash.events.MouseEvent;
import flash.ui.ContextMenu;
import flash.ui.ContextMenuItem;
import flash.desktop.Clipboard;
import flash.desktop.ClipboardFormats;
import flash.utils.Timer;
public class PasteTest extends Sprite
{
private var cont:ContextMenu;
public function PasteTest()
{
cont = new ContextMenu ();
cont.hideBuiltInItems ();
cont.clipboardMenu = true;
var timer:Timer = new Timer ( 100 );
this.contextMenu = cont;
stage.focus = stage;
timer.start ();
timer.addEventListener ( TimerEvent.TIMER, onTimer );
stage.addEventListener ( FocusEvent.FOCUS_OUT, onFocusOut );
stage.addEventListener (Event.PASTE, onPaste );
}
private function onTimer ( e:TimerEvent ):void
{
cont.clipboardItems.paste = Clipboard.generalClipboard.formats.length;
}
private function onPaste ( e:Event ):void
{
trace ( Clipboard.generalClipboard.getData(ClipboardFormats.TEXT_FORMAT) );
}
private function onFocusOut ( e:FocusEvent ):void
{
stage.focus = stage;
}
}
}
テスト目的でクリップボードをクリアしたい場合は、次のようなコマンドを実行するなど、間違った解決策を見つける可能性があります%windir%\System32\cmd /c "echo off | clip"
。空の文字列をクリップボードに入れ、コンテキスト メニューの [貼り付け] オプションを無効にしません。代わりに (Windows では) ファイルをカット アンド ペーストします。Paste
これにより、コンテキスト メニューのオプションがグレー表示されます。