Ir para conteúdo
Fórum Script Brasil
  • 0

Timer


ramon

Pergunta

Porque o interval do timer não funciona neste caso? wink.gif

Teria como fazewr o interval do timer funcionar?


Private Sub Form_Load()
Call Timer1_Timer
End Sub

Private Sub Timer1_Timer()
a = 9
End Sub

Se não da teria algum jeito de eu colocar um tempo (para executar o a sub tipo o interval do timer) dentro de uma sub

Link para o comentário
Compartilhar em outros sites

13 respostass a esta questão

Posts Recomendados

  • 0
Porque o interval do timer não funciona neste caso? wink.gif

Teria como fazewr o interval do timer funcionar?


Private Sub Form_Load()
Call Timer1_Timer
End Sub

Private Sub Timer1_Timer()
a = 9
End Sub

Se não da teria algum jeito de eu colocar um tempo (para executar o a sub tipo o interval do timer) dentro de uma sub

Realmente não entendi... por que você pergunta pelo Interval se nem mesmo está utilizando ele no código?

O código acima funcionou, mas ele simplesmente chama a rotina (o evento Timer do controle).

Abraços,

Graymalkin

Link para o comentário
Compartilhar em outros sites

  • 0
Mas eu coloquei o intervalo nas propiedades dele e não funcionou

Coloque para você ver

Eu coloquei, e funcionou normalmente. Mas, acho que agora entendi o que você quer. Você tem que entender que não é o evento (que nada mais é do que uma simples Sub) que verifica se o tempo atual está no intervalo para decidir se vai executar ou não. Dentro do timer é que verifica-se isso e então chama-se o evento. Ou seja, se você mandar executar uma sub no evento Load do form, não será ela executada? O que é Timer1_Timer()? Uma Sub. Logo, de acordo com o que eu disse na pergunta anterior, ela será executada independente do intervalo definido em Timer.

Ou seja, não adianta você definir o Timer para 2000 (2 segundos) e logo em seguida chamar a sub Timer1_Timer(), porque ele *não* vai esperar 2 segundos para executá-la. Mas, se a primeira execução do evento é de acordo com o tempo definido em Interval, por que você precisa chamá-lo manualmente? Tire aquele "Call Timer1_Timer" e você terá a sub executada no intervalo defindo por Interval. Não?

Abraços,

Graymalkin

Link para o comentário
Compartilhar em outros sites

  • 0

Ai que ta eu precisaria dar uma pausa em uma sub por isso estou usando o timer

Pois veja bem

Private Sub Form_Load()
Call a

End Sub


Sub a()
Form2.Show

'aqui tem que dar uma pausa
'isso não acontece pois a execução retorna para o call

'eu queria que so retorna-se depois que eu executasse um evento no form 2
End Sub

Link para o comentário
Compartilhar em outros sites

  • 0

Por que não fazer um Do While comum? A condição dele seria uma expressão que indicaria se o tal evento foi ou não executado. Quando o mesmo fosse executado, consequentemente o loop acabaria e o código continuaria sua execução normalmente. Vale lembrar que você terá que colocar um DoEvents ali dentro para não prender totalmente o processamento.

Abraços,

Graymalkin

Link para o comentário
Compartilhar em outros sites

  • 0

É que eu queria que o loop para-se e depois de executar o timer volta-se.

Se você usar em vez de um form usar um MSGBOX ai o laco para e volta depois de da ok ou seja depois de ocorrer um evento

Private Sub Command1_Click()
For a = 0 To 5
MsgBox "s"

Next a
End Sub

Link para o comentário
Compartilhar em outros sites

  • 0
Se você usar em vez de um form usar um MSGBOX ai o laco para e volta depois de da ok ou seja depois de ocorrer um evento

Um form modal tem o mesmo efeito, se não me engano. Não serviria para o caso? Afinal de contas, o loop estaria esperando o Form2 ser fechado.

Abraços,

Graymalkin

Link para o comentário
Compartilhar em outros sites

  • 0
Ate serviria neste caso mas eu tenho um outro form que esta como modal e oi vb não aceita dois forms modal.

não teria um outro jeito não?

Acho que o melhor seria você explicar, exatamente e detalhadamente, o que você quer fazer. Acredito que vai ficar mais fácil de se formular uma solução.

Abraços,

Graymalkin

Link para o comentário
Compartilhar em outros sites

  • 0
Simplesmente interromper o laco ao abrir o form é isso que eu quero

Sem trocar o valor da variavel do laço for

Faça esse teste:

    For i = 1 To 3
        If i = 1 Then
            Form2.Show
        End If
        Debug.Print i
        Do While Form2.Visible
            DoEvents
        Loop
    Next i

O "1" vai ser impresso na janela Imediata e o form2 será aberto. Somente quando você fechar o form2 é que aparecerão o "2" e o "3". Seria isso?

Abraços,

Graymalkin

Link para o comentário
Compartilhar em outros sites

  • 0

Sim mas ai você ficando executando um laco do while enquanto não fechar o form 2 fazendo o pc perder desempenho pois fica usando o processador a 100%

E parabens pela moderação, você merece cara tongue.gif

Link para o comentário
Compartilhar em outros sites

  • 0

Sim mas ai você ficando executando um laco do while enquanto não fechar o form 2 fazendo o pc perder desempenho pois fica usando o processador a 100%

Sim, isso é verdade. Porém, a presença do DoEvents ali fará justamente com que os recursos sejam liberados quando necessários.

E parabens pela moderação, você merece cara tongue.gif

Obrigado! biggrin.gif

Abraços,

Graymalkin

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,4k
×
×
  • Criar Novo...