Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 04-10-2004
Walterdf Walterdf is offline
Miembro
 
Registrado: may 2003
Ubicación: Buenos Aires
Posts: 152
Poder: 22
Walterdf Va por buen camino
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

Última edición por Walterdf fecha: 04-10-2004 a las 22:12:52. Razón: Equivoqué la posición de una etiqueta
Responder Con Cita
  #2  
Antiguo 04-10-2004
Avatar de marcoszorrilla
marcoszorrilla marcoszorrilla is offline
Capo
 
Registrado: may 2003
Ubicación: Cantabria - España
Posts: 11.221
Poder: 10
marcoszorrilla Va por buen camino
Pues muchas gracias por la aportación.

Un Saludo.
__________________
Guía de Estilo de los Foros
Cita:
- Ça c'est la caisse. Le mouton que tu veux est dedans.
Responder Con Cita
  #3  
Antiguo 05-10-2005
Avatar de ElDioni
[ElDioni] ElDioni is offline
Miembro Premium
 
Registrado: jul 2005
Ubicación: Murcia (España)
Posts: 935
Poder: 19
ElDioni Va por buen camino
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

Última edición por roman fecha: 05-10-2005 a las 17:12:34. Razón: agregar etiquetas [delphi] para mayor legibilidad
Responder Con Cita
  #4  
Antiguo 05-10-2005
Walterdf Walterdf is offline
Miembro
 
Registrado: may 2003
Ubicación: Buenos Aires
Posts: 152
Poder: 22
Walterdf Va por buen camino
Un placer ser de utilidad.
Gracias a vos.

Walter
Responder Con Cita
  #5  
Antiguo 05-10-2005
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 28
Lepe Va por buen camino
Hay que buscar en los foros....

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

Última edición por Lepe fecha: 05-10-2005 a las 20:26:24.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro


La franja horaria es GMT +2. Ahora son las 08:29:24.


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
Copyright 1996-2007 Club Delphi