• advertisement_alt
  • advertisement_alt
  • advertisement_alt
Janio Aguiar

[RESOLVIDO] Tecla de Função (F2) em Botao

10 posts in this topic

Bom dia,

Em um formulário preciso atribuir o mesmo atalho (F2) como atalho para diferentes botões.

Exemplo:
- Estando no EDT do codigo do cliente, F2 servir como atalho para o botão PROCURA CLIENTE

- Estando no EDT do codigo do vendedor, F2 servir como atalho para o botão PROCURA VENDEDOR

Tem como?

1 person likes this

Share this post


Link to post
Share on other sites

Janio

Você pode capturar a tecla pressionada e na janela verificar qual o objeto que está com o foco.

Neste caso no INITIALIZING do projeto você coloca:

// Carrega os arquivos das constantes do WinDev
EXTERN "KeyConst.WL"
EXTERN "WinConst.WL"

// Verifica o pressionamento de uma tecla
Event("TeclaPressionada", "*.*", WM_KEYDOWN)
 

E depois cria uma procedure mais ou menos assim:

PROCEDURE TeclaPressionada()

// Verifica se a tecla F2 foi pressionada e se a janela está ativa

IF KeyPressed(VK_F2) AND WinStatus(WIN_xxxx) = Active THEN

    // Verifica qual objeto está com o foco

    ...
    Seu código

    ...
END

4 people like this

Share this post


Link to post
Share on other sites

Boa tarde, Rinaldo!

Entendi, mas no meu caso os controles estarão na mesma janela, entendeu? Na mesma janela haverá 2 botoes. Um busca cliente, o outro busca vendedores. Mas os 2 botões com a mesma tecla de atalho (F2)

Eu acho que preciso saber qual controle o foco está. Quando foco estiver no edt de cliente, f2 direciona pro botao de procura cliente. Quando o foco estiver no edt do vendedor, f2 direciona pro botao de procura vendedor.

Share this post


Link to post
Share on other sites

Como vc faria pra saber qual controle estava focado?

 

Como não sei isso, uma alternativa (mais escreve mais) seria a seguinte:

1. Cria uma variável global na Window, por exemplo, gw_sControleAtivo, e ai no Code do controle vc coloca no Entry pra preencher esta variável tipo:

gw_sControleAtivo = "EDT_Cliente"

 

e no Exit do Controle vc limpa a variável

gw_sControleAtivo = ""

 

ai no código q o @Rinaldo Xavier passou vc verifica a variável

IF    KeyPressed(VK_F2) _AND_ (WinStatus(WIN_menu) = Active) THEN
    SWITCH gw_sControleAtivo
        CASE "EDT_Produto": Info("Seek Produto")
        CASE "EDT_Cliente": Info("Seek Cliente")
        OTHER CASE
            Info("Outros")
    END
END

Agora se tiver uma função pra saber qual controle estava focado, fica bem mais pratico.

Share this post


Link to post
Share on other sites

Acho que dá para saber o foco assim:

IF {_EVE.name, indControl}..Name = "EDT_xxx" THEN

1 person likes this

Share this post


Link to post
Share on other sites

Top @Rinaldo Xavier

O tópico não fui eu q criei, mas aprendo muito, testei aki e funciona

sControleqDisparouEvento is string = _EVE.name

 

Share this post


Link to post
Share on other sites

Boa tarde,

Obrigado pelo retorno, pessoal!

Na verdade a solução é mais simples que eu podia imaginar:

- Eh so colocar no evento "KEY DOWN" do EDT o teste da tecla pressionada, e se for F2 desviar para o botao correspondente

No evento KEY DOWN do Edt_CodigoCliente

IF KeyPressed(VK_F2) THEN
    ExecuteProcess(BTN_ProcuraCliente,trtClick)
END

No evento KEY DOWN do Edt_CodigoVendedor

IF KeyPressed(VK_F2) THEN
    ExecuteProcess(BTN_ProcuraVendedor,trtClick)
END

 

2 people like this

Share this post


Link to post
Share on other sites

Eu faria algo bem mais simples, quando o EDT ganhar o Foco, você colaca no Caption do botão de consulta "CONS PRODUTOS" e quando o EDT do Cliente ganhar o foco você colocar no Caption "Cons Clientes". Então no botão de consulta você verifica se estiver escrito Clientes ou Produtos.

A vantagem dessa técnica é que no caption você prepara o seu usuário para ir exatamente ao que estiver indicado no botão.

 

[]´s

 

2 people like this

Share this post


Link to post
Share on other sites

Boa noite, aproveitando o tópico, não consigo usar as tecla F? no code(key pressed) de uma table

IF KeyPressed(Asc(CR)) THEN

	ExecuteProcess(BTN_selecionar,trtClick)   // funciona

END



IF KeyPressed(VK_SPACE) = True THEN

	Info("SPACE")   // funciona	

END



IF KeyPressed(VK_F6) = True THEN

	Info("F6")	   // não funciona

END



IF KeyPressed(VK_F7) = True THEN

	Info("F7")	   // não funciona

END



no inicio do sistema já coloquei essas duas linhas

EXTERN "KeyConst.WL"
EXTERN "WinConst.WL"
 

Algum colega teria alguma dica, obg

 

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!


Register a new account

Sign in

Already have an account? Sign in here.


Sign In Now