Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

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

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 12-03-2011
verito_83mdq verito_83mdq is offline
Miembro
NULL
 
Registrado: nov 2010
Posts: 118
Poder: 14
verito_83mdq Va por buen camino
Hacer que un TEdit se autocomplete...

Saludos a todos!!, como andan?

Les paso a explicar lo que quiero hacer, en la parte de altas del sistema tengo que ingresar los datos donde vive el cliente, Provincia, Ciudad,Código Postal, Código de Área , mi idea es tratar de automatizar la carga de estos valores para ahorrar un poco de trabajo.

He conectado la tabla ciudad a un LookUpComboBox, se despliega y se elige la ciudad, al elegir la ciudad se pone solo la provincia el código de área y de teléfono.

El problema es que no me gusta mucho el LookUp, preferiría poner un Tedit con una consulta y a medida que voy escribiendo que me valla tirando las opciones incluso dentro del mismo TEdit, similar a los registros de las pagina web.

No se si me explique bien, estaría bueno que me den alguna opiniones de como lo trabajan ustedes o como lo harían.

Desde ya muchas por tomarse la molestia de leer. Saludos!!!
Responder Con Cita
  #2  
Antiguo 12-03-2011
Avatar de newtron
[newtron] newtron is offline
Membrillo Premium
 
Registrado: abr 2007
Ubicación: Motril, Granada
Posts: 3.462
Poder: 21
newtron Va camino a la fama
Hola.

Si no recuerdo mal lo que se abre en las páginas web es un combobox o algo muy parecido. Ten en cuenta que si quieres que tu edit vaya rellenando de forma automática solo podrías ver una de las opciones en el mismo edit, o sea, solo verías una línea en vez de abrirse un combo con todas las opciones.

Yo cuando las opciones son pocas (sobre 10 como máximo) uso un combo, cuando son mas llamo a una función que me abre la tabla en un grid con funciones de búsqueda y me retorna el valor del registro seleccionado.

Espero que te sirva de algo este rollo.

Saludos
Responder Con Cita
  #3  
Antiguo 13-03-2011
verito_83mdq verito_83mdq is offline
Miembro
NULL
 
Registrado: nov 2010
Posts: 118
Poder: 14
verito_83mdq Va por buen camino
Hola newtron!! Gracias por leer y tomarte la molestia de responder.

Claro yo ahora lo tengo con LookUpComboBox y la verdad que no me convence mucho, lo que se me ocurrió es un poner un edit y abajo que aparezca o que se despliegue una lista con las ciudades que tienen coincidencia. Acá subí una imagen en este link

http://www.mediafire.com/imageview.p...abodfb&thumb=4

Se podrá hacer algo así?

Saludos y Gracias a todos.!!
Responder Con Cita
  #4  
Antiguo 13-03-2011
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
Hola
Y cual es el problema?, no entiendo.
Poner un edit y que en el evento onchange se valla filtrando no le veo nada complicado.
Por eso digo: No entiendo???.
Saludos
__________________
Siempre Novato
Responder Con Cita
  #5  
Antiguo 13-03-2011
verito_83mdq verito_83mdq is offline
Miembro
NULL
 
Registrado: nov 2010
Posts: 118
Poder: 14
verito_83mdq Va por buen camino
Hola Caral!! como andas!

Claro yo quiero hacer algo como la imagen que puse, lo que quiero es que a medida que escribo en el Tedit abajo me vayan apareciendo las opciones en forma de una lista desplegable para luego seleccionarla.

La duda seria en como trabajar esa lista? Tengo que utilizar un ListBox?

Código SQL [-]
  with QueryDataModule.CiudadZQuery do
                 begin
                     If active then close;
                     SQL.Clear;
                     Sql.Add('Select * from ciudad where ciudad.Ciudad like '''+CiudadEdit.Text+'%''');
                     Open;
                     Active:=True;
                 end;

Esa es la consulta del Tedit que tengo en el evento onchange, como hago para llenar la lista obteniendo los valores de esta consulta?

No se si ahora se entiende mejor o peor jaja. Si ven la imagen que puse ahí se van a dar cuenta de lo que quiero hacer.

Gracias Caral!!!
Responder Con Cita
  #6  
Antiguo 13-03-2011
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
Hola
Código Delphi [-]
   QueryDataModule.CiudadZQuery.Sql.Text:= 'Select * from ciudad where ciudad.Ciudad like '''+CiudadEdit.Text+'%''';
   QueryDataModule.CiudadZQuery.Open;
   While not QueryDataModule.CiudadZQuery.Eof do
   begin
   ListBox1.Items.Add(QueryDataModule.CiudadZQuery.Fields[0].Text);
   QueryDataModule.CiudadZQuery.Next;
   end;
   QueryDataModule.CiudadZQuery := False;
   end;
Fields[0] seria el primer campo de la tabla, se tiene que poner el campo correcto (0,1,2 etc....), o en tal caso el nombre con FileByName.
Saludos
__________________
Siempre Novato
Responder Con Cita
  #7  
Antiguo 13-03-2011
verito_83mdq verito_83mdq is offline
Miembro
NULL
 
Registrado: nov 2010
Posts: 118
Poder: 14
verito_83mdq Va por buen camino
Caral gracias por ayudar!!!!

Probé el código que me pusiste, el problema es me llena toda la lista pero sin patrones. Osea en el Tedit pongo la letra B y en vez de ir apareciendo las ciudad a medida que escribo ya me pone ejemplo Bahia Blanca entre otras. Se entiende lo que quiero decir?

Lo que probé ahora es con un dbgrig, como menciono Newtron, funciona bien, lo que no se si es conveniente usar este método o sigo probando con la lista?


Gracias Caral por ayudar!!
Responder Con Cita
  #8  
Antiguo 13-03-2011
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
Hola
Para que vallan apareciendo se necesita filtrar, no se si zeos, en el query lo hace.
Es logico que salgan todas las coincidencias, es sql, no va filtrando, define y coloca todo.
No le veo inconveniente al dbgrid, en principio pense que era lo mejor, pero pediste un listbox.
Saludos
__________________
Siempre Novato
Responder Con Cita
  #9  
Antiguo 14-03-2011
verito_83mdq verito_83mdq is offline
Miembro
NULL
 
Registrado: nov 2010
Posts: 118
Poder: 14
verito_83mdq Va por buen camino
Bueno Caral, estuve trabajando con esto y quedo bastante bien, toque todos los eventos para que el dbgrig simule ser una lista que se despliega.

Lo que estoy tratando de hacer es que, mientras escribo en el TEdit pueda ir recorriendo el dbgrid con las fechas del cursor ˇ ˆ sin necesidad de hacer click en el para tomar el foco. Se podrá??

Gracias por la paciencia!!!
Responder Con Cita
  #10  
Antiguo 14-03-2011
Avatar de newtron
[newtron] newtron is offline
Membrillo Premium
 
Registrado: abr 2007
Ubicación: Motril, Granada
Posts: 3.462
Poder: 21
newtron Va camino a la fama
Pues si que se puede, yo lo tengo así. Yo en vez de un edit lo que realmente tengo es un label. Lo que tienes que hacer es capturar es el keydown del grid y si es una tecla de cursor no hacer nada y si es otra añadirla al caption del label.

Espero que te sirva.

Saludos
Responder Con Cita
  #11  
Antiguo 14-03-2011
verito_83mdq verito_83mdq is offline
Miembro
NULL
 
Registrado: nov 2010
Posts: 118
Poder: 14
verito_83mdq Va por buen camino
Hola Newton, acá ya lo tengo medio cocinado, puedo subir y bajar sin salir del TEdit, lo que estoy tratando de hacer es dejarlo seleccionado con la tecla enter, y que se ponga solo en el Tedit.

Este es mi código:


Código Delphi [-]
procedure TAltasForm.CiudadEditKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin




             if Key = VK_DOWN then
                begin
                   QueryDataModule.CiudadZQuery.Next;
                   marca:=DBGrid1.DataSource.DataSet.GetBookmark;
                end;

             if Key = VK_UP then
                begin
                   QueryDataModule.CiudadZQuery.Prior;
                   marca:=DBGrid1.DataSource.DataSet.GetBookmark;
                end;
end;

