![]() |
Variable nur in der unit sichtbar machen
Hi,
wenn ich eine Variable im protected-Teil meiner Komponente deklariere kann diese ja auch von anderen Komponenten und Routinen die in dieser Unit enthalten sind verwendet werden. Dachte ich jedenfalls. So sieht mein Code aus:
Delphi-Quellcode:
Wenn ich jetzt in function TTracks.add(Track: TTrack):Integer; auf FTrackCollection zugreifen möchte, meldet der Compiler "[Pascal Fehler] XSPF.pas(89): E2003 Undefinierter Bezeichner: 'FTrackCollection'". Doch warum?
type
TTrack = record ... ... end; TTrackCollection = Array of TTrack; type TTracks = class(TComponent) public function Add(Track: TTrack):Integer; end; type TXSPF = class(TComponent) private FOptions: TOptions; FFilename: String; FTracks: TTracks; protected FTrackCollection: TTrackCollection; public property Tracks: TTracks read FTracks; published constructor Create(AOwner: TComponent); override; property Options: TOptions read FOptions write FOptions; property Filename: String read FFilename write FFilename; end; bye, Andy |
Re: Variable nur in der unit sichtbar machen
Was ist denn, wenn du mehrere Instanzen von TXSPF hast? Soll sich das Programm dann die Instanz aussuchen, die ihm am besten gefällt und daraus die FTrackColllection nehmen? Entweder du gibst eine Instanz an oder du leitest ab. Denn ein protected field ist keine globale Variable.
|
Re: Variable nur in der unit sichtbar machen
Es handelt sich hier aber um einen Member der Klasse TXSPF
|
Re: Variable nur in der unit sichtbar machen
Wir reden hier doch über TTracks.add? Wie soll denn eine Methode auf ein Feld einer Klasse, die nichts mit der eigenen Klasse zu tun hat, zugreifen?
|
Re: Variable nur in der unit sichtbar machen
Zeig mal die Methode.
|
Re: Variable nur in der unit sichtbar machen
So wie ich das sehe, wirst Du Deiner Funktion "ADD" noch einen Parameter vom Typ "TTrackCollection" spendieren müssen.
Gruß Daddy |
Re: Variable nur in der unit sichtbar machen
Hier die ganze Unit:
Delphi-Quellcode:
unit XSPF;
interface uses SysUtils, Classes; type TOptions = set of (opAllowUrls, opAllowRelativePaths, opAllowLocalFiles); type TTrack = record Location: String; //filename (also relative) or url, see TOptions Identifier: String; //file hash, etc... Title: String; Creator: String; //artist Annotation: String; //comment Info: String; //homepage for more informations Image: String; //e. g. a cover. URL or filename required Album: String; TrackNum: Integer; //track number/position in the playlist or on the cd Duration: Integer; //length in miliseconds end; TTrackCollection = Array of TTrack; type TTracks = class(TComponent) public function Add(Track: TTrack):Integer; end; type TXSPF = class(TComponent) private FOptions: TOptions; FFilename: String; FTracks: TTracks; protected FTrackCollection: TTrackCollection; public property Tracks: TTracks read FTracks; published constructor Create(AOwner: TComponent); override; property Options: TOptions read FOptions write FOptions; property Filename: String read FFilename write FFilename; end; procedure Register; implementation {$R 'TXSPF.dcr'} procedure Register; begin RegisterComponents('CapSystems', [TXSPF]); end; constructor TXSPF.Create(AOwner: TComponent); begin inherited Create(AOwner); FOptions := [opAllowUrls, opAllowRelativePaths, opAllowLocalFiles]; FFilename := ''; SetLength(FTrackCollection, 0); end; function TTracks.Add(Track: TTrack):Integer; begin if Length(FTrackCollection) <> 0 then begin SetLength(FTrackCollection, Length(FTrackCollection) + 1); end; FTrackCollection[Length(FTrackCollection)] := Track; Result := Length(FTrackCollection); end; end. |
Re: Variable nur in der unit sichtbar machen
Wie gesagt benötigst du eine Instanz der Klasse
Delphi-Quellcode:
<Instanz von TXSPF>.FTrackCollection
|
Re: Variable nur in der unit sichtbar machen
Und wie bekomme ich dann die Instanz?
|
Re: Variable nur in der unit sichtbar machen
Delphi-Quellcode:
var
... XSPF: TXSPF ... ... XSPF := TXSPF.Create ( self); |
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:53 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz