Bloquear acentos no formulário

Delphi

30/04/2013

Bom dia caros colegas,

Quero saber se alguém sabe me responder o que devo fazer para bloquear uso de acentos nos formulários da minha aplicação.
Utilizdo Delphi 7 e Delphi XE3.

Obrigado a todos...
Aloisio Santos

Aloisio Santos

Curtidas 0

Respostas

Gabriel Baltazar

Gabriel Baltazar

30/04/2013

Eu fiz o seguinte: criei uma function limpaCaracteresEspeciais e criei um componente TEdit personalizado e dei o nome de TEditPersonalizado chamando a função limpaCaracteres no OnChange


// Essa function fica numa unit separada
function limpaCaracteresEspeciais(str: String): String;
begin
  str := StringReplace(str, 'À', 'A', [rfReplaceAll]);
  str := StringReplace(str, 'Á', 'A', [rfReplaceAll]);
  str := StringReplace(str, 'Â', 'A', [rfReplaceAll]);
  str := StringReplace(str, 'Ã', 'A', [rfReplaceAll]);
  str := StringReplace(str, 'Ä', 'A', [rfReplaceAll]);
  str := StringReplace(str, 'Å', 'A', [rfReplaceAll]);
  str := StringReplace(str, 'Ç', 'C', [rfReplaceAll]);
  str := StringReplace(str, 'È', 'E', [rfReplaceAll]);
  str := StringReplace(str, 'É', 'E', [rfReplaceAll]);
  str := StringReplace(str, 'Ê', 'E', [rfReplaceAll]);
  str := StringReplace(str, 'Ë', 'E', [rfReplaceAll]);
  str := StringReplace(str, 'Ì', 'I', [rfReplaceAll]);
  str := StringReplace(str, 'Í', 'I', [rfReplaceAll]);
  str := StringReplace(str, 'Î', 'I', [rfReplaceAll]);
  str := StringReplace(str, 'Ï', 'I', [rfReplaceAll]);
  str := StringReplace(str, 'Ñ', 'N', [rfReplaceAll]);
  str := StringReplace(str, 'Ò', 'O', [rfReplaceAll]);
  str := StringReplace(str, 'Ó', 'O', [rfReplaceAll]);
  str := StringReplace(str, 'Ô', 'O', [rfReplaceAll]);
  str := StringReplace(str, 'Õ', 'O', [rfReplaceAll]);
  str := StringReplace(str, 'Ö', 'O', [rfReplaceAll]);
  str := StringReplace(str, 'Ù', 'U', [rfReplaceAll]);
  str := StringReplace(str, 'Ú', 'U', [rfReplaceAll]);
  str := StringReplace(str, 'Û', 'U', [rfReplaceAll]);
  str := StringReplace(str, 'Ü', 'U', [rfReplaceAll]);
  str := StringReplace(str, 'à', 'a', [rfReplaceAll]);
  str := StringReplace(str, 'á', 'a', [rfReplaceAll]);
  str := StringReplace(str, 'â', 'a', [rfReplaceAll]);
  str := StringReplace(str, 'ã', 'a', [rfReplaceAll]);
  str := StringReplace(str, 'ä', 'a', [rfReplaceAll]);
  str := StringReplace(str, 'å', 'a', [rfReplaceAll]);
  str := StringReplace(str, 'ç', 'c', [rfReplaceAll]);
  str := StringReplace(str, 'è', 'e', [rfReplaceAll]);
  str := StringReplace(str, 'é', 'e', [rfReplaceAll]);
  str := StringReplace(str, 'ê', 'e', [rfReplaceAll]);
	str := StringReplace(str, 'ë', 'e', [rfReplaceAll]);
	str := StringReplace(str, 'ì', 'i', [rfReplaceAll]);
	str := StringReplace(str, 'í', 'i', [rfReplaceAll]);
	str := StringReplace(str, 'î', 'i', [rfReplaceAll]);
	str := StringReplace(str, 'ï', 'i', [rfReplaceAll]);
	str := StringReplace(str, 'ñ', 'n', [rfReplaceAll]);
	str := StringReplace(str, 'ò', 'o', [rfReplaceAll]);
	str := StringReplace(str, 'ó', 'o', [rfReplaceAll]);
	str := StringReplace(str, 'ô', 'o', [rfReplaceAll]);
	str := StringReplace(str, 'õ', 'o', [rfReplaceAll]);
	str := StringReplace(str, 'ö', 'o', [rfReplaceAll]);
	str := StringReplace(str, 'ù', 'u', [rfReplaceAll]);
	str := StringReplace(str, 'ú', 'u', [rfReplaceAll]);
	str := StringReplace(str, 'û', 'u', [rfReplaceAll]);
	str := StringReplace(str, 'ü', 'u', [rfReplaceAll]);

  str := StringReplace(str, '`', '', [rfReplaceAll]);
	str := StringReplace(str, '´', '', [rfReplaceAll]);
	str := StringReplace(str, '^', '', [rfReplaceAll]);
	str := StringReplace(str, '¨', '', [rfReplaceAll]);
	str := StringReplace(str, '~', '', [rfReplaceAll]);

	str := StringReplace(str, 'ª', '', [rfReplaceAll]);
  str := StringReplace(str, 'º', '', [rfReplaceAll]);

  result := str;
end;



NA unit do TEditPersonalizado

