Verificar acentuação e cedilhas

Projeto [x]Harbour - Compilador de código aberto compatível com o Clipper.

Moderador: Moderadores

spereira
Usuário Nível 2
Usuário Nível 2
Mensagens: 85
Registrado em: 19 Jul 2004 11:42
Localização: Porto - Portugal

Verificar acentuação e cedilhas

Mensagem por spereira »

Bom dia pessoal.

No meu programa em Clipper tenho uma função que verifica se foi digitado o conteúdo do campo com acentos e/ou cedilhas e dá um aviso. No meu caso eu não quero que se digite com cedilhas, muito útil para digitação de campo de email, por exemplo. Só que nesta função eu utilizo a função at() que busca cada caracter do campo até encontrar o caracter com acento.
Alguém tem uma dica de como posso fazer isto no harbour?

No TEXTBOX eu incluí: ON ENTER VerAcento(Control_OBS1.Value)

Código: Selecionar todos

    // OBSERVAÇÕES //
    mLINHA = mLINHA + 25
		@ mLINHA , mCOL_LBL LABEL LABEL_OBS ;
			VALUE 'Observações:' ;
			WIDTH 80
    DEFINE TEXTBOX Control_OBS1
      ROW mLINHA
      COL mCOL_TXT+10
      WIDTH 470
      HEIGHT 20
      MAXLENGTH 50
      INPUTMASK '!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!'
      RIGHTALIGN .F.
      ON ENTER VerAcento(Control_OBS1.Value)
      
Segue a função que possuo em clipper para ilustrar o problema:

Código: Selecionar todos

Function VerAcento ( VAR )

  if at("á",VAR)=0 .and.;
    at("é",VAR)=0 .and.;
    at("í",VAR)=0 .and.;
    at("ó",VAR)=0 .and.;
    at("ú",VAR)=0 .and.;
    at("Á",VAR)=0 .and.;
    at("É",VAR)=0 .and.;
    at("Í",VAR)=0 .and.;
    at("Ó",VAR)=0 .and.;
    at("Ú",VAR)=0 .and.;
    at("â",VAR)=0 .and.;
    at("ê",VAR)=0 .and.;
    at("î",VAR)=0 .and.;
    at("ô",VAR)=0 .and.;
    at("û",VAR)=0 .and.;
    at("Â",VAR)=0 .and.;
    at("Ê",VAR)=0 .and.;
    at("Î",VAR)=0 .and.;
    at("Ô",VAR)=0 .and.;
    at("Û",VAR)=0 .and.;
    at("ã",VAR)=0 .and.;
    at("õ",VAR)=0 .and.;
    at("Ã",VAR)=0 .and.;
    at("Õ",VAR)=0 .and.;
    at("ü",VAR)=0 .and.;
    at("Ü",VAR)=0 .and.;
    at("à",VAR)=0 .and.;
    at("è",VAR)=0 .and.;
    at("ì",VAR)=0 .and.;
    at("ò",VAR)=0 .and.;
    at("ù",VAR)=0 .and.;
    at("À",VAR)=0 .and.;
    at("È",VAR)=0 .and.;
    at("Ì",VAR)=0 .and.;
    at("Ò",VAR)=0 .and.;
    at("Ù",VAR)=0 .and.;
    at("‘",VAR)=0 .and.;
    at("’",VAR)=0 .and.;
    at("˜",VAR)=0 .and.;
    at("ç",VAR)=0 .and.;  && cedilha
    at("Ç",VAR)=0 .and.;  && cedilha

    return(.t.)
  else
    MsgExclamation("Não deve digitar com acento ou cedilha!", "Aviso do Sistema")
    return(.f.)
  endif
Obrigado.

Sérgio Pereira
spereira
Usuário Nível 2
Usuário Nível 2
Mensagens: 85
Registrado em: 19 Jul 2004 11:42
Localização: Porto - Portugal

Verificar acentuação e cedilhas

Mensagem por spereira »

Encontrei ótimos exemplos neste link que me ajudou muito:
https://pctoledo.org/forum/viewto ... =4&t=14799

Obrigado.

