Delphi 6 では、ソートされた (Sorted = true) TStringList にオブジェクトを挿入しようとすると、例外がスローされ、InsertObject() はソートされたリストでは許可されないという警告が表示されます。InsertObject() を呼び出すことが必然的にリストの並べ替え順序を破棄することを意味する場合、これを理解できました。しかし、TStringList.Find() メソッドを考えると:
function TStringList.Find(const S: string; var Index: Integer): Boolean;
リストに追加された場合、指定された文字列の挿入インデックスがどうあるべきかを正確に示すインデックスを返します。そのインデックスで InsertObject() を呼び出すと、操作後もソートされたリストがソートされたままになります。TStringList の Delphi ソースを調べたところ、私の主張が裏付けられたようです。
今のところ、InsertObject() をオーバーライドし、並べ替えられたリストで InsertObject() が呼び出された場合に例外をスローしない TStringList の新しいサブクラスを作成していますが、隠れた危険がないことを確認したいと考えています。見てないだけ。
-- ロシュラー