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

Jpab

Agora parame a camera ao carregar mt tempo na msma tecla!!!!

26 mensagens neste tópico

bem pessoal tou a fazer um programa em vb em que terei de conduzir um carro telecomandado lingando o comando atravez da porta paralela...

gostava de saber como posso agarrar tipo o evento da carregar na tecla  "-->" on na "<--" e ao agarrar esse envento enviar o sinal atravez da porta paralela..

Alguem pode ajudar? ;)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Boas...

Para "apanhares" essas teclas quando são pressionadas basta trabalhares com o evento keycode da form com que estas a trabalhar. Cada tecla dessas tem um keycode que podes utilizar junto com um ciclo if para verificares se é essa a tecla. Não sei esse ´código de cor, sei que pode ser 40, 39, 38 ou 37 (se não estou em erro). Para verificares podes colocar nesse evento a seguinte linha: me.caption = keycode

Depois carregas das setas e vê o numero que aparece na barra da form.

Caso tenhas botões ou outros objectos nessa form que não labels, então vais às propriedades da form e coloca a propriedade keypreview a true.

Depois para trabalhares com a porta paralela... agora não tenho tempo nem tenho aqui o tutorial, mas se quizeres, quando chegar a casa posso postar aqui o tutorial, ou então podes também ir ao google pois encontras bastante informação.

Cumps

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Boas...

Para "apanhares" essas teclas quando são pressionadas basta trabalhares com o evento keycode da form com que estas a trabalhar. Cada tecla dessas tem um keycode que podes utilizar junto com um ciclo if para verificares se é essa a tecla. Não sei esse ´código de cor, sei que pode ser 40, 39, 38 ou 37 (se não estou em erro). Para verificares podes colocar nesse evento a seguinte linha: me.caption = keycode

Depois carregas das setas e vê o numero que aparece na barra da form.

Caso tenhas botões ou outros objectos nessa form que não labels, então vais às propriedades da form e coloca a propriedade keypreview a true.

Depois para trabalhares com a porta paralela... agora não tenho tempo nem tenho aqui o tutorial, mas se quizeres, quando chegar a casa posso postar aqui o tutorial, ou então podes também ir ao google pois encontras bastante informação.

Cumps

ya ja encontrei alguma info no google mas se postasses o tutorial tambem era bacano porque info nunca é de mais...

thanks vou esprimentar isso do keydown

;)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Fica em anexo o PDF e o código fonte. Isso foi um mini tut que eu fiz para o forum, mas como não o encontro online, fica aí.

Cumps

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Fica em anexo o PDF e o código fonte. Isso foi um mini tut que eu fiz para o forum, mas como não o encontro online, fica aí.

Cumps

obridadão NuGuN ;)

vai me dar muito jeito xD

mas surguime uma nova duvida sobre o keydown

tipo eu quero apanhar o evento carregar na tecla para cima e para a direita ao mesmo tempo mas nao consigo ... usei este codigo

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

If Me.Caption = 39 And Me.Caption = 38 Then
Picture1.Picture = LoadPicture("C:\Documents and Settings\Utilizador\Ambiente de trabalho\PAT\Cam\J-Driver\cidi.gif")
End If

End Sub

deve ser pelo keycode nao poder ter 2 valores ao mesmo tempo...

que me aconselham a fazer? um array?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

faz um ciclo para cada tecla.

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

If Me.Caption = 39  Then
Picture1.Picture = LoadPicture("C:\Documents and Settings\Utilizador\Ambiente de trabalho\PAT\Cam\J-Driver\cidi.gif")
End If

If Me.Caption = 38  Then
......
End If

End Sub

cumps

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

faz um ciclo para cada tecla.

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

If Me.Caption = 39  Then
Picture1.Picture = LoadPicture("C:\Documents and Settings\Utilizador\Ambiente de trabalho\PAT\Cam\J-Driver\cidi.gif")
End If

If Me.Caption = 38  Then
......
End If