procedure TAltasForm.CiudadEditKeyPress(Sender: TObject; var Key: Char);
begin


             DBGrid1.Visible:=True;
             DireccionLabel.Visible:=False;
             EmailLabel.Visible:=False;

             with QueryDataModule.CiudadZQuery do
                 begin
                     If active then close;
                     SQL.Clear;
                     Sql.Add('Select *  from ciudad where ciudad.Ciudad like '''+CiudadEdit.Text+'%'' and ciudad.ID_provincia=ro');
                     ParamByName('pro').AsAnsiString:=ProvinciaDBLookupComboBox.KeyValue;
                     Open;
                     Active:=True;
                 end;

             if QueryDataModule.CiudadZQuery.IsEmpty then
               begin
                ShowMessage('No hay Resultados');
                DBGrid1.Visible:=False;
                CiudadEdit.Clear;
               end;




               If Key = #13 Then
               begin

                  DBGrid1.Visible:=False;
                  DBGrid1.DataSource.DataSet.GotoBookmark(marca);
                  CiudadEdit.Text:=QueryDataModule.CiudadZQuery.FieldByName('Ciudad').Text;
                  EmailLabel.Visible:=True;
               end;




end;


Como se ve hasta he tratado con los Bookmark pero nada.

Alguna sugerencia?? Desde ya muchas GRACIAS!!
Responder Con Cita
  #12  
Antiguo 14-03-2011
verito_83mdq verito_83mdq is offline
Miembro
NULL
 
Registrado: nov 2010
Posts: 118
Poder: 14
verito_83mdq Va por buen camino
Acá lo tengo cocinado por ahora anda bien, puedo recorrer el dbgrid con el cursor sin necesidad de usar el mouse en ningún momento.
Con un poco de trabajo el dbgrid se convirtió en una lista desplegable muy cómoda.
Este es el código:
Código Delphi [-]
procedure TAltasForm.CiudadEditKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin




             if Key = VK_DOWN then
                begin
                   QueryDataModule.CiudadZQuery.Next;
                   idciu:=QueryDataModule.CiudadZQuery.FieldByName('Ciudad').Text;
                end;

             if Key = VK_UP then
                begin
                   QueryDataModule.CiudadZQuery.Prior;
                   idciu:=QueryDataModule.CiudadZQuery.FieldByName('Ciudad').Text;
                end;
end;

procedure TAltasForm.CiudadEditKeyPress(Sender: TObject; var Key: Char);
begin


             DBGrid1.Visible:=True;
             DireccionLabel.Visible:=False;
             EmailLabel.Visible:=False;

             with QueryDataModule.CiudadZQuery do
                 begin
                     If active then close;
                     SQL.Clear;
                     Sql.Add('Select *  from ciudad where ciudad.Ciudad like '''+CiudadEdit.Text+'%'' and ciudad.ID_provincia=ro');
                     ParamByName('pro').AsAnsiString:=ProvinciaDBLookupComboBox.KeyValue;
                     Open;
                     Active:=True;
                 end;

             if QueryDataModule.CiudadZQuery.IsEmpty then
               begin
                ShowMessage('No hay Resultados');
                DBGrid1.Visible:=False;
                CiudadEdit.Clear;
               end;




               If Key = #13 Then
               begin
                  CiudadEdit.Text:=(''+idciu+'');
                  DBGrid1.Visible:=False;
                  EmailLabel.Visible:=True;
                  DireccionLabel.Visible:=True;
               end;




end;

Recién le encontré un problema, si uso las flechas me guardar la ciudad en la variable como corresponde, el drama es cuando selecciono la primera ciudad, osea cuando no uso las fechas y no me guarda la variable !!!

Me estoy complicando demasiado me parece.

Saludos!!

Última edición por verito_83mdq fecha: 14-03-2011 a las 14:44:32.
Responder Con Cita
  #13  
Antiguo 14-03-2011
Avatar de newtron
[newtron] newtron is offline
Membrillo Premium
 
Registrado: abr 2007
Ubicación: Motril, Granada
Posts: 3.462
Poder: 21
newtron Va camino a la fama
.... y si cambias...

CiudadEdit.Text:=(''+idciu+'');

por....

CiudadEdit.Text:=QueryDataModule.CiudadZQuery.FieldByName('Ciudad').Text;
Responder Con Cita
  #14  
