Edit ou combobox com complemento automatico
Colegas estou com a seguinte situação:
Tenho um edit e queria fazer com que esse edit, à medida que o usuario vai digitando, o edit vai se completando com os dados de uma tabela.
Por exemplo: O usuario digita no edit: GI.
E o edit completa com o que tem na tabela: GISELE (no caso gisele foi o primeiro gi que ele encontrou)
O esquema é parecido com o que acontece numa celula do excel......
Pra vc(que quer me ajudar) faça o seguinte teste: digite na celula A1 GISELE BOARI
e na celula A2 digite GI.
A celula A2 fica GISELE BOARIà medida que vc digita GI;
Acho que deu pra entender....
Tenho um edit e queria fazer com que esse edit, à medida que o usuario vai digitando, o edit vai se completando com os dados de uma tabela.
Por exemplo: O usuario digita no edit: GI.
E o edit completa com o que tem na tabela: GISELE (no caso gisele foi o primeiro gi que ele encontrou)
O esquema é parecido com o que acontece numa celula do excel......
Pra vc(que quer me ajudar) faça o seguinte teste: digite na celula A1 GISELE BOARI
e na celula A2 digite GI.
A celula A2 fica GISELE BOARIà medida que vc digita GI;
Acho que deu pra entender....
Nigel
Curtidas 0
Respostas
Delphi32
15/09/2006
Que versão de Delphi está usando?
As Comboboxes atuais possuem a propriedade AutoComplete. Setando para True a Combo completa automaticamente com um dos itens da lista.
t+!
As Comboboxes atuais possuem a propriedade AutoComplete. Setando para True a Combo completa automaticamente com um dos itens da lista.
t+!
GOSTEI 0
Nigel
15/09/2006
Usu o delphi 7
GOSTEI 0
Raserafim
15/09/2006
mas e se for no edit?
acho q já vi algo neste sentido aqui no forum
acho q já vi algo neste sentido aqui no forum
GOSTEI 0
Dpinho
15/09/2006
eu utilizo assim:
Coloco no form um Combobox e adiciono os itens quando carrego o formulario:
[color=red:2346212b86]procedure TForm1.FormShow(Sender: TObject);
begin
comboBox1.Items.clear;
table1.First;
While not table1.Eof do begin
ComboBox1.Items.add(Table1.Fieldbyname(´Name´).asstring);
Table1.Next;
End;
end;[/color:2346212b86]
Dai em cima do ComboBox coloco um edit e coloco os codigos do edit:
[color=red:2346212b86]procedure TForm1.Edit1Change(Sender: TObject);
var
iA,iB: INTEGER;
begin
IF NOT bPAUSA AND ACTIVE THEN BEGIN
IF PROCURA(Edit1.TEXT) <> ´´ THEN
BEGIN
iB:=LENGTH(Edit1.TEXT);
Edit1.TEXT:=PROCURA(Edit1.TEXT);
Edit1.SELSTART:=iB;
Edit1.SELLENGTH:=LENGTH(PROCURA(Edit1.TEXT))-iB;
end;
END;
bPAUSA:=FALSE;
//
FOR iA := 0 TO ComboBox1.ITEMS.COUNT-1 DO
IF comboBox1.ITEMS.STRINGS[iA] = Edit1.TEXT THEN BEGIN
ComboBox1.ITEMINDEX := iA;
BREAK;
END ELSE
ComboBox1.ITEMINDEX := -1;
ComboBox1.DroppedDown:=true;
end;
procedure TForm1.Edit1KeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
IF (KEY = VK_BACK) OR (KEY = VK_DELETE) THEN bPAUSA:=TRUE;
IF KEY = 13 THEN Edit1.SELSTART := LENGTH(Edit1.Text);
IF KEY = 27 THEN Edit1.CLEAR;
ComboBox1.DroppedDown:=False;
end;[/color:2346212b86]
Antes adicione uma função no codigo:
[color=red:2346212b86]function TForm1.Procura(Txt: string): String;
var
iA: INTEGER;
begin
WITH ComboBox1.ITEMS DO
if TXT <>´´ THEN
FOR iA:=0 to PRED(COUNT) do
IF (LSTRCMP(PCHAR(COPY(STRINGS[iA],1,LENGTH(TXT))),PCHAR(TXT))=0) OR
(LSTRCMPI(PCHAR(COPY(STRINGS[iA],1,LENGTH(TXT))),PCHAR(TXT))=0) THEN
BEGIN
RESULT:=STRINGS[iA];
BREAK;
END;
end;[/color:2346212b86]
A variavel : [color=red:2346212b86]bPAUSA deve esta definida como Boolean no Privete do Formulario[/color:2346212b86]
Não fica muito bom, fica parecido com o internet explore, mas dar para usar legal
Coloco no form um Combobox e adiciono os itens quando carrego o formulario:
[color=red:2346212b86]procedure TForm1.FormShow(Sender: TObject);
begin
comboBox1.Items.clear;
table1.First;
While not table1.Eof do begin
ComboBox1.Items.add(Table1.Fieldbyname(´Name´).asstring);
Table1.Next;
End;
end;[/color:2346212b86]
Dai em cima do ComboBox coloco um edit e coloco os codigos do edit:
[color=red:2346212b86]procedure TForm1.Edit1Change(Sender: TObject);
var
iA,iB: INTEGER;
begin
IF NOT bPAUSA AND ACTIVE THEN BEGIN
IF PROCURA(Edit1.TEXT) <> ´´ THEN
BEGIN
iB:=LENGTH(Edit1.TEXT);
Edit1.TEXT:=PROCURA(Edit1.TEXT);
Edit1.SELSTART:=iB;
Edit1.SELLENGTH:=LENGTH(PROCURA(Edit1.TEXT))-iB;
end;
END;
bPAUSA:=FALSE;
//
FOR iA := 0 TO ComboBox1.ITEMS.COUNT-1 DO
IF comboBox1.ITEMS.STRINGS[iA] = Edit1.TEXT THEN BEGIN
ComboBox1.ITEMINDEX := iA;
BREAK;
END ELSE
ComboBox1.ITEMINDEX := -1;
ComboBox1.DroppedDown:=true;
end;
procedure TForm1.Edit1KeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
IF (KEY = VK_BACK) OR (KEY = VK_DELETE) THEN bPAUSA:=TRUE;
IF KEY = 13 THEN Edit1.SELSTART := LENGTH(Edit1.Text);
IF KEY = 27 THEN Edit1.CLEAR;
ComboBox1.DroppedDown:=False;
end;[/color:2346212b86]
Antes adicione uma função no codigo:
[color=red:2346212b86]function TForm1.Procura(Txt: string): String;
var
iA: INTEGER;
begin
WITH ComboBox1.ITEMS DO
if TXT <>´´ THEN
FOR iA:=0 to PRED(COUNT) do
IF (LSTRCMP(PCHAR(COPY(STRINGS[iA],1,LENGTH(TXT))),PCHAR(TXT))=0) OR
(LSTRCMPI(PCHAR(COPY(STRINGS[iA],1,LENGTH(TXT))),PCHAR(TXT))=0) THEN
BEGIN
RESULT:=STRINGS[iA];
BREAK;
END;
end;[/color:2346212b86]
A variavel : [color=red:2346212b86]bPAUSA deve esta definida como Boolean no Privete do Formulario[/color:2346212b86]
Não fica muito bom, fica parecido com o internet explore, mas dar para usar legal
GOSTEI 0
Nigel
15/09/2006
To com o mesmo problema agora pros grids e memos....
GOSTEI 0
Dpinho
15/09/2006
To com o mesmo problema agora pros grids e memos....
Explique melhor esta sua duvida.
GOSTEI 0