AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language StringList weiter reichen zur Eigentliche Klasse
Thema durchsuchen
Ansicht
Themen-Optionen

StringList weiter reichen zur Eigentliche Klasse

Ein Thema von mimi · begonnen am 30. Okt 2007 · letzter Beitrag vom 2. Nov 2007
Antwort Antwort
Seite 1 von 4  1 23     Letzte »    
mimi

Registriert seit: 1. Dez 2002
Ort: Oldenburg(Oldenburg)
2.008 Beiträge
 
FreePascal / Lazarus
 
#1

StringList weiter reichen zur Eigentliche Klasse

  Alt 30. Okt 2007, 17:43
Hallo,
ich möchte gerne wie im Titel schon beschrieben steht eine TStringList weiter reichen.

Am Anfang wird eine Variable aus der Haupt Klasse(TPlayListManger) mit einer ListBox1.Items
verbunden.

Jetzt Lade ich eine Datei und sie wird auch in der ListBox angezeigt.

Nun Möchte ich von einem Button Klick den Inhalt der Variable aus Klasse(TPlayListManger) anzeigen lassen.
Aber sie ist leer warum ?

Hier mal mein Soruce Code. Ich sehe einfach keinen Fehler. Oder verstehe ich das mit den Pointern falsch ?
Delphi-Quellcode:
TPlaylistenManger = class
    fOnAddPlayListe: TOnAddPlayliste;
    fOnGetPlayListeItem:TOnGetPlaylisteItem;
  private
    procedure InitPlaylist(const aFileName:String; var aPlayliste:TPlaylistBase);
  protected

  public
    _ext:string;
    FileName:String;
    PlayListItems:TStrings;
    OhneExt:Boolean;
    Playliste:TPlaylistBase;

    constructor Create;
    destructor Destroy;

....

procedure TPlaylistenManger.InitPlaylist(const aFileName: String;
  var aPlayliste: TPlaylistBase);
var
  ext:String;
begin
  ext:=UpperCase(ExtractFileExt(aFileName));
  if ext = '.M3Uthen aPlayliste:=TPlayListM3U.Create;
// if ext = 'PLS' then aPlayliste:=TPlayList.Create;
end;

// Hier lade ich eine M3U Datei
procedure TPlaylistenManger.LoadFromFile(const aFileName: String = '');
var
  i:integer;
begin
  InitPlaylist(ExtractFileName(aFileName),Playliste);

  Playliste.OhneExt:=OhneExt;
  Playliste.PlayListItems:=PlayListItems;
  Playliste.LoadFromFile(aFileName);

// PlayListItems.Assign(Playliste.PlayListItems);

  _ext:=Playliste.ext;

end;

procedure TPlayListM3U.LoadFromFile(const aFileName: String);
var
  tmp:TStrings;
  i,m:Integer;
  str:String;
  Item:TInfo;
begin
  tmp:=TStringList.Create;
  with tmp do begin
    LoadFromFile(aFileName); m:=0;
    if UpperCase(Strings[0]) = '#EXTM3Uthen begin
      m:=1;
      ext:='#EXTM3U';
    end
    else
      ext:='';
    
    i:=m;
    while i <= Count-1 do begin
      str:=strings[i]; Item:=TInfo.Create;

      if (str <> '') and (str[1] = '#') then begin
        Item.Kometar:=str;
        Item.FileName:=strings[i+1];
        if OhneExt then
          PlayListItems.AddObject(SplitStr(ExtractFileName(Item.FileName),'.'),Item)
        else
          PlayListItems.AddObject(ExtractFileName(Item.FileName),Item);

        inc(i,2);
      end
      else begin
        if (str <> '') and (str[1] <> '#') then begin
          Item.Kometar:='';
          Item.FileName:=strings[i];
          if OhneExt then
            PlayListItems.AddObject(SplitStr(ExtractFileName(Item.FileName),'.'),Item)
          else
            PlayListItems.AddObject(ExtractFileName(Item.FileName),Item);

          inc(i);
        end;
      end;
    end; // for i:=0
  end; // tmp
  tmp.free;