procedure Register;
begin
  RegisterComponents('Componentes Personalizados', [TEditPersonalizado]);
end;

{ TEditPersonalizado }

constructor TEditPersonalizado.Create(AOwner: TComponent);
begin
  inherited;
  Properties.CharCase := ecUpperCase;
  Properties.OnChange := limpaCaracter;
end;

procedure TEditPersonalizado.limpaCaracter(Sender: TObject);
begin
  Text     := limpaCaracteresEspeciais(Text);
  SelStart := Length(Text);
end;
GOSTEI 0
Joel Rodrigues

Joel Rodrigues

30/04/2013

Boa, Baltazar. Já experimentou criar um class helper pra isso?
GOSTEI 0
Gabriel Baltazar

Gabriel Baltazar

30/04/2013

Opa, não conhecia essa técnica.
Dei uma lida rápida aqui a respeito e gostei da sugestão, vou me aprofundar mais no assunto.
Valeu.
GOSTEI 0
Joel Rodrigues

Joel Rodrigues

30/04/2013

Faça isso sim. CASO você implemente isso com class helper, compartilha aqui.
Mas fica a dica para estudar, é legal.
Um abraço a todos.
GOSTEI 0
Marco Salles

Marco Salles

30/04/2013

Bem , não é diretamente Bloquear , mas da para fazer algo no género.

Sem pretensão

http://marcosalles.wordpress.com/2013/04/14/dicas-removendo-acentos-de-uma-string-delphi/
GOSTEI 0
Aloisio Santos

Aloisio Santos

30/04/2013

Esta função impede que o usuário utilize acentos dentro dos DBEdits do formulário??? Como faço para que ele possa desempenhar esta função na aplicação inteira? Quero mesmo é evitar que o usuário utilize acentos qdo for preencher com os dados dos clientes, dados dos produtos comercializados (estoque)... enfim, tudo mesmo... acento zero...
GOSTEI 0
Marco Salles

Marco Salles

30/04/2013

coloque no evento onsetText dos tfields que vc quer que não contanha acento

por exemplo

  
procedure TSeuForm.SeuDataSetnomeSetText(Sender: TField; const Text: string);
type
    USASCIIString = type AnsiString(20127);
var
   C:Char;
begin
 str:='';
   for C in Text do
      sender.AsString:= sender.AsString  +String(USASCIIString(C));

end;
GOSTEI 0
Marco Salles

Marco Salles

30/04/2013

coloque no evento onsetText dos tfields que vc quer que não contanha acento

por exemplo

  
procedure TSeuForm.SeuDataSetnomeSetText(Sender: TField; const Text: string);
type
    USASCIIString = type AnsiString(20127);
var
   C:Char;
begin
 //str:=''; *** Foi Lixo
   for C in Text do
      sender.AsString:= sender.AsString  +String(USASCIIString(C));

end;
GOSTEI 0
Aloisio Santos

Aloisio Santos

30/04/2013

Está dando os seguintes erros.

[Error] dm.pas(925): ';' expected but '(' found
[Error] dm.pas(930): Operator not applicable to this operand type
[Error] dm.pas(931): Incompatible types: 'Boolean' and 'procedure, untyped pointer or untyped parameter'
[Error] dm.pas(932): Expression expected but 'END' found
[Error] dm.pas(933): ';' expected but 'END' found
[Fatal Error] POLICaixa.dpr(83): Could not compile used unit 'dm.pas'

O que fazer agora???
GOSTEI 0
Marco Salles

Marco Salles

30/04/2013

qual o seu delphi ?? Versão
GOSTEI 0
Aloisio Santos

Aloisio Santos

30/04/2013

Uso:

DELPHI 7
MYSQL 5
NAVICAT 5
ZEOSLIB
GOSTEI 0
Marco Salles

Marco Salles

30/04/2013

Uso:

DELPHI 7
MYSQL 5
NAVICAT 5
ZEOSLIB


Vc chegou a ver isto ??

http://marcosalles.wordpress.com/2013/04/14/dicas-removendo-acentos-de-uma-string-delphi/
GOSTEI 0
Aloisio Santos

Aloisio Santos

30/04/2013

Aí galera,

Bom dia,

Um amigo meu de Duque de Caxias criou um código perfeito para esta problemática e ainda deu a condição de permitir acentos somente nos campos do tipo memo.
O seguinte código foi criado pelo Gleison-RJ.

Primeiro é necessário ativar o KeyPreview do form, em seguida no OnKeyPress do mesmo form, digita-se o seguinte código:

If (ActiveControl is TEdit) then
begin
if not (key in['a'..'z','0'..'9',#32,#8]) then
begin
key := #0;
end;
end;



Funcionou exatamente como eu queria e fica a dica para a galera.
Finalizo este post como RESOLVIDO.
GOSTEI 0
Marco Salles

Marco Salles

30/04/2013

Que eu saiba existem muitos caracteres que não são Acentos e são limitados a esta rotina

!@#$%¨&*()_-+={}():<> tab Setas enfim uma enorme gama de caracteres

a rotina permite somente letras minúscula [a ate z] e dígitos 0 ate 9 além do espaço mais o backspace

bom deixar claro esta limitação , que ao meu ver diverge um pouco do seu pedido inciial

[]sds estou finalizando o tópico

GOSTEI 0
POSTAR