Есть ли способ разрешить вставку из буфера обмена с помощью Shift-Insert поверх CTRL-V?

Я знаю, что вы можете использовать контекстное меню, щелкнув правой кнопкой мыши в элементе управления, чтобы выбрать вырезание, копирование, вставку и т. д. Я также заметил, что вы можете использовать сочетания клавиш Windows CTRL-C для копирования и CTRL -V для вставки.

Windows поддерживает встроенную CTRL-Insert (для копирования) и SHIFT-Insert (для вставки).

Однако во Flex это, похоже, не работает. Кто-нибудь смог разрешить эти события клавиатуры? Любые решения приветствуются.


person bugsmash    schedule 11.02.2010    source источник
comment
О каком контексте вы говорите? Они должны работать в текстовой области или текстовом вводе, но это все.   -  person Samuel Neff    schedule 11.02.2010
comment
Что ж, CTRL-C и CTRL-V работают в текстовой области или при вводе, но CTRL-Insert и SHIFT-Insert не работают. Они выполняют примерно одну и ту же функцию. Я думаю, что 99% населения использует CTRL-C и CTRL-V. Я в меньшинстве. Но вы должны заметить, что CTRL-Insert и SHIFT-Insert работают почти во всех других приложениях Windows.   -  person bugsmash    schedule 15.02.2010
comment
Это проблема регрессии во Flex, она работает на старых элементах управления, а не на искровых элементах управления. Ошибка зарегистрирована. bugbase.adobe.com/index.cfm?event=bug&id=2928015 Если вы считаете, что это нужно исправить, проголосуйте за это.   -  person florian f    schedule 07.02.2013


Ответы (2)


Класс буфера обмена доступен, начиная с версии Flash Player 10.

person JabbyPanda    schedule 18.08.2010

Примечание. Операционная система и веб-браузер будут обрабатывать события клавиатуры до Adobe Flash Player или AIR. Например, в Microsoft Internet Explorer нажатие Ctrl+W закрывает окно браузера до того, как какой-либо из содержащихся в нем SWF-файлов отправит событие клавиатуры.

Вы можете просто сделать что-то похожее на это

<?xml version="1.0" encoding="utf-8"?>

<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"
 layout="absolute" creationComplete="init()">

 <mx:Script>

 <![CDATA[

    private function init():void{

     this.addEventListener(MouseEvent.CLICK, clickHandler);

     this.addEventListener(KeyboardEvent.KEY_DOWN,keyPressed);

    }

    private function clickHandler(event:MouseEvent):void {

      stage.focus = this;

    }

    private function keyPressed(evt:KeyboardEvent):void{

       if(evt.ctrlKey && evt.keyCode == 65)

             trace("CTRL A is pressed");

       if(evt.ctrlKey && evt.keyCode == 66)

             trace("CTRL B is pressed");

   }

 ]]>

 </mx:Script>

</mx:Application>

Затем для записи в буфер обмена операционной системы:

import flash.desktop.ClipboardFormats;

 var copy:String = "A string to copy to the system clipboard.";
 Clipboard.generalClipboard.clear();
 Clipboard.generalClipboard.setData(ClipboardFormats.TEXT_FORMAT, copy);

Для чтения из буфера обмена операционной системы:

import flash.desktop.ClipboardFormats;

 var pasteData:String  = Clipboard.generalClipboard.getData(ClipboardFormats.TEXT_FORMAT) as String;
person Todd Moses    schedule 11.02.2010
comment
Я использую Flex Builder 3 и не вижу, где можно импортировать flash.desktop. Я нашел только следующее, но оно позволяет вставлять только в буфер обмена Windows. Я на самом деле не проверял это, но я все еще пытаюсь найти способ вставить в TextInput. Я уже написал код KeyboardEvent для захвата события Shift-Insert. Я просто не знаю, как получить доступ к системному буферу обмена. Может быть, мне как-то не хватает flash.desktop.*. импортировать flash.system.System; System.setClipboard(строка); - person bugsmash; 12.02.2010
comment
Это только в AIR. adobe.com/livedocs/flash/9.0/ActionScriptLangRefV3/ вспышка/ - person Todd Moses; 12.02.2010