![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
|||
|
|||
|
Ребят, подскажи как сделать свою коллекцию со вставкой, добавление и удалением. Прост никогда не работал с коллекциями.
Код:
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; Причем в разных источниках по разному, но у меня все равно не работает |
|
#2
|
||||
|
||||
|
Код:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TRSSChannelItem = class(TCollectionItem)
private
FTitle: String;
FLink: String;
FDescription: String;
public
property Title: String read FTitle write FTitle;
property Link: String read FLink write FLink;
property Description: String read FDescription write FDescription;
constructor Create(Collection: TCollection); override;
destructor Destroy; override;
end;
TRSSChannel = class(TCollection)
private
function GetItem(Index: Integer): TRSSChannelItem;
procedure SetItem(Index: Integer; Value: TRSSChannelItem);
public
property Items[Index: Integer]: TRSSChannelItem read GetItem write SetItem; default;
constructor Create(ItemClass: TCollectionItemClass);
function Add: TRSSChannelItem;
function Insert(Index: Integer): TRSSChannelItem;
end;
TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
FRSSChannel: TRSSChannel;
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
{ TRSSChannelItem }
constructor TRSSChannelItem.Create(Collection: TCollection);
begin
inherited Create(Collection);
FTitle:='';
FLink:='';
FDescription:='';
end;
destructor TRSSChannelItem.Destroy;
begin
inherited Destroy;
end;
{ TRSSChannel }
constructor TRSSChannel.Create(ItemClass: TCollectionItemClass);
begin
inherited Create(ItemClass);
end;
function TRSSChannel.GetItem(Index: Integer): TRSSChannelItem;
begin
Result:=TRSSChannelItem(inherited GetItem(Index));
end;
procedure TRSSChannel.SetItem(Index: Integer; Value: TRSSChannelItem);
begin
inherited SetItem(Index, Value);
end;
function TRSSChannel.Add: TRSSChannelItem;
begin
Result:=TRSSChannelItem(inherited Add);
end;
function TRSSChannel.Insert(Index: Integer): TRSSChannelItem;
begin
Result:=TRSSChannelItem(inherited Insert(Index));
end;
{ TForm1 }
procedure TForm1.FormCreate(Sender: TObject);
begin
FRSSChannel:=TRSSChannel.Create(TRSSChannelItem);
end;
procedure TForm1.FormDestroy(Sender: TObject);
begin
FRSSChannel.Free;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
with FRSSChannel.Add do
begin
Title:=IntToStr(GetTickCount);
Link:='http://';
Description:=IntToStr(Random(100));
end;
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
if FRSSChannel.Count>0 then
begin
with FRSSChannel.Items[0] do
ShowMessage(Title+#13#10+Link+#13#10+Description);
FRSSChannel.Delete(0);
end;
end;
end. |
|
#3
|
|||
|
|||
|
я objectlist-ы использовал из модуля contnrs(если не ошибся)
типа того: PHP код:
если у objectlist свойство ownsobjects(вроде бы) не поменять он ещё и освобождать объекты при удалении будет Последний раз редактировалось Pyro, 31.10.2011 в 14:35. |