Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Autocompletar un TEdit (solución, no consulta) (https://www.clubdelphi.com/foros/showthread.php?t=14913)

Walterdf 04-10-2004 22:09:42

Autocompletar un TEdit (solución, no consulta)
 
Buenas
Alguna vez he necesitado autocompletar un TEdit en base al texto de una tabla y la recomendación fue usar otro componente como dblookupcombobox, lo cual me vino bárbaro. Pero, en estos días realicé una aplicación en el cual logré hacer un tedit que se autocompleta y quería poner un ejemplo a disposición del foro por si les interesa. Aclaro que no soy programador experto, este código es simple y totalmente mejorable.

Componentes a usar:
-un TQuery apuntando a la base de datos
-un TEdit (en el cual se realizará la búsqueda)

Procedimiento:-
En el evento OnChange del TEdit (Filtra la consulta con el texto que se escriba en el edit)

Código Delphi [-]
procedure TForm1.Edit1Change(Sender: TObject);
begin
  with query1 do
      begin
        Close;
        with sql do
          begin
            clear;
            add('Select * from base.db where campo like ' + quotedstr(edit1.Text + '%')+ 'order by campo');
          end;
        Open;
      end;
end;

En el evento OnKeyUp del Edit:

Código Delphi [-]
procedure TForm1.Edit1KeyUp(Sender: TObject; var Key: Word;
  Shift: TShiftState);
var
  texto , campo : string;
begin
  texto:=edit1.text;
  contador:=contador+1;
  campo:=query1.FieldByName('campo').AsString;
  Delete(campo,1,contador);
  edit1.Text:=texto + campo;
  edit1.SelStart:=contador;
  edit1.SelLength:=30 //tamaño del campo
end;

La variable "contador" la ponemos como public

En el evento OnCreate del form:

Código Delphi [-]
contador:=0;

Yo he puesto algunos eventos de teclado para evitar ciertas teclas (tab, enter, etc.) , pero eso ya va a gusto del consumidor, como dije antes, es totalemente mejorable. (Lo hice en Delphi 4 con una base de datos Paradox).
Un abrazo y espero le sirva a alguien.

Walter

marcoszorrilla 04-10-2004 22:22:38

Pues muchas gracias por la aportación.

Un Saludo.

ElDioni 05-10-2005 17:05:34

cogi tu procedimiento y lo he modificado un poco
 
Código Delphi [-]
procedure TGestionped.TxtProveedorKeyUp(Sender: TObject; var Key: Word;
  Shift: TShiftState);
var
  texto , campo : string;
begin
  if key=13 then
    begin
      if adoquery1.IsEmpty=false then
        begin
          txtproveedor.Text:=adoquery1.fieldbyname('proveedor').AsString;
          txtidprov.Text:=adoquery1.fieldbyname('idprov').AsString;
          txtobserv.SetFocus;
        end;
    end
  else
  begin
  if key=8 then
    begin
      if contador>0 then
        begin
          contador:=txtproveedor.SelLength+1;
          contador:=length(txtproveedor.text)-contador;
        end;
    end
  else
    begin
      contador:=length(txtproveedor.text)-txtproveedor.sellength;
    end;
  if adoquery1.IsEmpty=false then
    begin
          texto:=txtproveedor.text;
          campo:=adoquery1.FieldByName('proveedor').AsString;
          Delete(campo,1,length(txtproveedor.text)); //contador);
          txtproveedor.Text:=texto + campo;
          txtproveedor.SelStart:=contador;
          txtproveedor.SelLength:=50; //tamaño del campo
    end;
  end;
end;


Gracias por la ayuda me sirvio de mucho

Walterdf 05-10-2005 17:14:18

Un placer ser de utilidad.
Gracias a vos.

Walter

Lepe 05-10-2005 20:23:35

Hay que buscar en los foros.... :D :D

http://www.clubdelphi.com/foros/show...t=autocompleta

En los mensajes 6 y 7 de ese hilo está toda la información y código fuente, lo demás son explicaciones, (que tampoco están demás)

saludos


La franja horaria es GMT +2. Ahora son las 02:21:35.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi