Einzelnen Beitrag anzeigen

Blup

Registriert seit: 7. Aug 2008
Ort: Brandenburg
1.429 Beiträge
 
Delphi 10.4 Sydney
 
#5

AW: Bei Erzeugung einer eigenen Klasse knallts

  Alt 22. Mär 2013, 09:24
Verbesserungsvorschläge:
- Ich würde den Constructor zumindest public machen, schließlich ist der Standard-Constructor "create" auch public.
- Zur Verwaltung der einzelnen Tracks bietet sich die TObjectList an.
- Die Tracklist braucht auf jeden Fall einen Destructor, damit die einzelnen Tracks freigegeben werden, bzw. die TObjectList.
- Die einzelnen Property der Tracks in der Tracklist noch einmal zu veröffentlichen ist unnötig umständlich. Besser nur den Track veröffentlichen und beim Track die entsprechenden Property public.
Delphi-Quellcode:
type
  TTrack = class
  strict private
    FAlbum: String;
    FNumber: Integer;
    FTitle: String;
    FInterpret: String;
    FComposer: String;
    FGenre: String;
    FCategory: String;
    FDescription: String;

    FStartTime: Cardinal;
    FLengthInMilliseconds: Cardinal;
    FStreamPath: String;
    FStream: TStream;

    class var FTrackCount: Integer;
  private
    class property TrackCount: Integer read FTrackCount write FTrackCount;
  protected
    procedure SetStream(AStream; TStream);
  public
    constructor Create(Directory: String);

    property Album: String read FAlbum write FAlbum;
    property Number: Integer read FNumber write FNumber;
    property Title: String read FTitle write FTitle;
    property Interpret: String read FInterpret write FInterpret;
    property Composer: String read FComposer write FComposer;
    property Genre: String read FGenre write FGenre;
    property Category: String read FCategory write FCategory;
    property Description: String read FDescription write FDescription;

    property StartTime: Cardinal read FStartTime;
    property LengthInMilliseconds: Cardinal read FLengthInMilliseconds;
    property Stream: TStream read FStream;
    property StreamPath: String read FStreamPath;
  end;

  TTrackList = class
  private
    FTrackList: TObjectList;
    FTemporaryDirectory: String;

    FNumberOfChannels: Cardinal;
    FBitsPerSample: Cardinal;
    FSampleRate: Cardinal;

    procedure AddTrack();
    function GetTrack(TrackNumber: Integer): Track;
  public
    constructor Create(TemporaryDirectory: String);
    destructor Destroy; override; // <- FTrackList freigeben

    property NumberOfChannels: Cardinal read FNumberOfChannels;
    property BitsPerSample: Cardinal read FBitsPerSample;
    property SampleRate: Cardinal read FSampleRate;

    procedure MoveTrack(StartTrackNumber, EndTrackNumber: Integer);
    procedure DeleteTrack(TrackNumber: Integer);

    function GetLastTrackStream(): TStream;
    function GetLengthOfAllTracksInMilliseconds(): Cardinal;

    property Track[TrackNumber: Integer]: TTrack read GetTrack; default;
  end;


// Zugriff auf einzelne Property des Track
  TrackList[TrackNumber].Album
  Mit Zitat antworten Zitat