Pesquisa inteligente

Delphi

24/04/2008

To procurando faz um bom tempo e não acho...

Quero fazer uma pesquisa inteligente no meu form de pesquisa.
Como?
Eu digito a primeira letra, e no change deste campo ele já faz a busca, me retornando o registro mais próximo no PRÓPRIO campo, com o restaante dos caracteres selecionados... (eu sei que existe, mas nao sei onde encontro algum exemplo)

O que vai acontecer:
Digito ´S´ no campo de pesquisa,
aí ele encontra o registro SABONETE, e coloca no campo que estou escrevendo com o S e mais o ´ABONETE´ em seleção, para eu continuar preenchendo.
e neste campo, se eu apertar para cima ou para baixo, quero poder navegar entre as linhas do Grid, sempre retornando o registro para o campo de pesquisa.

entenderam??

Se alguem puder ajudar,
qualquer coisa meu e-mail:murillo.cg@gmail.com

Valeu


Murillo.cg

Murillo.cg

Curtidas 0

Respostas

Martins

Martins

24/04/2008

To procurando faz um bom tempo e não acho... Quero fazer uma pesquisa inteligente no meu form de pesquisa. Como? Eu digito a primeira letra, e no change deste campo ele já faz a busca, me retornando o registro mais próximo no PRÓPRIO campo, com o restaante dos caracteres selecionados... (eu sei que existe, mas nao sei onde encontro algum exemplo) O que vai acontecer: Digito ´S´ no campo de pesquisa, aí ele encontra o registro SABONETE, e coloca no campo que estou escrevendo com o S e mais o ´ABONETE´ em seleção, para eu continuar preenchendo. e neste campo, se eu apertar para cima ou para baixo, quero poder navegar entre as linhas do Grid, sempre retornando o registro para o campo de pesquisa. entenderam?? Se alguem puder ajudar, qualquer coisa meu e-mail:murillo.cg@gmail.com Valeu


Seguinte, acho q vc poderá fazer isso no Onchange do componente q estiver usando para digitar esses caracteres usando Locate.


GOSTEI 0
Parosan

Parosan

24/04/2008

Faça o seguinte no onchange coloque:

procedure TForm1.Edit1Change(Sender: TObject);
Var
Palavra: string;
Tamanho: integer;
begin
// palavra deve ser a palavra total, o resultado da busca
// usei uma palavra fixa para demonstração, coloque o conteudo
// igual está aqui e digite ´Selecionado´
Palavra := ´Selecionado´;
//tamanho atual do campo, como o texto estara selecionado sempre que // vc digita o texto selecionado é substituido resultando na palavra a ser //buscada
Tamanho := Length(edit1.text);
//passa o valor resultado da busca para o campo
Edit1.Text := palavra;
//usa o tamanho do campo para iniciar a seleção após a parte digitada
edit1.SelStart := tamanho;
//usa o tamanho atual e o anterior para selecionar o resto
// pode usar um valor como 999, assim seleciona até o final
// a menos que a palavra seja maior que 999
edit1.SelLength := Length(edit1.Text) - tamanho;
end;

Qualquer dúvida coloque aqui.

Thiago PaRoSan


GOSTEI 0
Parosan

Parosan

24/04/2008

Faltou a parte de colocar para cima e para baixo, coloque no keydown

if key = VK_UP then
Begin
tabela.previous;
key := 0; //serve para evitar que o comando retire a seleção
End;
if key = VK_DOWN then
Begin
tabela.next;
key := 0;
End;


GOSTEI 0
Murillo.cg

Murillo.cg

24/04/2008

to conseguindo...valeu

mas, e para eu apagar o que já escrevi?

deste geito não deixa.


GOSTEI 0
Gil_araujo

Gil_araujo

24/04/2008

IF Edit1.Text=´´THEN
BEGIN
DM2.ClientDataSet1.Close;
dm2.SQLDataSet1.close;
dm2.SQLDataSet1.CommandText:=
´SELECT * FROM AGENDA ORDER BY NOME ASC´;
dm2.SQLDataSet1.ExecSQL;
DM2.ClientDataSet1.Open;
END ELSE
BEGIN
DM2.ClientDataSet1.Close;
dm2.SQLDataSet1.close;
dm2.SQLDataSet1.CommandText:=
´SELECT * FROM AGENDA WHERE UPPER(NOME) LIKE ´+ UpperCase(quotedStr(´¬´+Edit1.text+´¬´)+´ORDER BY NOME ASC´);
dm2.SQLDataSet1.ExecSQL;
DM2.ClientDataSet1.Open;
END;



TENTA ISSO NO onCHANGE VLW


GOSTEI 0
Parosan

Parosan

24/04/2008

Por estar o texto selecionado, quando aperta o backspace ou delete ele apaga apenas o texto selecionado, no evento onkeydown, onde vc usa o vk_up, vc pode incluir um tratamento para vk_delete e vk_backspace, apagando o conteudo total, edit1.text = ´´ ou apagando os dados selecionados antes de efetuar a tecla que pressionou por exemplo edit1.seltext := ´´;


GOSTEI 0
POSTAR