Sérgio Pereira
spereira
Usuário Nível 2
Usuário Nível 2
Mensagens: 85
Registrado em: 19 Jul 2004 11:42
Localização: Porto - Portugal

Verificar acentuação e cedilhas

Mensagem por spereira »

Pessoal,

Como velho programador em Clipper, ainda tenho dificuldades em programação orientada a objetos.

Gostaria de utilizar a minha função chamada VerAcento() para qualquer textbox da minha janela. Como poderia passar o parâmetro para a função indicando o nome do textbox correspondente?

Código: Selecionar todos

    // OBSERVAÇÕES //
    mLINHA = mLINHA + 25
		@ mLINHA , mCOL_LBL LABEL LABEL_OBS ;
			VALUE 'Observações:' ;
			WIDTH 80
    DEFINE TEXTBOX Control_OBS1
      ROW mLINHA
      COL mCOL_TXT+10
      WIDTH 470
      HEIGHT 20
      MAXLENGTH 50
      INPUTMASK '!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!'
      RIGHTALIGN .F.
	    ON ENTER { || VerAcento(This.Value) }
      
    END TEXTBOX
Por exemplo: no evento ON ENTER como passo o parâmetro indicando o TEXTBOX Control_OBS1, de forma que possa ser alterado para outro TEXTBOX qualquer a fim de manter o foco caso seja digitada letra acentuada ou cedilha?

Segue a função VerAcento() que já está funcional mas sem o parâmetro do TEXTBOX.

Código: Selecionar todos

Function VerAcento ( VAR )

  if at("á",VAR)=0 .and.;
    at("é",VAR)=0 .and.;
    at("í",VAR)=0 .and.;
    at("ó",VAR)=0 .and.;
    at("ú",VAR)=0 .and.;
    at("Á",VAR)=0 .and.;
    at("É",VAR)=0 .and.;
    at("Í",VAR)=0 .and.;
    at("Ó",VAR)=0 .and.;
    at("Ú",VAR)=0 .and.;
    at("â",VAR)=0 .and.;
    at("ê",VAR)=0 .and.;
    at("î",VAR)=0 .and.;
    at("ô",VAR)=0 .and.;
    at("û",VAR)=0 .and.;
    at("Â",VAR)=0 .and.;
    at("Ê",VAR)=0 .and.;
    at("Î",VAR)=0 .and.;
    at("Ô",VAR)=0 .and.;
    at("Û",VAR)=0 .and.;
    at("ã",VAR)=0 .and.;
    at("õ",VAR)=0 .and.;
    at("Ã",VAR)=0 .and.;
    at("Õ",VAR)=0 .and.;
    at("ü",VAR)=0 .and.;
    at("Ü",VAR)=0 .and.;
    at("à",VAR)=0 .and.;
    at("è",VAR)=0 .and.;
    at("ì",VAR)=0 .and.;
    at("ò",VAR)=0 .and.;
    at("ù",VAR)=0 .and.;
    at("À",VAR)=0 .and.;
    at("È",VAR)=0 .and.;
    at("Ì",VAR)=0 .and.;
    at("Ò",VAR)=0 .and.;
    at("Ù",VAR)=0 .and.;
    at("‘",VAR)=0 .and.;
    at("’",VAR)=0 .and.;
    at("˜",VAR)=0 .and.;
    at("ç",VAR)=0 .and.;
    at("Ç",VAR)=0

  else
    MsgExclamation("Não deve digitar com acento ou cedilha!", "Aviso do Sistema")

   Win_Supervisao.Control_OBS1.SetFocus

  endif
Return Nil
Vou procurando mais exemplos mas se alguém puder ajudar eu agradeço.

Obrigado.

Sérgio Pereira
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Verificar acentuação e cedilhas

Mensagem por JoséQuintas »

A parte de acentuação é pra todo o aplicativo ou só pra uma parte?

Se for pra todo aplicativo, mais prático mexer na Getsys.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar do usuário
Toledo
Administrador
Administrador
Mensagens: 3133
Registrado em: 22 Jul 2003 18:39
Localização: Araçatuba - SP
Contato:

Verificar acentuação e cedilhas

Mensagem por Toledo »

