Ну, типа, как то так:
Код:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | 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 у итемов (и его очистку в самом начале).
А вот если надо найти максимальнок кол-во совпадений, да еще и максимизировать результирующую сумму - то тут так легко не отделаться, тут тебе дорога в задачу формирования портфеля.