[ gl-xl @ 11.05.2003. 20:29 ] @
Jos sam pocetnik u delphi-ju, pa mi je nedavno iskrsao problem koji nikako da resim (ustvari dva problema). Prvi je sledeci: Kako da izbrisem podatke iz Tlistview-a koji se ponavljaju tj. kako da izbrisem polja koja imaju iste podatke (duplikate).

Drugo pitanje se odnosi na pretrazivanje. Ono sto mi je potrebno je sledece, kako da napravim da kad korisnik unese neku rec u Tedit polje, i pritiskom na dugme da pretrazi sve podatke koji se nalaze u Listviewu, a zatim da u tom istom listview-u prikaze samo rezultate odnosno polja koja sadrze tu rec.

Nadam se da sam bio dovoljno jasan...
[ Ilija Studen @ 12.05.2003. 12:00 ] @
Moras malo bolje poznavati TListView da bi to odradio.

Prvo: ako imas samo jednu kolonu onda mozes ovako odraditi pretrazivanje:

Code:
function TraziUListi(TraziOvo: string): TListItem;
var
  i: integer;
begin
  Result := nil;
  for i := 0 to ListView.Items.Count - 1 do
    if ListView.Items.Item[i].Caption = TraziOvo then
      begin
        Result := ListView.Items.Item[i];
        Exit;
      end;
end;


a obrada dogadja ti izgleda nekako ovako:

Code:
procedure ButtonClick(Sender: TObject);
var
  TmpItem: TListItem;
begin
  TmpItem := TraziUListi(Edit.Text);
  if  TmpItem = nil then
    ShowMessage('Nema pogodaka!')
  else
    ShowMessage('Pogodak!');
end;


Za result sam stavio TListItem pa sa njom mozes da radis sta god hoces!

Sto se duplikata tice prilagodi mozes ovako:

Code:
procedure ButtonClick(Sender: TObject);
var
  i: integer;
  List: TStringList;
begin
  List := TStringList.Create;
  try
    // Ovaj deo skuplja indexe duplikata
    for i := 0 to ListView.Items.Count - 1 do
      if ListView.Items.Item[i].Caption = Edit.Text then
        List.Add(IntToStr(i));
    // Ovaj deo brise duplikate
    for i := List.Items.Count to 0 do
      ListView.Items.Delete(StrToInt(List.Strings[i]));
  finally
    List.Free;
  end;
end;


Pazi! Ovaj kod sam kucao iz glave i cisto je divljacenje (spor ako je lista velika). Sve se to moze resiti sa rekurzijama (radi mnogo brze), ali trenutno nemam ni vremena ni zivaca da pravim to. Takodje, radice samo za prvu kolonu liste. Ako hoces da proveravas i druge kolone obrati paznju na Items.Subitems listu gde ListView inace cuva njihove vrednosti.

Pozdrav!