選択した行を内の1つのインデックスの上または下に移動するMoveItemUpメソッドとMoveItemDownメソッドを実装しようとしていTCollection
ます。
TCollectionのサブクラスに追加された次のコードは機能しません。
procedure TMyCollection.MoveRowDown(index: Integer);
var
item:TCollectionItem;
begin
if index>=Count-1 then exit;
item := Self.Items[index];
Self.Delete(index); // whoops this destroys the item above.
Self.Insert(index+1);
Self.SetItem(index+1,item); // this actually does an assign from a destroyed object.
end;
リスト内のコレクションアイテムを並べ替える方法を提供するDelphiIDE自体によって設計時に行われるため、これは実行時に可能である必要があると確信しています。オブジェクトを作成、破棄、または割り当てずに、既存のオブジェクトを並べ替えるだけでこれを実行したいと考えています。これは、Classes.pas TCollectionのサブクラスから可能ですか?(そうでない場合は、ソースクローンから独自のTCollectionを作成する必要がある場合があります)