Janio Aguiar

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

9 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

Exato @Cassiano, era o que eu ia sugerir. Mas acredito que tenha uma forma de saber qual controle está com o foco.

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

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