Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Combobox como edit de google (https://www.clubdelphi.com/foros/showthread.php?t=81452)

DarkBlue 15-11-2012 17:03:40

Combobox como edit de google
 
hola compañeros la verdad es que quiero hacer algo muy parecido a lo que google tiene en su caja de busqueda escribo una letra y se muestran abajo los resultados posibles relacionados;los mios los obtengo de una base de datos.

Bueno hasta ahora el unico problema que tengo es que cuando encuentro un resultado parecido digamos Ma en la caja de texto del combo(donde escribo ) me pone Maria Concepción ( osea el primer resultado) pero yo no quiero que me ponga en automatico el primer resultado.

Ademas una ves hecho esto de completar con algun registro la proxima tecla que presiono se va al inicio del texto digamos asi
Maria Concepcion (aparte que solo pone en azul el resto de la palabra) la próxima tecla seria E en el combobox edit aparece EMariaConcepcion.



el estilo de mi combobox1 es csDropDown

este es el código que utilizo


Código Delphi [-]

procedure Tform1.ComboBox1KeyPress(Sender: TObject; var Key: Char);
begin

if length(combobox1.Text)>1 then begin

busca(combobox1.Text);

end ;



form1

procedure busca(cadena:String);
var combo:string;
begin



m.piezascot.SQL.Clear;
m.piezascot.SQL.Add('select * from seleccionapiezasarea where n like '+quotedstr(cadena+'%%')+' and c <> all (select id_final_piezaspresupuestos from partes_pedido where cve_servicio='+
form1.claveservicio+') order by n asc');
m.piezascot.Open;


form1.clavespiezas.Clear;
form1.combobox1.Items.Clear;
form1.cclaveservicio.Clear;


while not m.piezascot.Eof do
begin
   if form1.ComboBox1.Items.IndexOf(m.piezascot.fieldbyname('n').AsString)=-1 then form1.ComboBox1.Items.Add(trim(m.piezascot.fieldbyname('n').AsString));
   if form1.clavespiezas.Items.IndexOf(m.piezascot.fieldbyname('c').AsString)=-1 then  form1.clavespiezas.Items.Add(m.piezascot.fieldbyname('c').AsString);
   if form1.cclaveservicio.Items.IndexOf(m.piezascot.fieldbyname('servicio').AsString)=-1 then form1.cclaveservicio.Items.Add(m.piezascot.fieldbyname('servicio').AsString);
  m.piezascot.Next;
end;

end;

Muchas gracias por su tiempo espero haber explicado bien y animo!

movorack 15-11-2012 20:07:47

Leyendo lo que expones. Me hago una pregunta, ¿Haz analizado el costo que tiene hacer una consulta por cada pulsación de teclado?.

Con respecto a lo que comentas, lo que está sucediendo es que estás actualizando el texto del componente y el te coloca al inicio del mismo. Podrías mirar algún método para colocarte al final del texto digitado para continuar con la escritura.

Buscando en google, podrás hallar algunas porciones de códigos que te ayuden con lo que necesitas.

DarkBlue 05-12-2012 22:44:18

gracias
 
si asi es buscando en google encontre un enlace de embarcadero indicando como se puede hacer, pues como son poquitas las personas que usaran creo que no hay problema haciendo consultas a la ves aun no se como medir el rendimiento de las aplicaciones gracias amigo =)


La franja horaria es GMT +2. Ahora son las 20:40: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