Ребят, подскажи как сделать свою коллекцию со вставкой, добавление и удалением. Прост никогда не работал с коллекциями.
Код:
type
TTrack = class(TCollectionItem)
private
FId: integer;
FOwner: integer;
FTitle: string;
FArtist: string;
FUrl: string;
FDuration: integer;
public
property Id: integer read FId write FId;
property Owner: Integer read FOwner write FOwner;
property Title: string read FTitle write FTitle;
property Artist: string read FArtist write FArtist;
property Url: string read FUrl write FUrl;
property Duration: integer read FDuration write FDuration;
constructor create(Collection: TCollection); override;
destructor destroy; override;
end;
TTrackList = class(TCollection)
private
function GetItem(Index: Integer): TTrack;
procedure SetItem(Index: integer; const Value: TTrack);
public
function Add: TTrack;
function Insert(Index: Integer; value: TTrack): TTrack;
procedure Delete(Index: Integer);
property Item[Index: Integer]: TTrack read GetItem write SetItem; default;
end;
constructor TTrack.create(Collection: TCollection);
begin
inherited Create(Collection);
FTitle := '';
FArtist := '';
FUrl := '';
FDuration := 0;
FId := 0;
FOwner := 0;
end;
destructor TTrack.destroy;
begin
FTitle := '';
FArtist := '';
FUrl := '';
FDuration := 0;
FId := 0;
FOwner := 0;
inherited destroy;
end;
function TTrackList.Add: TTrack;
begin
result := TTrack(inherited Add);
{Result.Id := id;
Result.Owner := owner;
Result.Title := title;
Result.Artist := artist;
Result.Url := url;
Result.Duration := duration; }
end;
function TTrackList.GetItem(Index: Integer): TTrack;
begin
result := inherited Items[Index] as TTrack;
end;
procedure TTrackList.SetItem(Index: Integer; const Value: TTrack);
begin
inherited SetItem(index, value);
end;
{procedure TTrackList.Insert(Index: Integer; value: TTrack);
begin
result := inherited Insert(Index, value);
end; }
procedure TTrackList.Delete(Index: Integer);
begin
inherited Delete(Index);
end;
Код:
procedure TForm1.Button1Click(Sender: TObject);
var
Tracks: TTrackList;
Track: TTrack;
i: integer;
begin
Tracks := TTrackList.Create(nil);
for i := 0 to 5 do begin
Track := Tracks.Add; //ошибка вылетает при добавлении
Track.Id := Random(100);
end;
for i := 0 to 5 do begin
ListBox1.Items.Add(IntToStr(Tracks.Item[i].Id));
end;
end;
Причем в разных источниках по разному, но у меня все равно не работает