end;
Ich hoffe da steigt einer von euch durch. Im Prinzip ist das ein ganz einfacher Weg. Aber irgendwo in diesen Methoden muss ein Fehler sein.

... Vielen Dank schonmal für eure Hilfe ....

Edit00: In dieser Version, werden alle Daten angezeigt. Nur wenn ich in einem Button von From1 jetzt die alle Items anzeigen möchte, steht in der StringList:
PlayListeManger.PlayListItems.Text
nix drin.
obwohl PlayListeManger Global Definiert ist.
Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
begin
  PlayListeManger:=TPlaylistenManger.Create;
  PlayListeManger.PlayListItems:=ListBox1.Items;
  PlayListeManger.LoadFromFile('/media/hda7/Daten/music/entspannung.m3u');
// :=;

end;
Michael Springwald
MFG
Michael Springwald,
Bitte nur Deutsche Links angeben Danke (benutzte überwiegend Lazarus)
  Mit Zitat antworten Zitat
Muetze1
(Gast)

n/a Beiträge
 
#2

Re: StringList weiter reichen zur Eigentliche Klasse

  Alt 30. Okt 2007, 17:54
Im LoadFromFile() übernimmst du die Instanz der TStrings-Instanz von einem anderen Control anstatt dir in deinem PLaylistmanager selber eine im Constructor anzulegen (im Destructor freizugeben) und über eine Property zu veröffentlichen. Dabei im Setter die Assign() Methode nutzen, um deine Instanz zu schützen.
  Mit Zitat antworten Zitat
mimi

Registriert seit: 1. Dez 2002
Ort: Oldenburg(Oldenburg)
2.008 Beiträge
 
FreePascal / Lazarus
 
#3

Re: StringList weiter reichen zur Eigentliche Klasse

  Alt 30. Okt 2007, 18:31
ich kann die leider nicht so ganz folgen......

per Assign() habe ich das auch schon versucht....
Michael Springwald
MFG
Michael Springwald,
Bitte nur Deutsche Links angeben Danke (benutzte überwiegend Lazarus)
  Mit Zitat antworten Zitat
Muetze1
(Gast)

n/a Beiträge
 
#4

Re: StringList weiter reichen zur Eigentliche Klasse

  Alt 30. Okt 2007, 19:38
Delphi-Quellcode:
type
  TPlaylistenManager = class
  private
    fPlayListItems: TStrings;

    procedure SetPlaylistItems(const AValue: TStrings);

  public
    constructor Create;
    destructor Destroy; override; // <--- override vergessen!!!

    property PlaylistItems: TStrings read fPlaylistItems write SetPlaylistItems;
  end;

...

constructor TPlaylistenManager.Create;
begin
  inherited;

  fPlaylistItems := TStringList.Create;
end;

destructor TPlaylistenManager.Destroy;
begin
  fPlaylistItems.Free;
  
  inherited;
end;

procedure TPlaylistenManager.SetPlaylistItems(const AValue: TStrings);
begin
  fPlaylistItems.Assign(AValue); // <<-- damit du dir nicht deine eigene Instanz von aussen überschreiben lässt!!
end;
  Mit Zitat antworten Zitat
mimi

Registriert seit: 1. Dez 2002
Ort: Oldenburg(Oldenburg)
2.008 Beiträge
 
FreePascal / Lazarus
 
#5

Re: StringList weiter reichen zur Eigentliche Klasse

  Alt 30. Okt 2007, 22:03
VIELEN DANK für den code,
doch leider wird jetzt die Playliste nicht mehr in der ListBox Angezeigt.

Ich habe deinen Code genau so übernommen, wie du ihn vorgeschlagen hast.

Dafür kann ich jetzt von ausen auf PlayListItems
zugreifen. Ich wollte eigentlich die Listbox mit der Eigenschaft: PlayListItems verbinden. so das sie gleich bedeutet sind.
Michael Springwald
MFG
Michael Springwald,
Bitte nur Deutsche Links angeben Danke (benutzte überwiegend Lazarus)
  Mit Zitat antworten Zitat
