Добавление в TList несуществующих элементов

Vip03
Дата: 10.10.2006 05:35:17
Есть множество ОлеВариантов.
Есть ТЛист с указателями на ОлеВариант.
Если этого ОлеВарианта в ТЛисте нет - его нужно добавить.
var
 Spr: OleVariant;
 POleVariant: ^OleVariant;
 List: TList;
Begin
 List:=TList.Create;
 Spr.SelectItems;
 While Spr.GetItem Do
 Begin
  New(POleVariant); // здесь написал полную фигню,
  POleVariant^:=Spr.Ownew; // но как правильно - я не знаю.
  If List.IndexOf(POleVariant)=-1 Then
   List.Add(POleVariant)
  Else
   Dispose(POleVariant);
 End;
End;

Может есть какой метод, что бы проверить что в ТЛисте уже есть указатель на этот ОБЪЕКТ?
Dimkas
Дата: 10.10.2006 06:22:34
а IndexOf() перестал работать?
Dimkas
Дата: 10.10.2006 06:57:20
каюсь спросил не подумав :)
исправляюсь

procedure TForm1.Button1Click(Sender: TObject);
var
  w : OleVariant;
  p: POleVariant;
  List: TList;

function IndexOfOleVar(var OleVar: OleVariant): Integer;
var
  I: Integer;
  pp: POleVariant;
  ov: OleVariant;
begin
  Result := -1;
  for I := 0 to List.Count - 1 do
  begin
    PP := List[i];
    ov := PP^;
    if vartoStr(ov) = vartoStr(OleVar) then
    begin
      Result := I;
      Exit;
    end;
  end;
end;
begin
  List := TList.Create;
  w := CreateOleObject('Word.Application');
  New(P);
  P^ := w;
  List.Add(p);
  ShowMEssage(IntToStr(IndexOfOleVar(w)));
  w.Quit;
end;
Vip03
Дата: 10.10.2006 10:47:48
Об этом я думал.
Но есть порядка 15тыс ОлеЭлементов, и у каждого в подчинении от 3 до 15 ОлеЭлементов. И если все проверять в цикле ..... Очень долго.
lazy cat1
Дата: 10.10.2006 11:09:14
Ну храни сортированный список, ищи половинным делением и добавляй новые элементы insert'ом.
Vip03
Дата: 10.10.2006 12:59:18
А это идея. Спасибо. Тема закрыта.