AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Variable nur in der unit sichtbar machen

Ein Thema von Andreas L. · begonnen am 23. Mai 2007 · letzter Beitrag vom 24. Mai 2007
Antwort Antwort
Seite 1 von 2  1 2      
Andreas L.
(Gast)

n/a Beiträge
 
#1

Variable nur in der unit sichtbar machen

  Alt 23. Mai 2007, 19:56
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:
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;
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?

bye,
Andy
  Mit Zitat antworten Zitat
Apollonius

Registriert seit: 16. Apr 2007
2.325 Beiträge
 
Turbo Delphi für Win32
 
#2

Re: Variable nur in der unit sichtbar machen

  Alt 23. Mai 2007, 20:01
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.
Wer erweist der Welt einen Dienst und findet ein gutes Synonym für "Pointer"?
"An interface pointer is a pointer to a pointer. This pointer points to an array of pointers, each of which points to an interface function."
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#3

Re: Variable nur in der unit sichtbar machen

  Alt 23. Mai 2007, 20:02
Es handelt sich hier aber um einen Member der Klasse TXSPF
Markus Kinzler
  Mit Zitat antworten Zitat
Apollonius

Registriert seit: 16. Apr 2007
2.325 Beiträge
 
Turbo Delphi für Win32
 
#4

Re: Variable nur in der unit sichtbar machen

  Alt 23. Mai 2007, 20:04
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?
Wer erweist der Welt einen Dienst und findet ein gutes Synonym für "Pointer"?
"An interface pointer is a pointer to a pointer. This pointer points to an array of pointers, each of which points to an interface function."
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#5

Re: Variable nur in der unit sichtbar machen

  Alt 23. Mai 2007, 20:07
Zeig mal die Methode.
Markus Kinzler
  Mit Zitat antworten Zitat
daddy

Registriert seit: 9. Sep 2005
Ort: Köln
124 Beiträge
 
Delphi 7 Enterprise
 
#6

Re: Variable nur in der unit sichtbar machen

  Alt 23. Mai 2007, 20:18
So wie ich das sehe, wirst Du Deiner Funktion "ADD" noch einen Parameter vom Typ "TTrackCollection" spendieren müssen.

Gruß Daddy
  Mit Zitat antworten Zitat
Andreas L.
(Gast)

n/a Beiträge
 
#7

Re: Variable nur in der unit sichtbar machen

  Alt 23. Mai 2007, 20:50
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.
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#8

Re: Variable nur in der unit sichtbar machen

  Alt 23. Mai 2007, 21:02
Wie gesagt benötigst du eine Instanz der Klasse

<Instanz von TXSPF>.FTrackCollection
Markus Kinzler
  Mit Zitat antworten Zitat
Andreas L.
(Gast)

n/a Beiträge
 
#9

Re: Variable nur in der unit sichtbar machen

  Alt 23. Mai 2007, 21:07
Und wie bekomme ich dann die Instanz?
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#10

Re: Variable nur in der unit sichtbar machen

  Alt 23. Mai 2007, 21:10
Delphi-Quellcode:
var
   ...
    XSPF: TXSPF ...
...

    XSPF := TXSPF.Create ( self);
Markus Kinzler
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:21 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz