Buscar

Organizar nomes em edits

Código

//Essa é uma funçao para retirar espaços excedentes que possam porventura existir ENTRE nomes,
//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;

Publicidade

Vote na dica




Quantidade de votos: 0 votos
Aceitação: 0%


Detalhes da dica

Categoria: Forms
Adicionada dia: 21/08/07
Por: Davi Winter
Visualizada: 14172 vezes

Planeta Delphi - Tudo sobre programação Delphi Planeta Delphi - www.planetadelphi.com.br - Todos os direitos reservados | Copyright 2001-2009