End Sub

cumps

nepia mano nao percebeste o que eu quero é apanhar as duas leclas percionadas ao mesmo tempo...

porque ao carregares na tecla ao para cima mostra a img ao para cima e ao carregares na tecla para a direita mostra img para a direita mas se tiverem as duas percionadas ao mesmo tempo mostra uma seta na diagonal... tas a perceber?

;)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

hhhmmm... Sendo assim isso do evento keydown não é a melhor forma de o fazer. Podes experimentar trabalhar com o evento keyup. Por exemplo, crias duas variáveis do tipo boolean. Quando a seta para cima é pressionada o evento keydown é chamado, aí, colocas uma das variáveis a true, e para a outra seta fazes o mesmo. Depois no evento keydown fazes então o tal if mas com as variáveis. E no evento keyup metes as variáveis a false.

Não sei se me fiz entender. Mas possívelmente isso não vai funcionar mt bem... Se não pressionares nas teclas muito rápido talvez funciona.

Cumps

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

hhhmmm... Sendo assim isso do evento keydown não é a melhor forma de o fazer. Podes experimentar trabalhar com o evento keyup. Por exemplo, crias duas variáveis do tipo boolean. Quando a seta para cima é pressionada o evento keydown é chamado, aí, colocas uma das variáveis a true, e para a outra seta fazes o mesmo. Depois no evento keydown fazes então o tal if mas com as variáveis. E no evento keyup metes as variáveis a false.

Não sei se me fiz entender. Mas possívelmente isso não vai funcionar mt bem... Se não pressionares nas teclas muito rápido talvez funciona.

Cumps

ya mano por acaso tambem tive a pensar ontem e lembreime do envento keyup eu percibi o que quizeste dizer vou esprimentar isso ainda hoje talvez para ver se funciona e dpois passo por aqui pa dizer se funcionou ao nao

thanks pela ajuda ;)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

ja consegui hehe

yha trabalhei com esses 2 eventos e com o tipo boolean

vejam o codigo:

Private Sub Text1_KeyDown(KeyCode As Integer, Shift As Integer)
Me.Caption = KeyCode
    If Me.Caption = 39 Then
    teclad = True
            If teclab = False And teclac = False Then
            Image2.Picture = LoadPicture("direita.gif ")
            Else
                If teclab = True Then
                Image2.Picture = LoadPicture("diba.gif ")
                End If
    
                If teclac = True Then
                Image2.Picture = LoadPicture("cidi.gif ")
                End If
            End If
    End If
    
    If Me.Caption = 40 Then
    teclab = True
    
            If teclad = False And teclae = False Then
            Image2.Picture = LoadPicture("baixo.gif ")
            Else
                If teclad = True Then
                Image2.Picture = LoadPicture("diba.gif ")
                End If
    
                If teclae = True Then
                Image2.Picture = LoadPicture("esba.gif ")
                End If
            End If
    End If
    If Me.Caption = 38 Then
    teclac = True
            If teclad = False And teclae = False Then
            Image2.Picture = LoadPicture("cima.gif ")
            Else
                If teclad = True Then
                Image2.Picture = LoadPicture("cidi.gif ")
                End If
    
                If teclae = True Then
                Image2.Picture = LoadPicture("cies.gif ")
                End If
            End If
    End If
    If Me.Caption = 37 Then
    teclae = True
            If teclac = False And teclab = False Then
            Image2.Picture = LoadPicture("esquerda.gif ")
            Else
                If teclac = True Then
                Image2.Picture = LoadPicture("cies.gif ")
                End If
    
                If teclab = True Then
                Image2.Picture = LoadPicture("esba.gif ")
                End If
            End If
    End If
End Sub

