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

Ajuda para sanar algumas dúvidas.


new_rayderss

Pergunta

Bom pessoal estou fazendo uma esquema de mascara de texto, que é bem melhor que o componente mask.

Private Sub txtIdentidade_LostFocus()
' enquanto o n° de caracteres for menor que 9 a caixa de texto não perde o foco nem mesmo para outra caixa que peça foco.
If Len(txtIdentidade) < 9 Then
txtIdentidade.SetFocus
    If Not txtNome = Empty Then
    MsgBox "Informe o n° da identidade do profissional " & txtNome & ".", vbOKOnly, "Campo Incompleto"
    txtIdentidade.SetFocus
    Exit Sub
    Else
    MsgBox "Informe o n° da identidade do profissional.", vbOKOnly, "Campo Incompleto"
    txtIdentidade.SetFocus
    Exit Sub
    End If
Else
txtIdentidade.MaxLength = 12
txtIdentidade = Format(txtIdentidade, "00\.000\.000\-0")
End If

' Aqui depois da mascara ser aplicada ele verifica se alguém mexeu
If len(txtIdentidade) < 12 Then
MsgBox "O campo foi anulado informe-o novamente", vbCritical + vbOKOnly, "Campo Anulado"
txtIdentidade.SetFocus
txtIdentidade.Text = ""
End If
End Sub

Pois bem, o problema é que se retiro o último n°( o q vem depois do -) ele não da o erro de modificado. E ainda por cima deixa assim.

ex: 23.231.323-2, tirei o último número fico assim -02.323.132-.

Agradeço desde já atenção. ^^

Editado por new_rayderss
Link para o comentário
Compartilhar em outros sites

12 respostass a esta questão

Posts Recomendados

  • 0

se você apaga um numero do texto com 12 caracteres, o tamanho fica 11. e 11 não é menor q 9 então ele entra no else e poe o formato.

quando chega no if debaxo, como ele pos o formato, voltou a ter 12, por isso ele não mostra.

o esquema acho q seria você setar a mascara só quando o texto for igual a 9. mas tem q tomar cuidado, pois ele pode apagar numeros e não apagar a mascara e dexar com tamanho 9 e ai vai por a mascara em cima de mascara. talvez você tenha q usar o IsNumeric() tb em conjunto, ve ai qualquer coisa poste.

Link para o comentário
Compartilhar em outros sites

  • 0

Ops isso eu coloquei no código sim, acabei apagando quando coloquei no tópico.

Tipo existe um jeito de ver se a pontos na caixa de texto? e tb ver se apagaram o último n°?

Deixa explicar o que pensei..

No primeiro if eu queria que ele fosse ativado só se não tivesse pontos ou traço.

E no if que tem a msg "..campo anulado.." que ele reconhecesse o último número, porque ele só não da a msg quando eu apago o último n°.

deu para entender?

Link para o comentário
Compartilhar em outros sites

  • 0
Tipo existe um jeito de ver se a pontos na caixa de texto? e tb ver se apagaram o último n°?

tem o InStr(), ele procura uma string dentro de otra e retorna a posicao q ela ta. se não existir, volta 0. exemplo:

a = InStr(texto, ".")
If a = 0 Then
    MsgBox "Não tem ponto!"
Else
    MsgBox "Tem ponto na posição " & a & "!"
End If[/code]
E no if que tem a msg "..campo anulado.." que ele reconhecesse o último número, porque ele só não da a msg quando eu apago o último n°.
como você sabe quando ele apagou o ultimo?? exemplo "23.231.323-2" ficaria "23.231.323-", certo?? então se o ultimo caracter for "-" significa q apagou o ultimo?? ai tem as funcoes Left() e Right(), o left pega um pedaco da string a partir da esquerda e o right da direita. exemplo:
[code]If Right(texto, 1) = "-" Then
    MsgBox "O último caractere é traço!"
End If

deu para entender?

mais o menos, não sei direito aonde essas dicas q eu passei vao te levar, mas se você conseguir, legal, qualquer coisa poste.

Link para o comentário
Compartilhar em outros sites

  • 0

"If Len(txtCep) < 8 Then" como vou agrupar isso com essa linha? porque eu tentei e não deu muito certo. Tipo essa parte queria ativar só quando não tivesse nem ponto e nem o traço.

E o right funciono legal.

e uma outra coisinha..

If KeyAscii < 47 Or KeyAscii > 57 Then
KeyAscii = 0
MsgBox "Digite apenas números!", vbInformation, "Info da Identidade"
End If

esse código eu achei ai na internet e add esse msgbox, só que tem um problema, eu não queria que teclas como backspace e space ficasse bloqueada. porque só aceita números, tem como especificar alguma teclas?

