Hola fedee.
Fijate si de este modo hace lo que estas buscando:
Código:
...
TStrings *TS = new TStringList;
void __fastcall TForm1::FormShow(TObject *Sender)
{
int i;
for(i=0;i < ListBox1->Count; i++)
TS->Add(ListBox1->Items->Strings[i]);
}
void __fastcall TForm1::Edit1Change(TObject *Sender)
{
int i;
boolean Found= FALSE;
for(i=0;i<ListBox1->Items->Count;i++)
if(ListBox1->Items->Strings[i].SubString(1,Edit1->Text.Length()) !=
Edit1->Text) ListBox1->Items->Delete(i);
for(i=0;i< ListBox1->Items->Count && !Found; i++)
Found = ListBox1->Items->Strings[i].SubString(1,Edit1->Text.Length()) ==
Edit1->Text;
if (Found)
ListBox1->ItemIndex = i-1;
else {
for(i=0; i< TS->Count; i++)
ListBox1->Items->Strings[i] = TS->Strings[i];
ListBox1->ItemIndex = -1;
}
}
...
Al comenzar en el evento
OnShow se almacenan los valores del
TListBox en un
TStringList.
En el evento
OnChange del
TEdit si al finalizar la búsqueda incremental no se encontro ninguna coincidencia, se restaura la lista inicial en el
TListBox desde el
TStringList.
Saludos.