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

leinad

mover o rato

19 mensagens neste tópico

bom dia colegas,

Pretendo que quando a combo1 receber o focus, o rato se mova, por exemplo para cima...

obrigado,

abraço.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Podes utilizar a API SetCursorPos

Private Declare Function SetCursorPos Lib "user32" (ByVal x As Long, ByVal y As Long) As Long

alguma duvida ja sabes :)

cumps

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

ohh, sorry.....

eu expliquei-me mal, o que pretendo mesmo é por exemplo quando pressionar a tecla a, o rato se mova 50pixeis à esquerda, apartir do ponto onde se encontra,

quando pressionar a tecla d, o rato se mova 50pixeis à direita, apartir do ponto onde se encontra,

quando pressionar a tecla s, o rato se mova 50pixeis para baixo, apartir do ponto onde se encontra,

quando pressionar a tecla w, o rato se mova 50pixeis para cima, apartir do ponto onde se encontra...

desde já agradeço

abraço.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

explicaste-te bem e a resposta também foi bem dada, mas para quem percebe pouco se calhar foi insuficiente.

o que o  NuGuN te deu, foi a declaração da função da API do windows que te permite mover o cursor para a posião que queres. para moveres o rato, apenas tens de chamar a função SetCursorPos(x,y) quando achares necessario, fazendo os calculos para as coordenadas.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Sim, isso eu sei...

Escrevi este código na segunda-feira, só que ao precionares a tecla 4 o cursor move-se no eixo do x e do y (esquerda, cima), e quando pressiono a tecla 6 o cursor move-se no eixo do x e do y (direita, cima).

Não sei porquê... talvêz seja uma coisinha de nada, mas prós meus olhos aquilo está correcto....

Private Sub Form_KeyPress(KeyAscii As Integer)

If KeyAscii = vbKey8 Then

Yy = Yy - 50

  SetCursorPos Xx, Yy

 

ElseIf KeyAscii = vbKey6 Then

Xx = Xx + 50

  SetCursorPos Xx, Yy

                   

ElseIf KeyAscii = vbKey2 Then

Yy = Yy + 50

  SetCursorPos Xx, Yy

ElseIf KeyAscii = vbKey4 Then

Xx = Xx - 50

  SetCursorPos Xx, Yy

End If

End Sub

experimentem... e digam alguma coisa

abraço.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Penso que o teu erro foi não declarar as variaveis... Quando fazias istu -> yY = yY + 50 a variavel yY tomava o valor 50 mas como não esta declarada quando acaba a função o seu valor volta a zero...

Option Explicit

Private Declare Function SetCursorPos Lib "user32" (ByVal x As Long, ByVal y As Long) As Long

Dim xX As Single
Dim yY As Single

Private Sub Form_KeyPress(KeyAscii As Integer)

If KeyAscii = 119 Then
yY = yY - 50
  SetCursorPos xX, yY

ElseIf KeyAscii = 100 Then
xX = xX + 50
  SetCursorPos xX, yY
                     
ElseIf KeyAscii = 115 Then
yY = yY + 50
  SetCursorPos xX, yY

ElseIf KeyAscii = 97 Then
xX = xX - 50
  SetCursorPos xX, yY

End If
Me.Caption = KeyAscii
End Sub

Os valores 100, 115, 119 e 97 é o código ascii das teclas com a linha "Me.Caption = KeyAscii" podes ver os códigos das outras teclas excepto teclas de sistema e mais algumas :thumbsup:

cumps

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

desde já agradeço a colaboração...  :P

pois... Testei o o código que envias-te, tá escrito de outra forma, mas continua com o mesmo problema...

que é em vez de semover para a esquerda ou para a direita, move-se nas diagonais...

abraço.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

por acaso a umas horas a traz tive a cria um codigo perecido com este mas com a opçao de clicks e tudo, so tive um problema o programa nao funciona minimizado e para o meu objectivo tinha q dar, porque queria fazer uma espécie de rato no teclado para mexer no pc todo como um rato mesmo, por isso o programa estaria sempre minimizado

há solução?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Para essa questão do prograva minimizado podes sp meter a Form invisivel.. ou entao se quiseres algo mais elaborado podes meter um iconzinho no systray

cumps

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

ok...voutentar, ainda nao puder ver isso, mas vou ver ja digo qq coisa.

obrigado mais uma vez, tu em vb das-lhe bem, é bem é isso q é perciso. eu vb so vou ter po ano no 11º mas é a linguagem q mais gosto e é facil.

Mr_Jorge

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

ja tentei por a form invisivel e assim é q nao da mesmo...tens outra ideia?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
obrigado mais uma vez, tu em vb das-lhe bem, é bem é isso q é perciso. eu vb so vou ter po ano no 11º mas é a linguagem q mais gosto e é facil.

Se queres que te diga.. estou bastante desiludido com VB6, pensava de ser melhor. Estou agora a mudarme para C++ que me dá bastante mais geito  :)

Pá... eu esquecime como se esta a fazer issu das teclas não se pode perder o focus da form  :rant_01:

Eu só conheço 2 maneira de fazer issu.

Uma delas é com a API "GetAsyncKeyState"

Private Declare Function GetAsyncKeyState Lib "user32" Alias "GetAsyncKeyState" (ByVal vKey As Long) As Integer

A outra é fazendo um hook ao teclado. Este metodo é mais complicado mas da pra fazer.

Alguma duvida ja sabes :)

cumps

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

eu poracaso gosto de vb6, vbnet nao gosta nada, alem do programa ser kmuito pesado, tou muito bem no vb6

eu com programação nao é o que eu gosto mesmo, so faço uma coisas as vezes, coisas q me fazem falta, jeito ou por piada por isso o vb6 serve-me perfeitamente

a funçao vou esperimentar e digo depois alguma coisa...

cumps.

Mr_Jorge

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Private Sub Timer1_Timer()
Dim keyy As Integer
    Call GetAsyncKeyState(keyy)
    Label2.Caption = keyy
End Sub

por acaso esperimentei ja...meti o codigo assim como está em cima é me devolvido simplesmente 0 na label1....

Mr_Jorge

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

É normal ;)

Para trabalhares com essa API podes fazer istu

Crias um Timer e daslhe um intervalo de... uns 50 depois no timer metes :

If GetAsyncKeyState(&H57) Or GetAsyncKeyState(&H41) Or GetAsyncKeyState(&H44) Or GetAsyncKeyState(&H53) Then
    Me.Caption = "Sim"
    Else
        Me.Caption = "Não"
End If

E vais ver que quando carregares nas teclas W, A, S ou D mesmo que nao tenhas a form selecionada ela vai detectar que estas a carregar nestas teclas, agora.. apartir daki penso que ja te safas :P

cumps

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

fixe ja deu, mas existe alguma tabela com os endereços de todas as teclas?? é q eu queria usar outras, tipo as setas e outras...

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Para veres os valores das outras teclas pode fazer istu

Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)
Me.Caption = KeyCode
End Sub

O numero que te aparecer na barra da janela é o numero correspondente á tecla. Teclas do sistema penso que não funcionam com este metodo

cumps

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora