When you do something like StringList1.Strings[Index] := Value it calls TStringList.Put().
I would expect that if Value = Strings[Index] then nothing happens, and no Change or Changing are called. Muttatis mutandis for PutObject. Procedure TStringList.Put(Index: Integer; const S: string); begin If Sorted then Error(SSortedListError,0); If (Index<0) or (INdex>=Fcount) then Error (SListIndexError,Index); //First check for Flist^[Index].FString = S, and if so exit? Changing; Flist^[Index].FString:=S; Changed; end; Procedure TStringList.PutObject(Index: Integer; AObject: TObject); begin If (Index<0) or (INdex>=Fcount) then Error (SListIndexError,Index); //First check for Flist^[Index].FObject equals AObject, and if so Exit? Changing; Flist^[Index].FObject:=AObject; Changed; end; Of course I might be horribly wrong. Can someone elaborate on this? Bart _______________________________________________ fpc-pascal maillist - fpc-pascal@lists.freepascal.org http://lists.freepascal.org/mailman/listinfo/fpc-pascal