Muetze1
(Gast)

n/a Beiträge
 
#6

Re: StringList weiter reichen zur Eigentliche Klasse

  Alt 30. Okt 2007, 22:12
Warum weist du nicht nach dem Laden einfach deine Playlistitems wieder der Listbox.items zu? Damit aktualisierst du diese. Man sollte eh Oberfläche und Daten trennen und genau das haben wir dann entsprechend getan.
  Mit Zitat antworten Zitat
mimi

Registriert seit: 1. Dez 2002
Ort: Oldenburg(Oldenburg)
2.008 Beiträge
 
FreePascal / Lazarus
 
#7

Re: StringList weiter reichen zur Eigentliche Klasse

  Alt 30. Okt 2007, 22:30
naja, ich wollte die Listbox1.items nur einmal zuweisen und nicht nach jeder Änderung.

Das müsste doch gehen oder nicht ?

Ich möchte das PlaylistItems von der PlaylistManger Classe nur auf Listbox1.Items zeigt.
und wenn ich intern auf PlaylistItem zugreife z.b. um ein Eintrag auszugeben, dann müsste ich doch eigentlich ListBox1.Items ansprechenden oder nicht ?

Wenn das nicht geht, müsste ich ein Event dazu packen, dann währe das aber mehr Aufwand .

Ich wollte die Verwendung so einfach wie nur möglich machen.
Michael Springwald
MFG
Michael Springwald,
Bitte nur Deutsche Links angeben Danke (benutzte überwiegend Lazarus)
  Mit Zitat antworten Zitat
Muetze1
(Gast)

n/a Beiträge
 
#8

Re: StringList weiter reichen zur Eigentliche Klasse

  Alt 30. Okt 2007, 23:28
Nein, wenn du es wirklich so machen willst, dann war dein erster Code genau der richtige. Beachte dabei aber, dass du mit der Klasse nicht mehr auf die Instanz zugreifst, wenn die Listbox nicht mehr existiert etc.
  Mit Zitat antworten Zitat
mimi

Registriert seit: 1. Dez 2002
Ort: Oldenburg(Oldenburg)
2.008 Beiträge
 
FreePascal / Lazarus
 
#9

Re: StringList weiter reichen zur Eigentliche Klasse

  Alt 30. Okt 2007, 23:33
Genau dieser Code geht ja nicht.
Im Prinzip möchte ich ein mischmasch von deinem code und meinem.

Ich möchte auf PlaylistItems von der Klasse TPlaylistManger zugreifen können und von der Listbox aus.

und das geht mit meinem Code leider nicht. und ich weiß nicht warum.

jedes mal wenn ich versuche nach dem Laden auf PlaylistItems zuzugreifen ist die liste leer. Was aber gar nicht sein dürfte, da sie ja mit der von der Listbox verbunden ist.
Michael Springwald
MFG
Michael Springwald,
Bitte nur Deutsche Links angeben Danke (benutzte überwiegend Lazarus)
  Mit Zitat antworten Zitat
Muetze1
(Gast)

n/a Beiträge
 
#10

Re: StringList weiter reichen zur Eigentliche Klasse

  Alt 31. Okt 2007, 01:11
Zitat von mimi:
jedes mal wenn ich versuche nach dem Laden auf PlaylistItems zuzugreifen ist die liste leer. Was aber gar nicht sein dürfte, da sie ja mit der von der Listbox verbunden ist.
Zuweisen tust du die Listbox.Items in der Klasse TPlaylistenManager. Laden tust du wiederrum in der Klasse TPlayListM3U. Deren Implementation und Zuweisungen bzw. wovon sie abgeleitet ist, wurde nicht geklärt...

Und korrigiere das schon vorhin von mir im Code angesprochene Override beim Destruktor!
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 4  1 23     Letzte »    


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 01:17 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