Private Sub Text1_KeyUp(KeyCode As Integer, Shift As Integer)
Me.Caption = KeyCode
    If Me.Caption = 39 Then
       teclad = False
       'MsgBox ("tecla da direita ja nao é precionada")
       
     
    End If
    If Me.Caption = 40 Then
        teclab = False
    End If
    If Me.Caption = 38 Then
        teclac = False
    End If
    If Me.Caption = 37 Then
        teclae = False
    End If
    If teclab = False And teclac = False And teclad = False And teclae = False Then
    Image2.Picture = LoadPicture("stop.gif")
    End If
    
End Sub

Obrigado NuGuN pela ajuda!!!

:)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

afinal este topico nao esta acabado... :S

surgiu um novo problema é que quando eu fico a pressionar uma tecla tipo esta:"--->"

a transmissao do video para!!! :S

como variaveis globais tenho:

Private Declare Function iniciarwebcam Lib "avicap32.dll" Alias "capCreateCaptureWindowA" (ByVal lpszWindowName As String, ByVal dwStyle As Long, ByVal X As Long, ByVal Y As Long, ByVal nWidth As Long, ByVal nHeight As Long, ByVal hwndParent As Long, ByVal nID As Long) As Long
Private Declare Function enviarmsgwin Lib "USER32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
Private Declare Function libertaconex Lib "USER32" () As Long
Private Const WM_CAP_DRIVER_CONNECT As Long = 1034
Private Const WM_CAP_DRIVER_DISCONNECT As Long = 1035
Private Const WM_CAP_GRAB_FRAME As Long = 1084
Private Const WM_CAP_EDIT_COPY As Long = 1054
Private Const WM_CAP_DLG_VIDEOFORMAT As Long = 1065
Private Const WM_CAP_DLG_VIDEOSOURCE As Long = 1066
Private Const WM_CLOSE = &H10
Private mCapHwnd As Long
Dim teclac As Boolean
Dim teclab As Boolean
Dim teclae As Boolean
Dim teclad As Boolean


para conectar a cam e ligala tenho o seguinte codigo:

Private Sub cmd_ligarcam_Click()
'vai o cursor para a caixa de texto de forma a agarrar o envento keydown e keyup
Text1.SetFocus
'Inicia a câmera
   mCapHwnd = iniciarwebcam("captura Janela", 0, 0, 0, 320, 240, Me.hwnd, 0)
   enviarmsgwin mCapHwnd, WM_CAP_DRIVER_CONNECT, 0, 0
    Tempo.Enabled = True
    Tempo.Interval = 50 
End Sub

no timer o seguinte codigo:

Private Sub Tempo_Timer()
'Exibe imagem continua no picturebox
   Clipboard.Clear
   enviarmsgwin mCapHwnd, WM_CAP_GRAB_FRAME, 0, 0
   enviarmsgwin mCapHwnd, WM_CAP_EDIT_COPY, 0, 0
   Picture1.Picture = Clipboard.GetData
   DoEvents
End Sub

para desligar o seguinte codigo:

Private Sub cmd_desligarcam_Click()
'vai o cursor para a caixa de texto de forma a agarrar o envento keydown e keyup
Text1.SetFocus
   'Desliga a câmera
   enviarmsgwin mCapHwnd, WM_CAP_DRIVER_DISCONNECT, 0, 0
End Sub

Alguem sabe qual o problema??

thanks!!

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

esquecime de dizer que a camera fica bloqueada quando faço keydown mas desbloqueia quando faço keyup....

:S

estranho

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

é estranho... só vendo o código todo. Eu já fiz isso que tu estas a fazer e funcionava bem. Vou ver se vejo como fiz e depois digo algo.

Já agora, experimenta a colocar a propriedade keypreview da form a true se ainda não tens.

Cumps

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

é estranho... só vendo o código todo. Eu já fiz isso que tu estas a fazer e funcionava bem. Vou ver se vejo como fiz e depois digo algo.

Já agora, experimenta a colocar a propriedade keypreview da form a true se ainda não tens.

Cumps

eu amanha ponho o programa aqui pa tu veres o codigo mano...

ja pus essa propriadade a true e é a mesma cena...

