Clique para saber mais...
  Home     Download     Produtos / Cursos     Revista     Vídeo Aulas     Fórum     Contato   Clique aqui para logar | 16 de Julho de 2026
  Login

Codinome
Senha
Salvar informações

 Esqueci minha senha
 Novo Cadastro

  Usuários
70 Usuários Online

  Revista ActiveDelphi
 Assine Já!
 Edições
 Sobre a Revista

  Conteúdo
 Apostilas
 Artigos
 Componentes
 Dicas
 News
 Programas / Exemplos
 Vídeo Aulas

  Serviços
 Active News
 Fórum
 Produtos / Cursos

  Outros
 Colunistas
 Contato
 Top 10

  Publicidade

  [Artigos]  Auto-completar de um edit
Publicado por ruysalles : Terça, Junho 03, 2008 - 09:35 GMT-3 (2925 leituras)
Comentários 5 Comentários   Enviar esta notícia a um amigo Enviar para um amigo   Versão para Impressão Versão para impressão
Administrador Depois de algum tempo estou de volta com mais um artigo pois, recentemente, necessitei colocar um comando para auto-completar um edit. Procurei na internet e nada! Fui ao velho e bom DTDelphi e nada! Então, a única solução foi sentar na cadeira e desenvolver a seguinte rotina.

Vamos lá! É necessário que seja criada uma tabela cliente em sua base de dados, para nosso exemplo. Utilizei MSAccess com Conexão ADO, mas pode ser implementado em qualquer dadabase.

Na tabela cliente, crie o campo nom_cliente do tipo string com tamanho de 100 e cadastre alguns nomes para poder testar posteriormente.

Vá para o Delphi e dentro de um form coloque um edit que chamaremos de edt_cliente. Faça a sua conexão com o Banco de Dados.

No code editor do Delphi, crie a seguinte função:

function retorna_string(Lstr_sql: string): string;
begin
  with adoquery1 do
  begin
    close;
    sql.text := Lstr_sql;
    open;
    result := fields[0].AsString;
  end;
end;

No evento onKeyPress do edt_nome coloque o seguinte código:

procedure Tfrm_emprestimo.edt_nomeKeyPress(Sender: TObject; var Key: Char);
var
  Lstr_nome, Lstr_auxiliar: string;
begin
  if (key = #25) or  // seta para a esquerda
     (key = #27) or  // seta para a direita
     (key = #8) then // backspace
    exit;

  //limpa o edit para pegar a última digitação
  edt_nome.Clear;
  //Variável privada que armazena a string q foi digitada
  Fstr_nome := Fstr_nome + string(key);
  // Consulta utilizada para auto-completar o edit
  Lstr_nome := retorna_string(' select nom_cliente from cliente' +
                              ' where nom_cliente like ''' + Fstr_nome + '%''');
  //Variável q armazena apenas o texto digitado pelo usuário
  Lstr_auxiliar := copy(Lstr_nome,length(Fstr_nome) + 1,length(Lstr_nome));
  //Variável que armazena o texto completo
  Fstr_auxiliar := Fstr_nome + Lstr_auxiliar;
end;

E para concluir adicione o seguinte código no evento onKeyUp do mesmo edt_nome:

procedure Tfrm_emprestimo.edt_nomeKeyUp(Sender: TObject; var Key: Word; Shift: TShiftState);
var
  Lstr_auxiliar: string;
begin
  // testa se a tecla pessionad foi a seta para a esquerda
  if (key = vk_left) then
  begin
    //Armazena a posição iniciar do cursor
    Fint_posicao := length(Fstr_nome) - 1;
    //Seta o cursor para a posição correta
    edt_nome.SelStart := Fint_posicao;
    //Armazena o texto digitado pelo usuário
    Fstr_nome := copy(edt_nome.text, 1, Fint_posicao);
    //coloca o cursor na posição correta após a digitação da tecla
    edt_nome.SelStart := length(Fstr_nome);
    //marca o texto que foi auto-completado
    edt_nome.SelLength := length(edt_nome.text) - length(Fstr_nome);
    exit;
  end
  else if
(key = vk_right) then
  begin

    Fint_posicao := length(Fstr_nome) + 1;
    edt_nome.SelStart := Fint_posicao;
    Fstr_nome := copy(edt_nome.text,1,Fint_posicao);
    edt_nome.SelStart := length(Fstr_nome);
    edt_nome.SelLength := length(edt_nome.text) - length(Fstr_nome);
    exit;
  end
  else if
(key = vk_back) then
  begin

    Fint_posicao := length(Fstr_nome) - 1;
    edt_nome.SelStart := Fint_posicao;
    Fstr_nome := copy(edt_nome.text,1,Fint_posicao);
    edt_nome.text := Fstr_nome;
    edt_nome.SelStart := length(Fstr_nome);
    exit;
  end;

  //limpar o edit para poder exibir apenas o texto desejado
  edt_nome.Clear;
  //Preenche o edit com o texto auto completo
  edt_nome.text := Fstr_auxiliar;
  //Armazena o tamanho do texto digitado
  edt_nome.SelStart := length(Fstr_nome);
  //marca o texto que foi auto-completado
  edt_nome.SelLength := length(edt_nome.text) - length(Fstr_nome);
end;

Pronto! Compile o nosso projeto e teste com os nome cadastrados no banco de dados.

Até a próxima e lembre-se: "O possível do impossível só é possível se você tentar".

Por: Ruy Salles
Contato: ruysalles@ig.com.br



Comentários Comentários
   Ordem:  
Comentários pertencem aos seus respectivos autores. Não somos responsáveis pelo seus conteúdos.


por: qqqoq (qqqoq.moser@gmail.com) : Jun 11, 2008 - 08:02
(Informações sobre o membro | Enviar uma mensagem)
Olá!
Será que não seria mais interessante carregar um combobox com os dados da tabela e usar a opção autocomplete que ele tem para fazer isto??
Se o botão dropdown do combobox atrapalhar, selecione o style para csSimple...
Desta forma o combobox se comporta da maneira desejada acima e sem nenhuma linha de código extra.
(exceto o loop para carregar os dados no combobox)
[]´s


por: thizardo (thizardo@gmail.com) : Jun 12, 2008 - 12:46
(Informações sobre o membro | Enviar uma mensagem)
olá! seguinte, to tentando fazer aqui no meu sistema, queria colocar esse recurso de auto completar na venda, tipo, quando o usuario vai digitando o nome do cliente e ele vai completando o edit, mais to tendo dificuldade, sou iniciante em delphi! gostaria de saber a function retorna_string é colocada na propia venda, vc usou um adoquery mais eu to usando ibquery? teria que funcionar né? dai coloquei já TBCLiente, TBVenda mais da um erro na hora de compilar "Undeclarede Identifier 'TBCliente'".... o que tem de errado no meu código será? pode me ajudar?


por: natyebe (natalia_rodrigues_4@hotmail.com) : Out 12, 2008 - 02:14
(Informações sobre o membro | Enviar uma mensagem)
Bom,
sou aluna de um curso técnico e estou fazendo um Trabalho de Conclusão de Curso e acho que você me ajudou.
Muito obrigada
  Edição 112

Revista ActiveDelphi

  50 Programas Fontes


  Produtos

Conheça Nossos Produtos

Copyright© 2001-2016 – Active Delphi – Todos os direitos reservados