COlega Tiago Creio que você limitar a digitação nos campos é irritante para o usuário. Não seria mais fácil formatar na hora de salvar as informações no banco de dados?
Veja a função abaixo: Você vai se perguntar o porquê de certos caracteres que não existem na língua portuguesa, mas esta função foi feita para que tenha possobilidade de tratar textos multi-língues. [codigo] Function SemAcentos(StrEntrada, Estado: String) : String; var StrSaida: String; x: Integer; begin for x := 1 to length(StrEntrada) do begin if (ord(StrEntrada[x]) > 31) AND (ord(StrEntrada[x]) < 126) then StrSaida := StrSaida+StrEntrada[x] else if StrEntrada[x] in ['Á','á','Ã','ã','À','à','Ä','ä','Â','â'] then StrSaida := strSaida+'a' else if StrEntrada[x] in ['É','é','Ê','ê','È','è','Ë','ë'] then StrSaida := strSaida+'e' else if StrEntrada[x] in ['Í','í','Ì','ì','Ï','ï','Î','î'] then StrSaida := strSaida+'i' else if StrEntrada[x] in ['Ó','ó','Õ','õ','Ò','ò','Ö','ö','Ô','ô'] then StrSaida := strSaida+'o' else if StrEntrada[x] in ['Ú','ú','Ù','ù','Ü','ü','Û','û'] then StrSaida := strSaida+'u' else if StrEntrada[x] in ['Ç','ç'] then StrSaida := strSaida+'c' else if StrEntrada[x] in ['Ñ','ñ'] then StrSaida := strSaida+'n' else if StrEntrada[x] in ['Ý','ý','ÿ' ,'ÿ'] then StrSaida := strSaida+'y' else StrSaida := StrSaida+''; end; if Estado = 'M' then SemAcentos := uppercase(StrSaida) else if Estado = 'm' then SemAcentos := Lowercase(StrSaida) else if (Estado = 'I') or (Estado = 'i') then SemAcentos := StrSaida; end; [codigo] Emanuel Coutinho Salvador-Ba-Brasil ________________________________ De: Tiago de Assis Pimenta <tiagopime...@ymail.com> Para: delphi-br@yahoogrupos.com.br Enviadas: Sexta-feira, 6 de Março de 2009 10:00:20 Assunto: [delphi-br] Problema com Função (Lógica errada ?) Pessoal, estou com o seguinte problema aqui no meu serviço, tenho que fazer uma função que desabilite a acentuação em todos os forms do sistema. Até ae tudo OK, estou com a seguinte função para fazer isso. if not (Key in ['A'..'Z', 'a'..'z', '0'..'9']) then key := #0; Testei essa função direto no OnKeyPress do form e ela funcionou perfeitamente, mas para ficar um pouco melhor, tentei colocar essa função numa Unit aqui que tem somente Procedures e Functions. Então ela ficou assim : UntFuncoes procedure Desabilita_Acentos ( Key : Char); begin if not (Key in ['A'..'Z', 'a'..'z', '0'..'9']) then key := #0; end; UntCentro_Custo No Evento OnKeyPress coloco assim. procedure TfrmCentro_Custo. FormKeyPress( Sender: TObject; var Key: Char); Begin Desabilita_Acentos( key); end; Pelo que sei, era para funcionar... mas não funcionou assim, debuguei a função e ela retonar false na verificação (Key in ['A'..'Z', 'a'..'z', '0'..'9']) e a Key que testei foi a “é”. E mesmo dando false na verificação, ela não le a linha Key := #0; Alguem tem alguma explicação do porque isso ?!?!? Como preciso passar isso logo pra frente, eu coloquei a função “if not (Key in ['A'..'Z', 'a'..'z', '0'..'9']) then key := #0;” direto no OnKeyPress do UntCentro_Custo para poder liberar isso hj, mas gostaria de uma explicação para isso, pois a lógica está correta (Eu acho). Abraços [As partes desta mensagem que não continham texto foram removidas] Veja quais são os assuntos do momento no Yahoo! +Buscados http://br.maisbuscados.yahoo.com [As partes desta mensagem que não continham texto foram removidas]