Ну, типа, как то так:
Код:
procedure TForm1.UpdateList3(List1, List2, List3: TListView; KeyWord : String);
var
I, J : Integer;
begin
List1.Items.BeginUpdate;
List2.Items.BeginUpdate;
List3.Items.BeginUpdate;
List3.Items.Clear; // удаляем старые совпадения
Try
For I := 0 to List1.Items.Count-1 Do
For J := 0 To List2.Items.Count-2 Do
If (List1.Items[i].SubItems[0] = List2.Items[J].SubItems[0]) And
(List1.Items[i].SubItems[1] = List2.Items[J].SubItems[1]) And
(List2.Items[J].SubItems[2] = KeyWord) Then
List3.Items.Add.Caption := List2.Items[J].SubItems[3];
Finally
List1.Items.EndUpdate;
List2.Items.EndUpdate;
List3.Items.EndUpdate;
End;
end;
procedure TForm1.Timer1Timer(Sender: TObject);
begin
UpdateList3(ListView1,ListView2,ListView3,Edit1.Text);
end;
В таймере интервал ставишь на 60000.
В принципе, можно ускорить. Например, делая проверку не по таймеру, в в момент добавления итемов в ListView1 и ListView2.
Тогда придется либо чуть чуть модифицировать существующий код, либо просто написать 2 похожие процедуры. Суть - проверка добавляемого итема против только одного ListView.
Хотя и полная проверка все-равно нужна - на смену кодового слова (в Edit1).
Если из дальнейшего сравнения надо исключать уже найденные пары, то надо будет еще дописать кусочек - установку и проверку свойства Data у итемов (и его очистку в самом начале).
А вот если надо найти максимальнок кол-во совпадений, да еще и максимизировать результирующую сумму - то тут так легко не отделаться, тут тебе дорога в задачу формирования портфеля.