spereira escreveu:Como poderia passar o parâmetro para a função indicando o nome do textbox correspondente?
Amigo, tente This.Name, por exemplo:

Código: Selecionar todos

VerAcento(This.Value,This.Name)

Código: Selecionar todos

Function VerAcento ( VAR, CtrlName )
...
...
 DoMethod("Win_Supervisao",CtrlName,"SetFocus")
ATENÇÃO: qualquer dúvida que tenha como referência código sobre MiniGui (HMG), deve ser postada na seção MiniGui.

Abraços,
Toledo - Clipper On Line
toledo@pctoledo.com.br
Harbour 3.2/MiniGui/HwGui
Faça uma doação para o fórum, clique neste link: http://www.pctoledo.com.br/doacao
spereira
Usuário Nível 2
Usuário Nível 2
Mensagens: 85
Registrado em: 19 Jul 2004 11:42
Localização: Porto - Portugal

Verificar acentuação e cedilhas

Mensagem por spereira »

Obrigado Toledo.

Era exatamente isto que eu queria fazer, uma função que sirva para o sistema todo.

Antes de ver sua resposta consegui fazer de uma forma menos funcional passando o parâmetro no evento ON ENTER do próprio TEXTBOX, como abaixo. Esta forma iria me obrigar a informar o nome do controle TEXTBOX para cada um, mais serve como aprendizado para implementações futuras.

Segue como eu fiz e que já vou alterar para o que você me sugeriu.

Código: Selecionar todos

    DEFINE TEXTBOX Control_OBS1
      ROW mLINHA
      COL mCOL_TXT+10
      WIDTH 470
      HEIGHT 20
      MAXLENGTH 50
      INPUTMASK '!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!'
      RIGHTALIGN .F.
	    ON ENTER { || if ( !VerAcento(This.Value), Win_Supervisao.Control_OBS1.SetFocus, nil ) }
    END TEXTBOX

Código: Selecionar todos

*------------------------------------------------------------------------------*
Function VerAcento ( VAR )
*------------------------------------------------------------------------------*

  if at("á",VAR)=0 .and.;
    at("é",VAR)=0 .and.;
    at("í",VAR)=0 .and.;
    at("ó",VAR)=0 .and.;
    at("ú",VAR)=0 .and.;
    at("Á",VAR)=0 .and.;
    at("É",VAR)=0 .and.;
    at("Í",VAR)=0 .and.;
    at("Ó",VAR)=0 .and.;
    at("Ú",VAR)=0 .and.;
    at("â",VAR)=0 .and.;
    at("ê",VAR)=0 .and.;
    at("î",VAR)=0 .and.;
    at("ô",VAR)=0 .and.;
    at("û",VAR)=0 .and.;
    at("Â",VAR)=0 .and.;
    at("Ê",VAR)=0 .and.;
    at("Î",VAR)=0 .and.;
    at("Ô",VAR)=0 .and.;
    at("Û",VAR)=0 .and.;
    at("ã",VAR)=0 .and.;
    at("õ",VAR)=0 .and.;
    at("Ã",VAR)=0 .and.;
    at("Õ",VAR)=0 .and.;
    at("ü",VAR)=0 .and.;
    at("Ü",VAR)=0 .and.;
    at("à",VAR)=0 .and.;
    at("è",VAR)=0 .and.;
    at("ì",VAR)=0 .and.;
    at("ò",VAR)=0 .and.;
    at("ù",VAR)=0 .and.;
    at("À",VAR)=0 .and.;
    at("È",VAR)=0 .and.;
    at("Ì",VAR)=0 .and.;
    at("Ò",VAR)=0 .and.;
    at("Ù",VAR)=0 .and.;
    at("‘",VAR)=0 .and.;
    at("’",VAR)=0 .and.;
    at("˜",VAR)=0 .and.;
    at("ç",VAR)=0 .and.;
    at("Ç",VAR)=0

  else
    MsgExclamation("Não deve digitar com acento ou cedilha!", "Aviso do Sistema")
    Return .f.
  endif
Return .t.
Mais uma vez obrigado.
:))

Sérgio Pereira
Responder