Jump to content
  • Revista PROGRAMAR: Já está disponível a edição #60 da revista programar. Faz já o download aqui!

pmaster

[Resolvido] Detectar teclas

Recommended Posts

pmaster

Boa tarde pessoal

Eu tenho um problema, precisava de detectar o precionamento de 2 teclas pode ser em simultaeo ou não. Não tem a ver com combinações de teclas para atalhos.. É como se usa-se 2 backgoundworkers ou 2 delegants.. mas não sei sequer começar com isto.

É como se quisesse por 2 backgoundworkers ou 2 delegants á escuta de precionamento de teclas, pra que eu possa usar 2 teclas em simultaneo para 2 acções diferentes.

Obrigado ;)

Share this post


Link to post
Share on other sites
fLaSh_PT

Bem;

Deves ir por passos.. primeiro investigar como capturas a teclas, e só depois deves pensar em como implementar um mecanismo para o efeito..

Está a falar em "Workers" e "Delegates" que não tem nada a ver com capturar as teclas..

Para capturar as teclas tens de ter em conta algumas situações:

Se a aplicação está oculta, deves implementar um sistema por subclasses (API).

Caso esteja uma "Form" visível é mais fácil, podes capturar a partir do evento "Form KeyPress", no entanto a "Form" tem de estar visível e activa..

Compr.


Making the impossible possible and pwing the world on db at a time.

Share this post


Link to post
Share on other sites
pmaster

fLaSh_PT a captação das teclas precionadas já sei fazer até bem usando o key press ou Protected Overrides Function ProcessCmdKey

Agora sei executar um delegante ou um backgoundwoker. Mas dei a ideia de usar um destes pra poder usar 2 teclas em simultaneo para 2 acções distintas, mas se houver outra maneira melhor..

Mas foi explicito no meu problema ou está confuso ?

Obrigado ;)

Share this post


Link to post
Share on other sites
fLaSh_PT

Nesse caso então.. o ideal é utilizar um worker para cada acção..

O que pode fazer te confusão.. depende do que queres fazer..

Por exemplo, se pretendes apresentar informação WinForms.. aí terás de usar os delegates dentro dos threads..

Algo tipo isto:

    Private Delegate Sub UISetStatusBarText(ByVal s As String)
    Friend Sub SetStatusBarText(ByVal sText As String)
        If stMain.InvokeRequired Then
            stMain.Invoke(New UISetStatusBarText(AddressOf SetStatusBarText), sText)
        Else
            lblStatus.Text = sText
        End If
    End Sub

É um código que utilizei para actualizar o StatusBar dentro de um thread..

Que teria de chamar:

SetStatusBarText("qualquer coisa..")


Making the impossible possible and pwing the world on db at a time.

Share this post


Link to post
Share on other sites
pmaster

Agradeço desde já a tua ajuda ;)

Até aqui entedi, mas um exemplo: imagina que tens 2 textbox, e sempre que carregares na tecla + ele na textbox1 incrementa um valor ou o que for, e se carregares na tecla - ele na textbox2 descrementa. Agora se ficares com a tecla '+' selecionado ele fica sempre a aumentar seguidinho sem para até tirares o dedo.. Mas agora o problema é que se ficares com a tecla '+' e  '-' selecionado ao mesmo tempo, ele so incremeta na text correpondente cuja tecla foi pressionada primeiro.

Peço desculpa se não me estou a fazer entender

Share this post


Link to post
Share on other sites
pmaster

Ou existe alguma maneira diferente de fazer isto ?

Alguem me pode dar uma dica ?

Obrigado

Share this post


Link to post
Share on other sites
nokPT

Agradeço desde já a tua ajuda :thumbsup:

Até aqui entedi, mas um exemplo: imagina que tens 2 textbox, e sempre que carregares na tecla + ele na textbox1 incrementa um valor ou o que for, e se carregares na tecla - ele na textbox2 descrementa. Agora se ficares com a tecla '+' selecionado ele fica sempre a aumentar seguidinho sem para até tirares o dedo.. Mas agora o problema é que se ficares com a tecla '+' e  '-' selecionado ao mesmo tempo, ele so incremeta na text correpondente cuja tecla foi pressionada primeiro.

Peço desculpa se não me estou a fazer entender

Tenho a ideia que, neste tipo de teclas não é possível, experimenta no notepad, carregas no +, ele vai escrevendo + ao velocidade configurada no painel de controlo, quando carregares na tecla -, ele começa a escrever - e deixa de escrever +, depois tirares o dedo do + e voltares a carregar, no notepad volta a aparecer o +, mas para de escrever o -, se estiveres a carregar no +, e carregares no - e tirares o dedo do -, sem tirar o dedo do +, ele escreve +, - e para quando tirares o dedo do -.

É possível que consigas fazer o que pretendes, mas parece-me que terás que descer de nível, que não será possível em vb.net


Ricardo Timóteo

Share this post


Link to post
Share on other sites
pmaster

Penso que tens razão nokPT, para além do mais já pesquisei mil e uma coisas e não encontro nada além de combinação de teclas.

De qualquer maneira se por acaso conseguir deixo aqui a solução.

Muito obrigado nokPT ;)

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

×

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.