Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   seleccionar items en listbox (https://www.clubdelphi.com/foros/showthread.php?t=35231)

fluckde 05-09-2006 04:16:49

seleccionar items en listbox
 
Hola:
Estoy con un problema y quería ver si ayudan a solucionarlo.
En un listbox tengo un listado de palabras... lo que quiero hacer es
que a medida que escriba en un edit, se vaya seleccionando la línea que
más coincida (y se pinte la linea).

Me explico en un ejemplo:

Tengo en el listbox:
"aba
abaco
aca
doy
dormir"
(la lista podria seguir)

en el edit comienzo a escribir "a"
por lo que "aba" deviera seleccionarse
luego continuo escribiendo "ac"
por lo que "aca" debiera seleccionarse.

Desde ya muchas gracias.

ixMike 05-09-2006 18:42:31

Bien, prueba con esto en el evento OnChange de tu TEdit

Código Delphi [-]
procedure TForm1.Edit1Change(Sender: TObject);
var
T, L: String;
n: integer;
begin
If ListBox1.Items.Count=0 then Exit; //Salimos si la lista no tiene texto
T:=AnsiUpperCase(Edit1.text);
for n:=0 to ListBox1.Items.Count-1 do
  begin
  L:=AnsiUpperCase(ListBox1.Items[n]);
  If Pos(T,L)=1 then  //Si el Item N empieza por el texto, lo selecciona y salimos
    begin
    ListBox1.ItemIndex:=n;
    Exit;
    end;
  end;
end;

Este código hace que no diferencie entre mayúsculas y minúsculas. Si quieres que busque un Item que no empiece por, sino que contenga el texto (es decir, que "po" seleccione "Tiempo") entonces cambio "If Pos(T,L)=10" por "If Pos(T,L)>0".

Espero que te sirva de ayuda.

maeyanes 05-09-2006 21:05:57

Otra forma:

Código Delphi [-]
procedure TForm1.Edit1Change(Sender: TObject);
var
  I: Integer;

begin
  if ListBox1.Items.Count = 0 then
    Exit;
  for I := 0 to ListBox1.Items.Count - 1 do
    if AnsiSameText(Edit1.Text, Copy(ListBox1.Items[i], 1, Length(Edit1.Text))) then
    begin
      ListBox1.ItemIndex := I;
      Break
    end
end;

La función AnsiSameText compara dos cadenas sin tomar en cuenta mayúsculas y minúsculas. Ahora, este ejemplo solo compara lo que has escrito en Edit1 con el inicio de cada Item en ListBox1, tal como lo pides en tu mensaje.


Saludos...


La franja horaria es GMT +2. Ahora son las 06:54:26.

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