Olá! Gostaria de passar uma dica que vem me acompanhando há muito tempo, que é uma rotina para tratamento de Nomes Próprios. Fiz uma adaptação com toque pessoal a um código que encontrei na internet e estou disponibilizando o resultado.
A função ficou da seguinte maneira:
function Nome_Proprio(Texto : String) : String;
const
cFixos : Array [01..14] Of String = ('A', 'E', 'O', 'As', 'Os',
'Da', 'De', 'Do', 'Das', 'Dos',
'Se', 'Á', 'À', 'É');
var
Index : Integer;
IndFix : Integer;
TxtAux : String;
begin
Try
{Limpa espaços no começo e no final}
TxtAux := Trim(Texto);
{Retira espaços desnecessários do texto}
Repeat
Index := Pos(' ', TxtAux);
Delete(TxtAux, Index, 1);
until Index = 0;
{Torna a primeira letra das palavras maíuscula}
Result := '';
For Index := 1 To Length(TxtAux) Do
Case Ord((Index = 1) Or ((Index > 1) And (TxtAux[Pred(Index)] = ' '))) Of
0 : Result := Result + AnsiLowerCase(TxtAux[Index]);
1 : Result := Result + AnsiUpperCase(TxtAux[Index]);
End;
{Acerta as palavras fixas (definidas pela constante cFixos)}
For Index := Low(cFixos) To High(cFixos) Do
Repeat
IndFix := Pos(' ' + cFixos[Index] + ' ', Result);
If IndFix > 0 Then
Begin
Delete(Result, Succ(IndFix), Length(cFixos[Index]));
Insert(AnsiLowerCase(cFixos[Index]), Result, Succ(IndFix));
End;
Until (IndFix = 0);
Except
{Retorna o texto original no caso de algum erro}
Result := Texto;
End;
end;
Para usar a função, crie um novo projeto, coloque um TEdit no formulário e digite o seguinte código no evento OnChange do TEdit:
procedure TForm1.Edit1Change(Sender: TObject);
begin
If (Trim(Edit1.Text) <> '') and (Edit1.Text[Length(Edit1.Text)] <> ' ') Then
Begin
Edit1.Text := Nome_Proprio(Edit1.Text);
Edit1.SelStart := Length(Edit1.Text);
End;
end;
É importante lembrar que a função pode ser usada onde e como quiser, bastando apenas chamá-la conforme o exemplo. A maneira descrita acima apenas dá um efeito visual bonito!
Por: Fabiano Novaes Ferreira - Analista Programador
Contato: fnovaes@habibs.com
|