ListBox1
Edit1
i klasy osoba, która ma wiele składowych, ale tutaj najważniejsza (względem niej szukamy) jest składowa nazwa, która jest typu string
i mam dwie funkcje:
- Kod: Zaznacz cały
void __fastcall TForm1::Edit1KeyUp(TObject *Sender, WORD &Key, TShiftState Shift)
{
osoba **szukane=0; //wskaźnik do tablicy wskaźników, w której będą adresy wyszukanych obiektów z listy dwukierunkowej
if(osoba::ilosc_kontaktow()>1) //gdy jeden kontakt, nie wyszukujemy, ile_kontaktow() to funkcja statyczna, która podaje długość listy
{
szukane=szukaj(GLOWA, Edit1->Text.c_str()); //GLOWA-początek listy, zmienna globalna, do funkcji szukaj wysyłam oprócz GLOWY jest zawartość komponentu Edit1
if(szukane[0]) //jeśli coś wyszukano
{
ListBox1->Items->Clear(); //czyścimy ListBoxa, gdyby wcześniej coś w nim bylo
int j=0;
while(szukane[j]) // wpisujemy zwartość tablicy do ListBoxa
{
ListBox1->Items->Add((szukane[j++]->nazwa).c_str());
j++;
}
}
}
}
i teraz funkcja szukająca:
- Kod: Zaznacz cały
osoba **szukaj(osoba *temp, string nazwa)
{
osoba *(*tab)=0;
int k=osoba::ilosc_kontaktow(); //k - długość listy
tab=new osoba*[k]; //dynamicznie tworzę tablicę wskaźników i przypisuję ją do **tab, tablica ma rozmiar taki, ile jest kontaktów
for(int i=0; i<k; i++) //wypełniam ją zerami
tab[i]=0;
int i=0;
while(temp!=0)
{
if(AnsiPos(nazwa.c_str(), temp->nazwa.c_str())) //funkcja AnsiPos zwraca 0, jeśli pierwszy argument nie jest częścią drugiego (chodzi o string)
tab[i++]=temp;
temp=temp->nastepny;
}
return tab;
}
chodziło mi o stworzenie "dynamicznej wyszukiwarki" tzn na bieżąco po wpisywaniu szuka, jednak nie wiem dlaczego, nie działa czasami, siedzę już nad tym i nie widzę błędu, może ktoś z forum mi pomoże, byłbym wdzięczny...