se pudesses deixar dar uma espreitadela ao teu codigo era fixe

xD

eu amanha passo aki pa deixar isso

obrigadao

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Eu não tenho o código, porque foi um trabalho final que ajudei a fazer, mas vou ver se ele ainda sabe daquilo e depois digo algo.

Cumps

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

yha mano isso era altamente ve isso...

deixo aqui o codigo...

mudei uma cena em que em vez de agarrar o envento keydown e keyup numa caixa de texto fiz-lho na picture box que transmite o video...

vejam :(

se descobrirem o erro digam ;)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Desculpa la a demora. É que isto anda um bocado complicado, o fim de semana passado não tive quase tempo nenhum, falei hoje com o outro e el pensa que ainda tem o código. Eu vou ver se consigo descobrir porque estas com problemas, mas como não tenho webcam para experimentar...

Depois dou noticias :confused:

Cumps

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

np  :confused:

Tens ali uns problemas!

Private Sub cmd_ligarcam_Click()
Picture1.SetFocus
'Inicia a câmera
   mCapHwnd = iniciarwebcam("captura Janela", 0, 0, 0, 320, 240, Me.hwnd, 0)
   enviarmsgwin mCapHwnd, WM_CAP_DRIVER_CONNECT, 0, 0
    Tempo.Enabled = True
    Tempo.Interval = 50
End Sub

Primeiro tens de definir o intervalo de tempo do timer e depois sim, podes ligar o timer. É que como tens isso o timer fica com auqle intervalo que tens (10000) e não com os 50 milisegundos! Ou seja, tens de meter primeiro o tempo.interval = 50 e depois sim o tempo.enabled=true

E depois no botão para parar a captação de imagens, tens de parar também o timer.

Por agora é só, tenho de bazar.. Depois diz se resolveu.

Cumps

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

a foto ja funciona.. fiz o seguinte :

Private Sub cmd_foto_Click()
If foto = 1 Then
Picture1.SetFocus
'Captura a imagem atual
  Clipboard.Clear
  enviarmsgwin mCapHwnd, WM_CAP_GRAB_FRAME, 0, 0
  enviarmsgwin mCapHwnd, WM_CAP_EDIT_COPY, 0, 0
  Picture1.Picture = Clipboard.GetData
  Tempo.Enabled = False
  foto = 2

  
Else
  Tempo.Enabled = True
  foto = 1
End If

End Sub

agora a camera parar quanto fico a pressionar uma tecla nao desapareceu mesmo com aquela troca de lugares.. pus assim:

Private Sub cmd_ligarcam_Click()
Picture1.SetFocus
'Inicia a câmera
   mCapHwnd = iniciarwebcam("captura Janela", 0, 0, 0, 320, 240, Me.hwnd, 0)
   enviarmsgwin mCapHwnd, WM_CAP_DRIVER_CONNECT, 0, 0
    Tempo.Interval = 50
    Tempo.Enabled = True

End Sub

mas continua a nao dar

se podesses falar com o teu amigo ficavate bue agradecido senao arranjavasme o mail dele ou assim...

thanks pela ajuda mais uma vez

:confused:

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Epa... sem uma webcam só mm vendo melhor o teu códig ou vendo o outro código do outro programa.... Mas sincerametente, o outro código só para a semana... Desculapa la esta demora toda, mas nõa ha muito tempo nem da minha parte nem da parte da parte do outro rapaz  :confused: Mas sei que isso se resolve que eu na altura fiz isso para o outro programa, por isso...

Cumps

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

yha na boa tasme a fazer um favor por isso podes demorar o tempo que quizeres... mas quando puderes ja sabes... tipo tambem te deu este problema quando fizestes o vosso programa?

abraço

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Boas...

Jpab, finalmente consegui o código fonte que te falei  :)  Confirma se recebes-te o email. Não o vou colocar aqui porque isso é um projecto de outra pessoa e não o vou tornar publico..

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