Página 1 de 1

Verificar acentuação e cedilhas

Enviado: 10 Jan 2017 10:15
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.

Verificar acentuação e cedilhas

Enviado: 10 Jan 2017 12:12
por spereira
Encontrei ótimos exemplos neste link que me ajudou muito:
https://pctoledo.org/forum/viewto ... =4&t=14799

Obrigado.

Verificar acentuação e cedilhas

Enviado: 10 Jan 2017 13:11
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.

Verificar acentuação e cedilhas

Enviado: 10 Jan 2017 16:54
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.

Verificar acentuação e cedilhas

Enviado: 10 Jan 2017 17:55
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,

Verificar acentuação e cedilhas

Enviado: 11 Jan 2017 07:49
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.
:))