Função de Autocompletar
Boa tarde, alguém tem uma função de autocompletar para ser utilizada fazendo pesquisa em uma query?
Por exemplo: O usuário começa a digitação no edit e, se houver coincidência no banco, o edit é preenchido com o valor do campo.
grato
Outl@w
Por exemplo: O usuário começa a digitação no edit e, se houver coincidência no banco, o edit é preenchido com o valor do campo.
grato
Outl@w
Outl@w
Curtidas 0
Respostas
Luineumann
29/10/2003
já usei um componente de nome historyedit que faz mais ou menos isso pesquise nos sites de delphi e tente usá-lo
GOSTEI 0
Outl@w
29/10/2003
Não tem como criar uma função? Eu preciso usar componentes de terceiros mesmo? Se não tiver jeito mesmo onde encontro o componente?
Outl@w
Outl@w
GOSTEI 0
Outl@w
29/10/2003
soooooooooobeeeee!!!!!!!
GOSTEI 0
Sistemald
29/10/2003
Autopreencher ao digitar para ComboBox, parecido com o IE e Netscape
Resumo:
À medida que o usuário digita algo numa combo, procura por um item e mostra o que falta ser digitado, como na combo endereço do IE ou Netscape. Opcionalmente, se o usuário digitar , pula para o próximo componente, como se tivesse teclado .
Texto:
Este recurso permite preencher automaticamente um combobox com um item sem que o usuário precise digitar tudo.
Semelhante ao que existe na combo ´endereço´ do IE ou do Netscape.
O usuário vê em azul ( selecionado ) o que falta ser preenchido. Se o usuário teclar o autopreencher para.
Outro recurso ( que pode ser retirado ) permite que ao se teclar pule-se para o próximo componente, como se tivesse sido teclado .
Tendo o seguinte formulário:
Form1 = class(Tform1)
Combobox1 : Tcombobox;
private
Autopreencher : boolean;
Precisamos definir os métodos OnChange, OnKeyPress e OnEnter, como segue:
procedure Tform1.Combobox1Enter(Sender: TObject);
begin
autopreencher := true;
end;
procedure Tform1.Combobox1Change(Sender: TObject);
var
tam,cont : integer;
begin
if autopreencher then with (sender as Tcombobox) do
begin
tam := length(text);
for cont := 0 to items.Count - 1 do
if 0=ansicomparetext(text,copy(items.Strings[cont],1,tam)) then
begin
text := items.strings[cont];
selstart := tam;
sellength := length(text);
break;
end;
end;
end;
procedure Tform1.Combobox1KeyPress(Sender: TObject; var Key: Char);
var
prox : boolean;
begin
with (sender as tcombobox) do
begin
Autopreencher := true;
prox := false;
case ord(key) of
vk_return : begin
selstart := length(text);
sellength := 0;
key := #0;
DroppedDown := false;
Prox := true;
end;
vk_back : Autopreencher := false;
end;
if (not Autopreencher) and (SelText <> ´´) then
begin
text := copy(text,1,selstart);
selstart := length(text);
sellength := 0;
key := 0;
end;
end;
if prox then findnextcontrol(sender as tcombobox,true,true,false).SetFocus;
end;
Resumo:
À medida que o usuário digita algo numa combo, procura por um item e mostra o que falta ser digitado, como na combo endereço do IE ou Netscape. Opcionalmente, se o usuário digitar , pula para o próximo componente, como se tivesse teclado .
Texto:
Este recurso permite preencher automaticamente um combobox com um item sem que o usuário precise digitar tudo.
Semelhante ao que existe na combo ´endereço´ do IE ou do Netscape.
O usuário vê em azul ( selecionado ) o que falta ser preenchido. Se o usuário teclar o autopreencher para.
Outro recurso ( que pode ser retirado ) permite que ao se teclar pule-se para o próximo componente, como se tivesse sido teclado .
Tendo o seguinte formulário:
Form1 = class(Tform1)
Combobox1 : Tcombobox;
private
Autopreencher : boolean;
Precisamos definir os métodos OnChange, OnKeyPress e OnEnter, como segue:
procedure Tform1.Combobox1Enter(Sender: TObject);
begin
autopreencher := true;
end;
procedure Tform1.Combobox1Change(Sender: TObject);
var
tam,cont : integer;
begin
if autopreencher then with (sender as Tcombobox) do
begin
tam := length(text);
for cont := 0 to items.Count - 1 do
if 0=ansicomparetext(text,copy(items.Strings[cont],1,tam)) then
begin
text := items.strings[cont];
selstart := tam;
sellength := length(text);
break;
end;
end;
end;
procedure Tform1.Combobox1KeyPress(Sender: TObject; var Key: Char);
var
prox : boolean;
begin
with (sender as tcombobox) do
begin
Autopreencher := true;
prox := false;
case ord(key) of
vk_return : begin
selstart := length(text);
sellength := 0;
key := #0;
DroppedDown := false;
Prox := true;
end;
vk_back : Autopreencher := false;
end;
if (not Autopreencher) and (SelText <> ´´) then
begin
text := copy(text,1,selstart);
selstart := length(text);
sellength := 0;
key := 0;
end;
end;
if prox then findnextcontrol(sender as tcombobox,true,true,false).SetFocus;
end;
GOSTEI 0
Outl@w
29/10/2003
Obrigado pela resposta amigo, estou buscando a funcionalidade que vc mencionou, porém estou usando um [b:90f0f3bd4d]Tedit[/b:90f0f3bd4d] que deve buscar valores de campos em uma [b:90f0f3bd4d]query[/b:90f0f3bd4d]...
Se alguém puder me ajudar...
Se alguém puder me ajudar...
GOSTEI 0
Outl@w
29/10/2003
sobe
GOSTEI 0
Outl@w
29/10/2003
É algo mais ou menos como o findnearest do TTable pessoal, mas usando query....
sobe
sobe
GOSTEI 0
Jc
29/10/2003
[quote:40cb72036a=´outl@w´]É algo mais ou menos como o findnearest do TTable pessoal, mas usando query....
sobe[/quote:40cb72036a]
Tente algo parecido com isso...
Query1.Close;
Query1.SQL.Clear;
Query1.SQL.Add(´Select * From Clientes Where Nome = ´Maria´ ´);
Query1.Close;
Este exemplo seleciona o campo Nome que contém o valor Maria na tabela Clientes.
Vc pode adicionar isso no OnChange do seu Edit1.
No OnChange cada vez que vc digitar uma tecla ele ira buscar na Tabela.
Troque no código ´Maria´ por Edit1.text, acho que resolve seu problema
sobe[/quote:40cb72036a]
Tente algo parecido com isso...
Query1.Close;
Query1.SQL.Clear;
Query1.SQL.Add(´Select * From Clientes Where Nome = ´Maria´ ´);
Query1.Close;
Este exemplo seleciona o campo Nome que contém o valor Maria na tabela Clientes.
Vc pode adicionar isso no OnChange do seu Edit1.
No OnChange cada vez que vc digitar uma tecla ele ira buscar na Tabela.
Troque no código ´Maria´ por Edit1.text, acho que resolve seu problema
GOSTEI 0
Japa
29/10/2003
amigo voce que autocompretar em um edit???
GOSTEI 0
Outl@w
29/10/2003
Tente algo parecido com isso...
Query1.Close;
Query1.SQL.Clear;
Query1.SQL.Add(´Select * From Clientes Where Nome = ´Maria´ ´);
Query1.Close;
Este exemplo seleciona o campo Nome que contém o valor Maria na tabela Clientes.
Vc pode adicionar isso no OnChange do seu Edit1.
No OnChange cada vez que vc digitar uma tecla ele ira buscar na Tabela.
Troque no código ´Maria´ por Edit1.text, acho que resolve seu problema
Obrigado pela resposta amigo, mas eu preciso de algo que autocomplete o edit...
amigo voce que autocompretar em um edit???
Sim, eu quero ´autocompretar´ em um edit
GOSTEI 0
Japa
29/10/2003
amigo uma vez fiz uma coisa assim:
Tirei quase todas as coisinhas do combobox e deixei quase igual como um edit (quer dizer ficou igual):
coloque um ComboBox e mude o Style dele para csSimple, ai ja vai parecer um edit...
de um
depois
Bom agora vou explicar um pouquinho....
O fields[0] é porque eu peguei o primeiro campo da query...
exemplo:
se eu fazer um: ´Select * From Clientes´ eu pego todos os campos da tabela Cliente.... bom se essa tabelas tiver 5 campos então o fields[0] vai ser o primeiro campo, fields[1] vai ser o segundo campo e assim por diante.....
Bom agora codigo eu selecionei todos os nomes da tabela e joguei para o ComboBox assim quando a pessoa digitar ela vai autocompletar....
Bom achu que é so isso... boa sorte amigo.... :wink:
Tirei quase todas as coisinhas do combobox e deixei quase igual como um edit (quer dizer ficou igual):
coloque um ComboBox e mude o Style dele para csSimple, ai ja vai parecer um edit...
de um
Query1.Close;
Query1.SQL.Clear;
Query1.SQL.Add(´Select Campo_Nome From Clientes´);
Query1.Close;
depois
Query1.first;
while not Query1.EOF do
begin
ComboBox.Items.Add(VarToStr(Query1.Fields[0].value));
Query1.Next;
end;
Bom agora vou explicar um pouquinho....
O fields[0] é porque eu peguei o primeiro campo da query...
exemplo:
se eu fazer um: ´Select * From Clientes´ eu pego todos os campos da tabela Cliente.... bom se essa tabelas tiver 5 campos então o fields[0] vai ser o primeiro campo, fields[1] vai ser o segundo campo e assim por diante.....
Bom agora codigo eu selecionei todos os nomes da tabela e joguei para o ComboBox assim quando a pessoa digitar ela vai autocompletar....
Bom achu que é so isso... boa sorte amigo.... :wink:
GOSTEI 0
Outl@w
29/10/2003
Que criatividade!
Valeu Japa, funcionou direitinho!
Outl@w
Valeu Japa, funcionou direitinho!
Outl@w
GOSTEI 0