1. Este site usa cookies. Ao continuar a usar este site está a concordar com o nosso uso de cookies. Saber Mais.

Visual Basic 6 - Tecla ENTER

Discussão em 'Programação' iniciada por andremf, 1 de Julho de 2008. (Respostas: 12; Visualizações: 5669)

  1. Tenho um programa que a certo momento preciso de carregar na tecla ENTER para ele continuar. Como posso detectar no form_load que carrego na tecla ENTER?

    Agradeço sugestões.

    Obrigado.
     
  2. Kayvlim

    Kayvlim Undefined Moderator
    Staff Member

    Como assim?! No Form_Load?
    Não quererás uma MsgBox ou coisa do género?
     
  3. É assim: eu tenho uma sequência de comandos no Form_load, mas a certo momento para esta sequência de comandos continuar preciso de carregar na tecla ENTER porque o programa pára ali. Imagina que tenho:

    Código:
    Private Sub Form_load()
     
    Text1.text = "Bom Dia"
    Text1.text = "Olá"
     
    'Agora aqui quero carregar na tecla ENTER para continuar
     
    Text1.text = "Boa noite"
     
    End Sub

    Isto é só um exemplo por analogia parecido ao que eu quero.

    Ja tentei por:

    Código:
    While ( Keycode <> vbKeyReturn)
    Wend
    Mas não me funciona.


    Ajudem-me.

    Obrigado.
     
    Última edição pelo moderador: 2 de Julho de 2008
  4. Kayvlim

    Kayvlim Undefined Moderator
    Staff Member

    Se está no Form_Load, então o evento KeyPress não vai disparar porque o Form ainda não apareceu!
    Eu estou a ver uma forma de fazer isso, mas prefiro evitá-la para já.

    Não queres explicar o que realmente queres fazer, para ver se haverá alguma forma melhor de fazer as coisas? :)

    p.s.: Esse While...Wend vai-te bloquear o programa. Mete um DoEvents no meio ;)
     
  5. Acho que não sei mais como explicar....
    Tenho um programa que no Form_load tem uma sequência de execução do programa. A certo momento dessa sequência para o programa continuar tenho que carregar em ENTER. O que quero é detectar que carrego em ENTER para ele continuar.
    Por isso é que pus aquele While...Wend para o programa parar e esperar pelo meu ENTER. Ou seja, quando carrega-se em ENTER saia do ciclo While...wend, mas realmente o que me está a acontecer é a bloquear o programa.

    Espero ter sido mais claro.

    Falas-te em por DoEvents, mas assim?:

    While ( Keycode <> vbKeyReturn)
    DoEvents
    Wend
     
  6. Kayvlim

    Kayvlim Undefined Moderator
    Staff Member

    Em relação ao DoEvents, sim, era isso.

    Em relação ao resto do post, o que eu queria saber era o que é que te leva a quereres fazer isso.

    A minha solução passa pela API, mas o ENTER vai ser enviado para um programa qualquer. Isto é, depois de executares o programa, se fores ao Notepad escrever um texto, assim que fizeres Enter o programa passa à frente.
    Take a look:

    Código:
    Private Declare Function GetAsyncKeyState Lib "user32" (ByVal vKey As Long) As Integer
    
    Private Const VK_RETURN = &HD
    Private Const KEY_PRESSED = -32768
    
    Private Sub Form_Load()
    
        MsgBox "Início do Form_Load"
        While Not GetAsyncKeyState(VK_RETURN) = KEY_PRESSED: DoEvents: Wend
        MsgBox "Fim do Form_Load"
        
    End Sub
    
    p.s.: não podes sair da primeira Msgbox com o Enter, senão passa logo para a segunda :P
     
  7. Não sei se entendi muito bem.

    Estás a querer dizer que se tiver o programa e o notepad abertos ao mesmo tempo e eu carregar em ENTER no notepad vai actuar no programa?


    Tu disses-te:
    "não podes sair da primeira Msgbox com o Enter, senão passa logo para a segunda"

    Mas então não é isso que eu quero? Seguir com o programa (neste caso para a 2ª Msgbox) com um ENTER?

    Voltei a não entender8|
     
  8. Kayvlim

    Kayvlim Undefined Moderator
    Staff Member

    Sim. Se ligares o programa e o notepad, e carregares no ENTER no notepad, o ENTER vai actuar no notepad (muda de linha), mas o programa vai saber que carregaste e reage também :P

    Vou reformular o que eu disse:
    Inicialmente aparece-te uma msgbox. Depois de carregares (com o rato, por exemplo) no OK, o programa fica parado, e só quando carregares no ENTER é que te aparece a segunda msgbox. No entanto, se carregares no ENTER logo na primeira msgbox para carregares no "OK", o programa não pára; segue logo para a segunda msgbox. Já percebeste?

    Experimenta ligar o programa e carregar no ENTER na primeira msgbox, e depois reinicia o programa e carrega com o rato no OK dela. Assim, vais perceber o que estou a dizer.
     
  9. pjmvc

    pjmvc Power Member

    Antes de mais tens que activar o KeyPreview na form.

    A solução que apresento funciona no Activate e não no Load, espero que ajude:

    Código:
    Dim TeclaEnter% 'variavel para tecla enter
     
    Private Sub Form_Activate()
    While TeclaEnter% = 0 'ciclo enquanto tecla enter não foi primida
    DoEvents 'permitir eventos
    Wend
    Debug.Print "Tecla Enter primida"
    End Sub
     
    Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer) 'evento de tecla pressionada
    If KeyCode% = 13 Then TeclaEnter% = 1 'tecla enter foi pressionada
    End Sub
    Cumprimentos
     
    Última edição pelo moderador: 3 de Julho de 2008
  10. Kayvlim

    Kayvlim Undefined Moderator
    Staff Member

    Era tão, mas tão fácil se ele quisesse isso com o form à mostra :P
     
  11. pjmvc

    pjmvc Power Member

    Peço desculpa por não ter colocado o código dentro da respectiva janela, mas como foi a primeira vez, não sabia desse requesito. :Sad_anim:
    Espero não voltar a cometer o mesmo erro.

    Cumprimentos
     
  12. Fiquei com uma dúvida. (já não tem nada a ver com a tecla ENTER. Isso já consegui)

    Quando falaste em por um DOEvents dentro do while...wend, este DOEvents só é necessário quando não se tem comando nenhum ou também é necessário quando temos alguns comandos dentro do While...Wend?

    Obrigado!
     
  13. servic

    servic Power Member

    Esse DOEvents serve para o programa libertar temporariamente o cpu para outras tarefas do SO. Assim é altamente recomendado que em zonas do código puxadas, de vez em quando faças um dovents senão corres o risco de ficar com o SO preso, pendurado com essa aplicação. A idéia será libertar o cpu por um bocadinho, para o SO, para ele ver como estão as coisas.
    Outra boa prática será também trabalhar com o vbhourglass, a ampulheta se forma sensata, no inicio de um processamento pesado, tendo sempre o cuidado de por novamente em cursor normal no fim do processamento e quando dá erro. Não há nada mais piroso do que o programa rebentar e ter de clickar na msgbox do erro, com o rato com o cursor em ampulheta.
     

Partilhar esta Página