Código
//colocando todas as letras que iniciam os nomes em maiuscula mas antes analisando se esses
//nomes podem porventura ser prefixos como de, do, da, dos, das, etc...
//Essa funçao pode ser usada em cadastros com campos de nome de pessoas, ruas, cidades, bairros, etc...
//Para cada EDIT que desejar esse ajustamento deve-se setar a propriedade TAG em 1
Function Organiza_Nomes(Edit: TComponent): String;
var
Letra, Nome, Prefixo: String;
c, i, x, Um_Espaco, N_Prefixo: Integer;
Espaco: Boolean;
begin
//Contador que abrangerá todos os componentes
for c := 0 to Edit.ComponentCount - 1 do
begin
//Se o componente for do tipo Tedit (para o caso de DBEdits inclua na uses a unit DBCtrls e
//troque o tipo TEdit por TDBEdit
if Edit.Components[c] is TEdit then
begin
//Se os componentes Edits selecionados estiverem setados em 1
if Edit.Components[c].Tag = 1 then
begin
//Zera-se essas variaveis pra elas estarem prontas pra outros Edits
Letra := '';
Nome := '';
Prefixo := '';
N_Prefixo := 0;
//Contador de 1 até o numero de letras do edit
for i := 1 to Length(TEdit(Edit.Components[c]).Text) do
begin
//Copia a letra
Letra := Copy(LowerCase(TEdit(Edit.Components[c]).Text), i, 1);
if Letra = ' ' then
begin
Espaco := True;
//Guarda o numero de espaços que poderá ser somente um
Um_Espaco := Um_Espaco + 1;
if Um_Espaco = 1 then
begin
//Se for só um espaço entre um nome e outro será copiado esse espaço
Nome := Nome + Copy(LowerCase(TEdit(Edit.Components[c]).Text), i, 1);
end;
end
else
begin
//Se essa variavel logica continuar verdadeira saberemos que antes era um
//espaço e agora é uma letra
if Espaco = True then
begin
Espaco := False;
//Se a letra for 'd' que inicia os prefixos de, da, do, das, dos
if Letra = 'd' then
begin
//iniciará o contador x que começa de onde parou o contador principal
// que é o i ate o numero de letras do edit
for x := i to Length(TEdit(Edit.Components[c]).Text) do
begin
//Conta o numero de letras dessa palavra
N_Prefixo := N_Prefixo + 1;
//Copia a letra desse possivel prefixo
Prefixo := Copy(LowerCase(TEdit(Edit.Components[c]).Text), x, 1);
//Se tiver espaço depois de 3 letras
if (Prefixo = ' ') and (N_Prefixo <= 4) then
begin
//O sistema saberá que é um prefixo e copiará a letra 'd' em
//tamanho MINUSCULO e travará o contador x
Nome := Nome + Copy(LowerCase(TEdit(Edit.Components[c]).Text), i, 1);
Break;
end
//Se possuir mais de 3 letras
else if N_Prefixo > 3 then
begin
//O sistema saberá que é um sobrenome comum e copiará a letra
//'d' em tamanho MAIUSCULO e tambem travará o contador x
Nome := Nome + Copy(UpperCase(TEdit(Edit.Components[c]).Text), i, 1);
Break;
end;
end;
//Recebe 0 para poder contar novamente um outro possivel prefixo
N_Prefixo := 0;
end
else
//Se começar com outra letra praticamente nao será um prefixo então
//será copiado com letra maiuscula
Nome := Nome + Copy(UpperCase(TEdit(Edit.Components[c]).Text), i, 1)
end
else
begin
if i = 1 then
//Se for a primeira letra do edit ele passará a copiar essa letra
//em maiuscula
Nome := Nome + Copy(UpperCase(TEdit(Edit.Components[c]).Text), i, 1)
else
//Senao passará a copiar todas as outras letras em tamanho normal
Nome := Nome + Copy(LowerCase(TEdit(Edit.Components[c]).Text), i, 1);
//Recebe o nome organizado
Result := Nome;
//Zera essa variavel para que ela possa validar a copia do proximo espaço
//entre nomes
Um_Espaco := 0;
end;
end;
end;
//O componente recebe o resultado
TEdit(Edit.Components[c]).Text := Result;
end;
end;
end;
end;
//Antes de chamar a funçao para fim de teste coloque um botao e cinco edits no form
//Sete na propriedade Tag em 1 todos ou alguns dos edits e nestes escreva nomes com diferentes espacos e tamanhos de letra
//Por fim chame a funçao com o botao inserindo o nome do formulario no parametro como no exemplo abaixo
procedure TForm1.Button1Click(Sender: TObject);
begin
Organiza_Nomes(Form1)
end;
Planeta Delphi - www.planetadelphi.com.br - Todos os direitos reservados | Copyright 2001-2009