Logo Hardware.com.br
death_metal
death_metal Membro Senior Registrado
212 Mensagens 1 Curtida

Dúvida em VB

#1 Por death_metal 18/03/2008 - 10:13
Olá pessoal,

Alguém pode tirar essa duúvida básica pra mim?

Minha intensão é inserir um número em um inputox
Mas enquanto o valor do input for nulo continua pedindo o número

Ex



Private Sub Form_Activate()

Dim nome As String
Dim ra As Integer

Do While nome = ""
nome = InputBox(" NOME DO ALUNO&quot
LabelNome.Caption = nome
Loop

Do While ra = Null
ra = InputBox(" RA DO ALUNO &quot
LabelRA.Caption = ra
Loop
End Sub



o primeiro loop da certo mas o segundo não.O erro deve estar na condição...Se alguém puder ajudar...

Valew
Fergo
Fergo Highlander Registrado
9.3K Mensagens 1.1K Curtidas
#4 Por Fergo
18/03/2008 - 22:01
Cuidado que com esse código o seu programa vai ficar no loop mesmo se o usuário clicar em "Cancel" (ou seja, a tela do InputBox nunca vai sumir, a não ser que você escreva qualquer coisa lá para entrar na condição).
Para verificar se o usuário cancelou a operação é necessário checar pelo ponteiro da váriável que recebe o retorno do InputBox.

Isso é feito por uma função não documentada do VB que retorna o endereço de uma string em UNICODE, chamada StrPtr(). Se ela retornar zero é porque o usuário cancelou o inputbox.

Dim nome As String

Do While (nome = "&quot
nome = InputBox(" NOME DO ALUNO&quot

If StrPtr(nome) = 0 Then Exit Do
LabelNome.Caption = nome
Loop
Fergo
Site pessoal www.fergonez.net
Portfolio
www.fbirck.com
Artigos
Informática
peczenyj
peczenyj Geek Registrado
3K Mensagens 75 Curtidas
#6 Por peczenyj
19/03/2008 - 15:03
thomas.vilhena disse:
aproveitando o assunto da mensagem do fergo, deixo minha pergunta aqui...

Como eu faço pra um loop iniciado com o click de um botão seja interrompido pelo outro, por exemplo dois botões, um play_loop e outro stop_loop?

vlw


Uma maneira POG seria criar uma variavel global PARA que seja setada True quando vc apertar o botão de stop. o loop que o play dispara verifica se Para é true ou não (o default seria False).

É gambiarra pura. O correto seria fazer threads para isso, enviando mensagens mas eu não conheço como o VB faz isso. Em flash vc adicionaria um handler associado ao clique dos botões para para ou continuar um video, o principio deveser o mesmo para VB só deve mudar a sintaxe.

Veja se ja não existe o componente que vc quer criar smile.png
Fergo
Fergo Highlander Registrado
9.3K Mensagens 1.1K Curtidas
#7 Por Fergo
19/03/2008 - 15:06
thomas.vilhena disse:
aproveitando o assunto da mensagem do fergo, deixo minha pergunta aqui...

Como eu faço pra um loop iniciado com o click de um botão seja interrompido pelo outro, por exemplo dois botões, um play_loop e outro stop_loop?

vlw


Você utilizar uma variável booleana e utilizar ela na condição. Algo como:

[code=rich]
Dim booClicou As Boolean

Private Sub
Command1_Click()
Do While Not booClicou
'algum codigo aqui dentro
DoEvents
Loop
End Sub


Private Sub Command2_Click()
booClicou = True
End Sub
[/code]O DoEvents é necessário para reservar um tempo de processamento para responder as mensagens do Windows, como cliques em botões, mover janela, etc. De forma resumida, ele evita que o programa fique pendente no sistema e pare de responder ao entrar no loop.

O VB6 gerencia as threads automaticamente e não há uma forma nativa de gerar novas threads, então esse é o método que sobra (mas não considero gambiarra).

Fergo
Site pessoal www.fergonez.net
Portfolio
www.fbirck.com
Artigos
Informática
thomas.vilhena
thomas.vilhe... Membro Junior Registrado
136 Mensagens 0 Curtidas
#8 Por thomas.vilhe...
19/03/2008 - 15:22
Eu tinha tentado uma vez fazer o que o peczenyj falou, mas dava pau na aplicação pq não era possível executar a sub do outro botão enquanto o loop não acabasse.
Foi só colocar esse DoEvents que o Fergo comentou no loop que a idéia do peczenyj passa a funcionar.
Caso alguém venha a ler esse tópico com a mesma dúvida, no VB .NET o
Application.DoEvents() é equivalente ao DoEvents do VB 6.

flw
© 1999-2024 Hardware.com.br. Todos os direitos reservados.
Imagem do Modal