Показать сообщение отдельно
  #2  
Старый 28.04.2020, 04:39
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,015
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Ну, типа, как то так:
Код:
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 у итемов (и его очистку в самом начале).
А вот если надо найти максимальнок кол-во совпадений, да еще и максимизировать результирующую сумму - то тут так легко не отделаться, тут тебе дорога в задачу формирования портфеля.
Ответить с цитированием