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!
http://www.activecollab.com - Alat za upravljanje projektima