Link para o comentário
Compartilhar em outros sites

  • 0

é mesmo, os caras disponiblizam essa funcao em mil lugares e todos os caras esquecem do backspace.

menos eu heheh usa a minha funcao q é bem melhor. aqui: http://scriptbrasil.com.br/forum/index.php?showtopic=108733

o codigo do backspace é 8, é so você permitir o 8, como a minha funcao faz.

"If Len(txtCep) < 8 Then" como vou agrupar isso com essa linha? porque eu tentei e não deu muito certo. Tipo essa parte queria ativar só quando não tivesse nem ponto e nem o traço.

então de um exit sub depois do msgbox dentro do if q testa se é numero. ai ele so vai fazer os otros testes se for numero.

esse código eu achei ai na internet e add esse msgbox, só que tem um problema, eu não queria que teclas como backspace e space ficasse bloqueada. porque só aceita números, tem como especificar alguma teclas?

quanto ao espaco, o codigo dele é 32, é so você por um and pra permiti-lo, assim como faco com o 8 no meu codigo.

Link para o comentário
Compartilhar em outros sites

  • 0

Vlw cara funciono essa parte direitinho!

Mas tem uma coisa que não estou conseguindo resolver...

' Específico do Cep - ínicio
Private Sub txtCep_Change()
If txtCep.Text = "" Then
txtCep.MaxLength = 8
ElseIf lblAux.Caption = "V" Then
txtCep.MaxLength = 10
End If
If Len(txtCep.Text) = 8 And txtCep.MaxLength = 8 Then
txtCidade.SetFocus
End If
End Sub

Private Sub txtCep_LostFocus()
If lblAux.Caption = "V" Then
Else
    If Len(txtCep) < 8 And txtCep.MaxLength = 8 Then '(InStr(txtCep, ".") <> 1) And (InStr(txtCep, "-") <> 1) Then
        txtCep.SetFocus
        If Not txtNome = Empty Then
        MsgBox "Cep incompleto do profissional " & txtNome & ".", vbOKOnly, "Campo Incompleto"
        txtCep.SetFocus
        Exit Sub
        Else
        MsgBox "Cep incompleto do profissional.", vbOKOnly, "Campo Imcompleto"
        txtCep.SetFocus
        Exit Sub
        End If
    ElseIf (InStr(txtCep, ".") <> 1) And (InStr(txtCep, "-") <> 1) And txtCep.MaxLength = 8 Then
    txtCep.MaxLength = 10
    txtCep = Format(txtCep, "00\.000\-000")
    End If

'===============

    If (txtCep.MaxLength = 10) And (InStr(txtCep, ".") <> 1) And (InStr(txtCep, "-") <> 1) And Not (IsNumeric(txtCep) = 8) _
    Or (txtCep.MaxLength = 10) And (InStr(txtCep, ".") <> 1) And (InStr(txtCep, "-") <> 0) And Not (IsNumeric(txtCep) = 9) _
    Or (txtCep.MaxLength = 10) And (InStr(txtCep, ".") <> 0) And (InStr(txtCep, "-") <> 1) And Not (IsNumeric(txtCep) = 9) Then
    txtCep = Format(txtCep, "00\.000\-000")
    Else 
    MsgBox "O campo foi anulado informe-o novamente", vbCritical + vbOKOnly, "Campo Anulado"
    txtCep.SetFocus
    txtCep.Text = ""
    Exit Sub
    End If
End If
End Sub

'===============

Private Sub txtCep_KeyPress(KeyAscii As Integer)
If lblAux.Caption = "V" Then
Else
If (KeyAscii < 48 Or KeyAscii > 57) And KeyAscii <> 8 Then
KeyAscii = 0
MsgBox "Digite apenas números", vbInformation, "Info do CEP"
End If
End If
End Sub
' Específico do Cep - fim

"'===============" depois dessa linha que acontece o problema. Ele só esta lendo aqui ..

If (txtCep.MaxLength = 10) And (InStr(txtCep, ".") <> 1) And (InStr(txtCep, "-") <> 1) And Not (IsNumeric(txtCep) = 8) _

Or (txtCep.MaxLength = 10) And (InStr(txtCep, ".") <> 1) And (InStr(txtCep, "-") <> 0) And Not (IsNumeric(txtCep) = 9) _

depois ele não considera até aqui "'==============="

não consego compreender.

Link para o comentário
Compartilhar em outros sites

  • 0

Ainda não funciono mais ta valendo a dica, vou da uma reformulada nos meus ifs :P Mas para não perder a viagem

tenho duas perguntas.. a 1° é eu digitei uma data em um textbox como posso estipular se ele é menor que a data do sistema?

"if txtData.Text < Date then" eu achava que era isso só que ele só reconhece os dias não se se é por causa da verificação que estou usando


Public Function VerificaData(Maskara As TextBox)

Dim Data As String
Dim Dia As String
Dim Mes As String
Dim Ano As String
Dim Fevereiro As Integer

Data = Maskara.Text
Dia = Mid(Data, 1, 2)
Mes = Mid(Data, 4, 2)
Ano = Mid(Data, 7, 4)

'Verificando os meses que podem ter até o dia 31
If (Mes = 1) Or (Mes = 3) Or (Mes = 5) Or (Mes = 7) Or (Mes = 8) Or (Mes = 10) Or (Mes = 12) Then
If (Dia < 1) Or (Dia > 31) Then
MsgBox "Dia inválido", vbCritical + vbOKOnly, "Erro no campo"
Maskara.SetFocus
Exit Function
End If
End If

'Verificando o mes de fevereiro
If (Mes = 2) Then
If (Dia > 30) Then
MsgBox "O mês de fevereiro vai até dia 29", vbCritical + vbOKOnly, "Erro no campo"
Maskara.SetFocus
Exit Function
End If
Fevereiro = Ano Mod 4
If (Fevereiro <> 0) And (Dia = 29) Then
MsgBox "Dia inválido, o mês é fevereiro e não é ano bissexto", vbCritical + vbOKOnly, "Erro no campo"
Maskara.SetFocus
Exit Function
End If
End If

'Verificar os meses que não podem ter dia até 31 e sim até 30
If (Mes = 2) Or (Mes = 4) Or (Mes = 6) Or (Mes = 9) Or (Mes = 11) Then
If (Dia < 1) Or (Dia > 30) Then
MsgBox ("Dia inválido, o mês é só até o dia 30"), vbCritical + vbOKOnly, "Erro no campo"
Maskara.SetFocus
Exit Function
End If
End If

'Verificar os meses 1 A 12
If (Mes < 1) Or (Mes > 12) Then
MsgBox "Mês invalido", vbCritical + vbOKOnly, "Erro no campo"
Maskara.SetFocus
Exit Function
End If
[/Codebox]

Eu tenho no load de um MDIForm1

[code]'Saúda o usuário conforme a hora do dia. If Time >= "00:00:00" And Time < "11:59:59" Then     MDIForm1.StatusBar1.Panels(1).Text = "Bom Dia" ElseIf Time >= "12:00:00" And Time < "17:59:59" Then     MDIForm1.StatusBar1.Panels(1).Text = "Boa Tarde" Else     MDIForm1.StatusBar1.Panels(1).Text = "Boa Noite" End If[/code]

eu queria que ficasse alternando para Seja Bem Vindo! e a saudação do determinado tempo. Eu tenho já tenho dois componentes Timer, só que não sei como posso estipular esse periodo.

obrigado desde já!!

Link para o comentário
Compartilhar em outros sites

  • 0

hum, pelo q to vendo você fez uma funcao pra verifica se a data é valida...

parece q você teve trabalho a toa porque a funcao IsDate() já faz isso hehehe

mas beleza, a funcao ficou legal, só não testei aqui pra ve se funciona mesmo heheh.

tenho duas perguntas.. a 1° é eu digitei uma data em um textbox como posso estipular se ele é menor que a data do sistema?

"if txtData.Text < Date then" eu achava que era isso só que ele só reconhece os dias não se se é por causa da verificação que estou usando

isso ai é pra funcionar sim. como assim so reconhece os dias?? essa funcao q você fez ai não tem relacao com essa comparacao, certo?? então ela não influenciaria em nd. onde você usa esse codigo??

Eu tenho no load de um MDIForm1

'Saúda o usuário conforme a hora do dia.
If Time >= "00:00:00" And Time < "11:59:59" Then
    MDIForm1.StatusBar1.Panels(1).Text = "Bom Dia"
ElseIf Time >= "12:00:00" And Time < "17:59:59" Then
    MDIForm1.StatusBar1.Panels(1).Text = "Boa Tarde"
Else
    MDIForm1.StatusBar1.Panels(1).Text = "Boa Noite"
End If[/code]

eu queria que ficasse alternando para Seja Bem Vindo! e a saudação do determinado tempo. Eu tenho já tenho dois componentes Timer, só que não sei como posso estipular esse periodo.

hum, isso ta dando algum erro?? é so fazer um timer como interval = 1000 (1000 milisegundos = 1 segundo) e por esse codigo dentro do evento Timer() do timer (duplo clique pra chamar), é pra funcionar direitinho, ta dando algum problema??

Link para o comentário
Compartilhar em outros sites

  • 0

Bom a 1° dúvida consegui resolver, não sei explicar porque ele só pegava o dia. Era algo assim eu digitava 28/02/2008 aí dava certo, referente ao dia, hoje são 27 se eu colocar 27/01/2008, aceitava. Mas consegui resolver e implementei nessa mesma rotina.


'Verificador de data completo, onde ele ver o máximo de dias que cada mês possui.
'Verifica também se a data informada é ultrapassada.
Public Function VerificaData(Maskara As TextBox)

Dim Data As String
Dim Dia As String
Dim Mes As String
Dim Ano As String
Dim Fevereiro As Integer

Data = Maskara.Text
Dia = Mid(Data, 1, 2)
Mes = Mid(Data, 4, 2)
Ano = Mid(Data, 7, 4)

'Verificando os meses que podem ter até o dia 31
If (Mes = 1) Or (Mes = 3) Or (Mes = 5) Or (Mes = 7) Or (Mes = 8) Or (Mes = 10) Or (Mes = 12) Then
If (Dia < 1) Or (Dia > 31) Then
MsgBox "Dia inválido", vbCritical + vbOKOnly, "Erro no campo"
Maskara.SetFocus
Exit Function
End If
End If

'Verificando o mes de fevereiro
If (Mes = 2) Then
If (Dia > 30) Then
MsgBox "O mês de fevereiro vai até dia 29", vbCritical + vbOKOnly, "Erro no campo"
Maskara.SetFocus
Exit Function
End If
Fevereiro = Ano Mod 4
If (Fevereiro <> 0) And (Dia = 29) Then
MsgBox "Dia inválido, o mês é fevereiro e não é ano bissexto", vbCritical + vbOKOnly, "Erro no campo"
Maskara.SetFocus
Exit Function
End If
End If

'Verificar os meses que não podem ter dia até 31 e sim até 30
If (Mes = 2) Or (Mes = 4) Or (Mes = 6) Or (Mes = 9) Or (Mes = 11) Then
If (Dia < 1) Or (Dia > 30) Then
MsgBox ("Dia inválido, o mês é só até o dia 30"), vbCritical + vbOKOnly, "Erro no campo"
Maskara.SetFocus
Exit Function
End If
End If

'Verificar os meses 1 A 12
If (Mes < 1) Or (Mes > 12) Then
MsgBox "Mês invalido", vbCritical + vbOKOnly, "Erro no campo"
Maskara.SetFocus
Exit Function
End If

'Verifica se o ano já passou, senão caso o ano seja o atual verifica se a dia _
ou mês são ultrapassados.
If (Ano < Year(Date)) Then
MsgBox "Data Ultrapassada", vbCritical + vbOKOnly, "Erro no campo"
Maskara.Text = ""
Maskara.SetFocus
ElseIf (Ano = Year(Date)) And ((Mes < Month(Date)) Or (Dia < Day(Date))) Then
MsgBox "Data Ultrapassada", vbCritical + vbOKOnly, "Erro no campo"
Maskara.Text = ""
Maskara.SetFocus
Exit Function
End If
End Function
[/codebox]

E no segundo caso, é que eu queria que ficasse alternando de Bom Dia ou Boa Tarde ou Boa Noite para Seja Bem Vindo.

Só que estava colocando no load do form e assim não conseguiria. Aí depois de você ter postado para colocar o código no timer eu pensei eu posso usar o outro para fazer isso. Aí deu certo!!

[code]Private Sub Timer1_Timer() MDIForm1.StatusBar1.Panels(4).Text = Format(Now, "HH:MM:SS") MDIForm1.StatusBar1.Panels(4).ToolTipText = Format(Date, "long date") 'Saúda o usuário conforme a hora do dia. If Time >= "00:00:00" And Time < "11:59:59" Then     MDIForm1.StatusBar1.Panels(1).Text = "Bom Dia" ElseIf Time >= "12:00:00" And Time < "17:59:59" Then     MDIForm1.StatusBar1.Panels(1).Text = "Boa Tarde" Else     MDIForm1.StatusBar1.Panels(1).Text = "Boa Noite" End If End Sub Private Sub Timer2_Timer() If Time >= "00:00:00" And Time < "23:59:59" Then     MDIForm1.StatusBar1.Panels(1).Text = "Seja Bem Vindo!!!" End If End Sub[/code]

o Timer2 eu coloquei o intervalo como 10000, aí fica mudando no caso agora Boa Noite para Seja Bem Vindo!!!.

Espero que minha dúvidas ajudem outra pessoas também!! E obrigado kuroi pela força!!

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,5k
×
×
  • Criar Novo...