Pessoal, desculpem nao ter dado um retorno, as coisas andam corridas
por aqui, mas ca estou pra lhes falar...
Consegui fazer o que queria, queria postar aqui o codigo, alterei
poucas coisas nos arquivos que o Beck mandou... Se ele me permitir eu
divulgo no meu blog, dando os devidos creditos claro...
Creio que tenha ficado bastante customizavel, intuitivo e bem usual!
Entao vou postar aqui como fica o uso!
Eu passo a tecla e o botao q tera o click executado quando a devida
tecla for pressionada: Isso é tudo que será necessário, porém para
cada botao!
<cp:ShortKey key="{Keyboard.ENTER}" button="{btnLogar}"/>
E esse eh o codigo da ShortKey: A maior parte dele feito pelo Beck:
package components
{
import flash.events.KeyboardEvent;
import flash.events.MouseEvent;
import mx.controls.Button;
import mx.core.IMXMLObject;
public class ShortKey implements IMXMLObject
{
[Bindable]
public var key:uint;
[Bindable]
public var button:Button;
[Bindable]
public var shiftKey:Boolean = false;
[Bindable]
public var ctrlKey:Boolean = false;
private var document:Object;
public function initialized(document:Object, id:String):void
{
this.document = document;
document.addEventListener(KeyboardEvent.KEY_DOWN,
keyDownHandler);
}
private function keyDownHandler(event:KeyboardEvent):void
{
var checkShiftKey:Boolean = !(Number(event.shiftKey) ^
Number(shiftKey));
var checkCtrlKey:Boolean = !(Number(event.ctrlKey) ^
Number(ctrlKey));
if ((checkShiftKey && checkCtrlKey) && event.keyCode ==
key)
{
button.dispatchEvent(new
MouseEvent(MouseEvent.CLICK))
}
}
}
}
E ai, o que vcs acham? Sera que eh interessante pra comunidade, vcs
tem algo a acrescentar?
Abraço!
Marcus Sá
http://www.maxup.com.br
http://www.maxup.com.br/blog
On 10 abr, 15:32, Beck Novaes <[EMAIL PROTECTED]> wrote:
> Ah... eu removi o SWF da pasta bin-debug para ficar mais leve,
> portanto, não esqueca de compilar antes de tentar rodar no Flex
> Builder (você pode apenas abrir um dos arquivos e salvar novamente
> antes de rodar).
>
> []'s
> Beck Novaes
>
> On Apr 10, 2:29 pm, Beck Novaes <[EMAIL PROTECTED]> wrote:
>
> > Como isto parece ser algo que muita gente pode precisar, acho que este
> > componente pode ser um bom ponto de partida para uma boa solução para
> > o problema:http://groups.google.com/group/flexdev/web/ShortKey.zip
>
> > A idéia é poder usar algo mais ou menos assim:
>
> > <local:ShortKey key="{Keyboard.HOME}" ctrlKey="true"
> > handler="{endHandler}" args="{['Ctrl + Home', 'arg2']}"/>
>
> > O componente tem suporte para a tecla CTRL e Shift em combinação com
> > as demais teclas. Eu achei esta a parte mais legal de implementação,
> > visto que pela primeira vez no Flex eu pude usar o Bitwise XOR.
>
> > var checkShiftKey:Boolean = !(Number(event.shiftKey) ^
> > Number(shiftKey));
>
> > Ainda está bem simples e talvez precise de alguma refatoração, mas
> > como eu disse pode ser um bom ponto de partida.
>
> > O .zip é um projeto Flex que você pode importar e ver funcionando.
>
> > []'s
> > Beck Novaes
>
> > On Apr 10, 12:35 pm, Sá <[EMAIL PROTECTED]> wrote:
>
> > > Daniel, obrigado pela resposta, o dispatchEvent funcionou
> > > direitinho...
>
> > > Só não entendi direito ainda essa parte que voce mencionou sobre
> > > colocar o event listener no container...
>
> > > Tipo, pra cada Title Window por exemplo, digamos que eu tenho 2 botoes
> > > com shortKey, eu teria que fazer 2 ouvintes em cada TitleWindow?
>
> > > Muito obrigado pela ajuda! Abraço!
>
> > > On 10 abr, 12:51, Daniel Lopes <[EMAIL PROTECTED]> wrote:
>
> > > > Coloca o event listener no container de seus botoes e faz um case para
> > > > ver qual tecla foi apertada.
> > > > Para dispara o evento do botão use dispatch, tipo assim:
>
> > > > b1.dispatchEvent(new MouseEvent(MouseEvent.CLICK));
>
> > > > On 10 abr, 10:44, Sá <[EMAIL PROTECTED]> wrote:
>
> > > > > Só mais uma coisa!
>
> > > > > Vejam com eu fiz,,,
> > > > > Coloquei:
> > > > > addEventListener(KeyboardEvent.KEY_DOWN, this.mubtn.interceptKey
>
> > > > > Onde mubtn é o meu botão...
>
> > > > > E interceptKey é:
> > > > > public function interceptKey(
> > > > > event:flash.events.KeyboardEvent ) :
> > > > > void{
> > > > > if (event.keyCode==_key){
> > > > > Alert.show("Apertou!")
> > > > > }
> > > > > }
>
> > > > > As dúvidas agora, pra cada botão com tecla deatalhoeu vou ter que
> > > > > colocar um addEventListener?
> > > > > E ali, onde tem Alert.show("Apertou!") eu quero que execute o clique
> > > > > do botão... Como faço isso?
>
> > > > > Valeu pessoal! Abraço!
>
> > > > > On 10 abr, 10:23, Sá <[EMAIL PROTECTED]> wrote:
>
> > > > > > Pessoal, muito obrigado a todos pela ajuda...
> > > > > > Daniel, muito obrigado pelo exemplo que você postou, vai se tornar
> > > > > > uma
> > > > > > boa referencia mais a frente...
> > > > > > Beck, meu problema era exatamente este que você mencionou! Muito
> > > > > > Obrigado...
> > > > > > Luís, eu preciso basicamente do ESC e do ENTER, mais a frentre quem
> > > > > > sabe eu precisse de outras teclas... Obrigado também!
>
> > > > > > On 10 abr, 08:22, Luis Eduardo - Suprasis Softwares
>
> > > > > > <[EMAIL PROTECTED]> wrote:
> > > > > > > Só lembrando que determinadas teclas e/ou conjunto de teclas
> > > > > > > não
> > > > > > > estão disponíveis para o FlashPlayer, logo não são utilizáveis
> > > > > > > (como em
> > > > > > > um programa Delphi seriam ou provavelmente em um AIR também).
> > > > > > > Um exemplo é a tecla F5, ALT+F4, CTRL+W. Mas existem umas
> > > > > > > tantas
> > > > > > > outras... e se não me engano (uns 90% de certeza, se é que
> > > > > > > certeza
> > > > > > > existe em 90%) isso varia de browser pra browser, mesmo o Flex
> > > > > > > tentando
> > > > > > > esconder essa briga entre browsers pra gente.
>
> > > > > > > Então a dica é: antes de escolher as teclas, dê uma testada
> > > > > > > se ela
> > > > > > > está disponível nos navegadores de seus clientes.
>
> > > > > > > Ah! detalhe sórdido... as teclas disponíveis dependem
> > > > > > > também dos
> > > > > > > sistemas instalados no computador do usuário. Se um google
> > > > > > > toolbar, por
> > > > > > > exemplo, estiver instalado, uma combinação de tecla que não me
> > > > > > > lembro
> > > > > > > qual, fica pra ele e o FlashPlayer não a enxerga mais. Sei lá
> > > > > > > quais
> > > > > > > teclas o Yahoo toolbar ou o Mininova toolbar usam.
>
> > > > > > > Isso o marketing da Adobe não fala pra gente.... enfim...
>
> > > > > > > Queria dar notícias mais alegres :)
>
> > > > > > > abraços,
> > > > > > > Luís Eduardo
>
> > > > > > > Daniel Lopes escreveu:
>
> > > > > > > > Obrigado Beck, não tinha me atentado para isso... realmente
> > > > > > > > acho que o
> > > > > > > > problema dele vai ser resolvido colocando os listeners no
> > > > > > > > container
> > > > > > > > onde está o componente.
> > > > > > > > Bem de qualquer forma fica ai o exemplo se alguem procurar por
> > > > > > > > isso no
> > > > > > > > grupo.
>
> > > > > > > > Abraço.
>
> > > > > > > > On 9 abr, 23:51, Beck Novaes <[EMAIL PROTECTED]> wrote:
>
> > > > > > > >> Hm... acho que o problema do nosso amigo é outro. Pelo que eu
> > > > > > > >> pude
> > > > > > > >> entender ele já esta familiarizado com a API necessária para
> > > > > > > >> capturar
> > > > > > > >> os eventos do teclado. Suponho que o componente que ele
> > > > > > > >> estendeu não
> > > > > > > >> esteja funcionando porque ele adicionou o Listener para o
> > > > > > > >> botão, assim
> > > > > > > >> o evento do teclado só será capturado se o botão tiver o foco.
> > > > > > > >> Da
> > > > > > > >> mesma forma, no seu exemplo o evento só será capturado se o
> > > > > > > >> textInput
> > > > > > > >> tiver o foco. Tanto o seu exemplo quanto o dele poderiam ser
> > > > > > > >> independentes do componente que tivesse o foco se o Handler
> > > > > > > >> estivesse
> > > > > > > >> tratando um evento do Application no lugar de um componente
> > > > > > > >> específico. No seu exemplo basta remover o substituir
> > > > > > > >> "tf.addEventListener(KeyboardEvent.KEY_DOWN,reportKeyDown)" por
> > > > > > > >> "addEventListener(KeyboardEvent.KEY_DOWN,reportKeyDown)" ou
> > > > > > > >> seja, sem
> > > > > > > >> a referência para o textInput. No caso dele, talvez ele tenha
> > > > > > > >> que
> > > > > > > >> adicionar o listener para o Application.
>
> > > > > > > >> mx.core.Application.application.addEventListener(KeyboardEvent.KEY_DOWN,
> > > > > > > >> myHandler);
>
> > > > > > > >> Será que é isso, Sá, que você precisa?
>
> > > > > > > >> []'s
> > > > > > > >> Beck Novaes
>
> > > > > > > >> On 9 abr, 23:15, Daniel Lopes <[EMAIL PROTECTED]> wrote:
>
> > > > > > > >>> Ai está o exemplo que prometi... é só dar uma olhada na classe
> > > > > > > >>> flash.ui.Keyboard . Cada tecla tem uma constante e vc pode
> > > > > > > >>> usar isso
> > > > > > > >>> como shortcut, no exemplo se vc aperta SHIFT ele muda a cor do
> > > > > > > >>> componente e se apertar ctrl muda de cor de novo.
>
> > > > > > > >>> <?xml version="1.0" encoding="utf-8"?>
> > > > > > > >>> <mx:Application
> > > > > > > >>> xmlns:mx="http://www.adobe.com/2006/mxml"
> > > > > > > >>> layout="absolute"
> > > > > > > >>> creationComplete="initApp()">
>
> > > > > > > >>> <mx:Script>
> > > > > > > >>> <![CDATA[
> > > > > > > >>> import flash.ui.Keyboard;
>
> > > > > > > >>> public function initApp():void{
> > > > > > > >>>
> > > > > > > >>> tf.addEventListener(KeyboardEvent.KEY_DOWN,reportKeyDown);
> > > > > > > >>> }
>
> > > > > > > >>> public function
> > > > > > > >>> reportKeyDown(event:KeyboardEvent):void
> > > > > > > >>> {
> > > > > > > >>> trace("Tecla apertada: " +
> > > > > > > >>> String.fromCharCode(event.charCode) +
> > > > > > > >>> "(codigo:" + event.keyCode + " character code: " +
> > > > > > > >>> event.charCode +
> > > > > > > >>> ")");
> > > > > > > >>> if (event.keyCode == Keyboard.CONTROL)
> > > > > > > >>>
> > > > > > > >>> tf.setStyle('backgroundColor',0xFFFF00);
> > > > > > > >>> else if (event.keyCode == Keyboard.SHIFT)
> > > > > > > >>>
> > > > > > > >>> tf.setStyle('backgroundColor',0xFF0000);
> > > > > > > >>> }
>
> > > > > > > >>> ]]>
> > > > > > > >>> </mx:Script>
>
> > > > > > > >>> <mx:TextInput id="tf" />
>
> > > > > > > >>> </mx:Application>
>
> > > > > > > >>> On 9 abr, 21:55, Daniel Lopes <[EMAIL PROTECTED]> wrote:
>
> > > > > > > >>>> cara... tem um tanto de coisa nesse código que não precisa e
> > > > > > > >>>> mudou
> > > > > > > >>>> para o Flex 3...
> > > > > > > >>>> Vou fazer um exemplo e posto aqui daqui a pouco
>
> > > > > > > >>>> On 9 abr, 19:49, Sá <[EMAIL PROTECTED]> wrote:
>
> > > > > > > >>>>> Pessoal, meu cliente pediu para que ao clicar certas teclas
> > > > > > > >>>>> executar o
> > > > > > > >>>>> click de determinados botões...
> > > > > > > >>>>> Eu trabalho full-time com Flex e ActionScript há menos de
> > > > > > > >>>>> 10 dias, e
> > > > > > > >>>>> sou auto-didata, ou seja, pouca experiência e sem nenhum
> > > > > > > >>>>> curso sobre o
> > > > > > > >>>>> assunto...
>
> > > > > > > >>>>> Mas até que a coisa tá indo...
>
> > > > > > > >>>>> Então, resolvi criar um classe estendendo o Button, criar
> > > > > > > >>>>> um set
> > > > > > > >>>>> shortKey nessa classe, adicionar um addEventListener do
> > > > > > > >>>>> KeyDown e
> > > > > > > >>>>> intercepta-lo executando o click do botão caso o cidadão
> > > > > > > >>>>> tenha
> > > > > > > >>>>> pressionado a tecla informada na propriedade shortKey...
> > > > > > > >>>>> Mas acontece
> > > > > > > >>>>> que o KeyDown não é interceptado...
>
> > > > > > > >>>>> Eu queria saber se já existe a implementação de algo desse
> > > > > > > >>>>> tipo, botão
> > > > > > > >>>>> com tecla deatalho, e se não houver, alguem se dispõe a me
> > > > > > > >>>>> ajudar a
> > > > > > > >>>>> fazer isso? Pelo menos digam ai se eu estou no caminho
> > > > > > > >>>>> certo, com o
> > > > > > > >>>>> raciocino e lógica certa...
>
> > > > > > > >>>>> Pretendo disponibilizar esse controle
>
> ...
>
> mais »
--~--~---------~--~----~------------~-------~--~----~
Você recebeu esta mensagem porque está inscrito na lista "flexdev"
Para enviar uma mensagem, envie um e-mail para [email protected]
Para sair da lista, envie um email em branco para [EMAIL PROTECTED]
Mais opções estão disponíveis em http://groups.google.com/group/flexdev
-~----------~----~----~----~------~----~------~--~---