Antiguo 15-03-2011
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
Hola
Código Delphi [-]
 with QueryDataModule.CiudadZQuery do
                 begin
                     If active then close;
                     SQL.Clear;
                     Sql.Add('Select *  from ciudad where ciudad.ID_provincia = :Que');
                     ParamByName('Que').AsAnsiString:= ProvinciaDBLookupComboBox.KeyValue;
                     Open;
                     Active:=True;
                     Filter:= 'Ciudad Like '''+CiudadEdit.Text '*'''; 
                     Filtered:=  True;
                 end;
Saludos
__________________
Siempre Novato
Responder Con Cita
  #15  
Antiguo 15-03-2011
verito_83mdq verito_83mdq is offline
Miembro
NULL
 
Registrado: nov 2010
Posts: 118
Poder: 14
verito_83mdq Va por buen camino
Caral y Newtron, les agradezco mucho toda la ayuda que me han dado, lo pude solucionar gracias a ustedes, por ahora anda bien no tira errores, así que seguiré con el proyecto.

Saludos y GRACIAS!!!
Responder Con Cita
  #16  
Antiguo 20-04-2011
leandro085 leandro085 is offline
Miembro
 
Registrado: feb 2008
Posts: 19
Poder: 0
leandro085 Va por buen camino
Post Consulta

he estando ravisando este hilo y me ayudo muchisimo

mi pregunta es la siguiente. como puedo hacer para que cuando presione las teclas de arriba y abajo del teclado no me mueva la posision del cursor en el edit1 pero que me permita moverme sobre el grid..

O sea lo que quiero es que si escribi San en el edit1 el cursor se mantenga en el final y no se mueva hacia adelante o atras segun precione las telcas de arriba y abajo del teclado pero al mismo tiempo me permita moverme sobre el grid.

espero que este suficientemente clara mi pregunta.

Gracias.
Responder Con Cita
  #17  
Antiguo 20-04-2011
Avatar de newtron
[newtron] newtron is offline
Membrillo Premium
 
Registrado: abr 2007
Ubicación: Motril, Granada
Posts: 3.462
Poder: 21
newtron Va camino a la fama
Hola.

Si revisas el hilo verás que en una de mis respuestas comento que lo que realmente tengo no es un edit, es un label. Entonces lo único que tienes que hacer es tener el foco en el grid e ir capturando las pulsaciones del teclado para añadirselas al label y simular que estás escribiendo en él pero realmente el foco lo tienes en el grid.

Saludos
Responder Con Cita
  #18  
Antiguo 16-05-2011
Rofocale Rofocale is offline
Miembro
 
Registrado: mar 2010
Posts: 182
Poder: 15
Rofocale Va por buen camino
Código Delphi [-]
ProvinciaDBLookupComboBox.KeyValue;..............????????
una pregunta porque sale dblookupcombobox.keyvalue no era que no queria un lookupcombobox y en vez de esto era un grid o aparte se le pasa datos a otro dblookupcombobox ? alguien me explica ya que esto me intereso para un proyecto que tengo
Responder Con Cita
  #19  
Antiguo 16-05-2011
Avatar de newtron
[newtron] newtron is offline
Membrillo Premium
 
Registrado: abr 2007
Ubicación: Motril, Granada
Posts: 3.462
Poder: 21
newtron Va camino a la fama
Pues como no te expliques mejor... yo no te entiendo.
Responder Con Cita
  #20  
Antiguo 16-05-2011
Rofocale Rofocale is offline
Miembro
 
Registrado: mar 2010
Posts: 182
Poder: 15
Rofocale Va por buen camino
hola he estado probando el codigo me funciona bien con las teclas para bajar en el grid y seleccionar el elemento que deseo pero al darle enter este no se rellena en el edit...
como se podria solucionar ?
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

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Como puedo hacer que un TEdit se vea asì?. Alejo15x Varios 4 22-02-2010 00:36:34
Hacer evento Tab en TEdit JELIRM Varios 17 19-06-2008 19:06:34
combobox y autocomplete !!!!!!!!!!!!!!!!!! david_uh Varios 15 19-07-2007 00:58:44
¿Como hacer una Consulta en el Onchange de un TEdit? day_eli Conexión con bases de datos 8 28-01-2007 03:06:53
PickList con AutoComplete en DBGrid Delfino Conexión con bases de datos 2 13-10-2003 20:52:41


La franja horaria es GMT +2. Ahora son las 23:46:11.


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