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 3 von 4     123 4      
Muetze1
(Gast)

n/a Beiträge
 
#21

Re: StringList weiter reichen zur Eigentliche Klasse

  Alt 31. Okt 2007, 17:39
So, habe das ganze getestet und klappt alles einwandfrei. Ich habe das komplette (Delphi) Projekt angehangen. Die Konsolenanwendung sollte sich leicht zu Lazarus umsetzen lassen. Zur Not kann ich das sonst auch noch machen.

Ich habe B'n'D noch mal schnell aus den M3U extendend info Einträgen die Spielzeit mit ausgelesen und gebe diese mit aus. Die Ausgabe des Programmes ist doppelt. Einmal die Ausgabe von deiner Laderoutine und einmal die von der Main Procedure im Projectfile (diese ist dann mit Spieldauer).

Die M3U muss als Parameter mitgegeben werden.
Angehängte Dateien
Dateityp: zip playlisten_neu2_191.zip (169,0 KB, 5x aufgerufen)
  Mit Zitat antworten Zitat
mimi

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

Re: StringList weiter reichen zur Eigentliche Klasse

  Alt 31. Okt 2007, 17:58
Zitat:
Ok, das widerspricht ja nicht meiner Anpassung, schliesslich kann der Manager schauen ob sein Aufruf mit '' war und entsprechend den internen Filename weiterreichen zu der Playlist Instanz.
Naja, ich wollte schon eine gewisse Freiheit haben, wenn man die Methode benutzt.

Zitat:
Aber zu deinem Problem: Du rufst InitPlaylist() o.ä. im Manager auch vor dem Speichern auf. Dadurch legst du eine neue Instanz an. Rufst du vllt. das Speichern auf?
Ja, weil ich auch die Möglichkeit haben wollte eine m3u Datei in eine pls Datei umzuwandeln.
und das geht meiner meinung nach nur so.

Ich habe mir in deinem Beispiel Projekt die dpr angeschaut, aber so habe ich mir das eigentlich nicht vorgestellt:
Delphi-Quellcode:
 lList := TStringList.Create;

  try



    PLM := TPlaylistenManger.Create;

    try

      PLM.PlaylistItems := lList;



      PLM.LoadFromFile(ParamStr(1));



    finally

      PLM.Free;

    end;
warum gibst du hier PLM wieder frei ? Ich möchte ihn ja später noch verwenden.
Trotzdem, vielen Dank für deine Hilfe.

Wie könnte ich mein Problem noch beschreiben, damit du es verstehst ?

Also nochmal:
Ich erstelle in meine From1.pas eine Variable von Typ TPlaylistenManger und die heißt PlayListeManger.

Beim erstellen von From1 also im OnCreate Event. verknüpfe ich die TStrings von ListBox1.items mit
"PlayListeManger.PlaylistItems" das das sie gleich sind.

Beim Laden wieder hole ich das im Prinzip wieder:
Dort verknüpfe ich bei der Angebenden Playliste.
Wenn ich jetzt bei TPlayListM3U auf PlaylistItems zugreife müsste ich doch jetzt eigentlich die Listbox1.Items ansprechen, oder nicht ?

und genau hier kommt es zu einem Fehler. Aber ich weiß nicht wo.

Ich könnte es nur mit einem Event lösen. Aber das finde ich blöd.. weil das mehr Aufwand bedeuten würde.

Edit: Wenn ich jetzt intern von einer anderen Procedure aus auf "PlayListeManger.PlayListItems
zugreife ist diese einfach leer. Die Listbox ist aber gefüllt. Sollte die "Verbindung" aufgehoben wurden sein ?
Michael Springwald
MFG
Michael Springwald,
Bitte nur Deutsche Links angeben Danke (benutzte überwiegend Lazarus)
  Mit Zitat antworten Zitat
mimi

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

Re: StringList weiter reichen zur Eigentliche Klasse

  Alt 31. Okt 2007, 18:04
Das Seltsamme ist, so wird die richtige anzahl ausgeben.
Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
begin
  PlayListeManger:=TPlaylistenManger.Create;
  PlayListeManger.PlayListItems:=ListBox1.Items;
  PlayListeManger.LoadFromFile('/media/hda7/Daten/music/entspannung.m3u');
  writeln(PlayListeManger.PlaylistItems.Count);
end;

// So aber nicht wird nur 0 Ausgeben.
procedure TForm1.SpeedButton5Click(Sender: TObject);
begin
  writeln(PlayListeManger.PlaylistItems.Count);
end;
Die Listbox ist aber gefüllt.
Michael Springwald
MFG
Michael Springwald,
Bitte nur Deutsche Links angeben Danke (benutzte überwiegend Lazarus)
  Mit Zitat antworten Zitat
Muetze1
(Gast)

n/a Beiträge
 
#24

Re: StringList weiter reichen zur Eigentliche Klasse

  Alt 31. Okt 2007, 18:45
Zitat von mimi:
Ja, weil ich auch die Möglichkeit haben wollte eine m3u Datei in eine pls Datei umzuwandeln.
und das geht meiner meinung nach nur so.
Aber damit überschreibst du dir die in fPlaylist vorhandene Instanz. Diese geht verloren (existiert immernoch, nur du kannst nirgendwo mehr drauf zugreifen). Die neue Instanz ist dann wieder komplett ohne Infos, Einstellungen, etc.

Und es geht noch anders. Du kannst dir, um in einem anderen Playlistenformat zu exportieren, dir einfach in der Playlisten-Basisklasse eine Methode bauen, welche die Titelinformationen aus einer anderen Playlisten-Basisklasse übernimmt. Somit sieht dein Export im Playlistenmanager so aus: (Pseudocode):

Code:
Export(AFileName, AType)
var
  lExportPlaylist: TBasePLaylist;
begin
  lExportPlaylist := CreatePlaylist(AType);
  try
    lExportPlaylist.ÜbernehmeTitel( fPlaylist );

    lExportPlaylist.SaveToFile( AFilename );
  finally
    lExportPlaylist.Free;
  end;
end;
Zitat von mimi:
warum gibst du hier PLM wieder frei ? Ich möchte ihn ja später noch verwenden.
Das ist die Hauptprocedure des Programmes. Dort erstelle ich den PLM, nutze ihn (in dem ich die Playlist lade & ausgebe) und danach gebe ich ihn wieder frei, da am Ende dieser Procedure auch das Programm zu Ende ist. Dabei ist es doch völligst unerheblich wie du das implementieren möchtest. Du kannst doch genauso das anlegen des PLM im OnCreate machen, das Laden im OnClick und das freigeben im OnDestroy. Wo sollte dort der Unterschied liegen?

Zitat von mimi:
Dort verknüpfe ich bei der Angebenden Playliste.
Der PLM hat dann schon die angebene Instanz von der Listbox. Warum reicht er diese nicht einfach nur weiter an die Playlistinstanz die er selber anlegt?

Zitat von mimi:
Wenn ich jetzt bei TPlayListM3U auf PlaylistItems zugreife müsste ich doch jetzt eigentlich die Listbox1.Items ansprechen, oder nicht ?
Ja, so lange es immernoch die selbe/gleiche Instanz ist. Wenn du zwischendurch (also zwischen der ersten Zuweisung des TStrings Objektes und dem jetzigen Zugriff z.B. wieder InitPlaylist() aufrufst, dann ist es eine andere Instanz - und die hat dann nicht mehr die TStrings Instanz sondern nil. Da es eine komplett andere Instanz ist.

Zitat von mimi:
und genau hier kommt es zu einem Fehler. Aber ich weiß nicht wo.
Debuggen! Der Debugger von Lazarus ist sehr gut nutzbar und hilfreich. Auch ein Breakpoint in der SetPlaylistItems des PLM etc würde vllt. zu mehr Erkenntnissen führen, weil dieser vllt. öfters und vllt. mit anderen Instanzen aufgerufen wird.

Zitat von mimi:
Die Listbox ist aber gefüllt.
Dann hast du immernoch irgendwo ein unnötige TStringList.Create drin und/oder weist der TPLaylistM3U Instanz eine andere Instanz zu, als die, welcher der PDM in fPlaylistItems hat.
  Mit Zitat antworten Zitat
mimi

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

Re: StringList weiter reichen zur Eigentliche Klasse

  Alt 31. Okt 2007, 19:36
um umwandeln: Nein, dein code ist mir zu aufwendig.
da gebe ich lieber Playliste beim Speichern einfach wieder frei, wenn es belegt.

Ich habe den Code mehrfach geprüft und konnte keinen Fehler Feststellen.

Naja, evlt. finde ich den Fehler noch.
Michael Springwald
MFG
Michael Springwald,
Bitte nur Deutsche Links angeben Danke (benutzte überwiegend Lazarus)
  Mit Zitat antworten Zitat
mimi

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

Re: StringList weiter reichen zur Eigentliche Klasse

  Alt 31. Okt 2007, 19:47
Wenn ich das was ich bei onCreate im From1 drin stehen habe, in einem Button Verschiebe und klicke dann geht das alles wie ich es mir Vorgestellt habe.

Aber wie kann das angehen ?
Michael Springwald
MFG
Michael Springwald,
Bitte nur Deutsche Links angeben Danke (benutzte überwiegend Lazarus)
  Mit Zitat antworten Zitat
mimi

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

Re: StringList weiter reichen zur Eigentliche Klasse

  Alt 31. Okt 2007, 19:52
Wenn ich das so habe, wird das Memo gefüllt:
Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
begin
  PlayListeManger:=TPlaylistenManger.Create;
  PlayListeManger.PlayListItems:=ListBox1.Items;
end;
und nicht die Listbox. Ich denke das es sich hierbei um einen Lazarus BUG handeln muss.

Ich glaube ich sollte die Frage noch mal im Lazarus-Forum stellen.

Vielen Dank, für deine Mühevolle Hilfe.
Michael Springwald
MFG
Michael Springwald,
Bitte nur Deutsche Links angeben Danke (benutzte überwiegend Lazarus)
  Mit Zitat antworten Zitat
Muetze1
(Gast)

n/a Beiträge
 
#28

Re: StringList weiter reichen zur Eigentliche Klasse

  Alt 31. Okt 2007, 20:01
1. Es gibt da oben rechts bei deinen Einträgen einen recht nützlichen "EDIT" Button.

2.
Zitat von mimi:
um umwandeln: Nein, dein code ist mir zu aufwendig.
Was ist daran aufwendig? Vor allem ist es OOP!

3.
Zitat von mimi:
Wenn ich das so habe, wird das Memo gefüllt und nicht die Listbox. Ich denke das es sich hierbei um einen Lazarus BUG handeln muss.
Es ist definitv kein BUG von Lazarus sondern recht eindeutig ein Bug von dir. Du weist irgendwo der Instanz die Items auf die Lines Eigenschaft des Memos selber zu. Lazarus denkt sich das nicht aus und es mehr ein fast unmöglicher Zufall, dass es die Lines Eigenschaft des Memos anstatt der Listbox ist. Und ich glaube nicht an Zufälle - und ich kann dir versichern, dass dies auch keiner ist.
  Mit Zitat antworten Zitat
mimi

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

Re: StringList weiter reichen zur Eigentliche Klasse

  Alt 1. Nov 2007, 12:23
Zitat:
Du weist irgendwo der Instanz die Items auf die Lines Eigenschaft des Memos selber zu
Nein das tue ich mit 100%iger Sicherheit nirgends, warum auch ?

Da du dich anscheind mit Lazarus auskennst, habe ich mal das gesammte Projekt Angehangen

ich glaube ja auch das es mein Fehler ist, aber so langsam glaube ich das liegt gar nicht an mir. Nach dem was ich gestern gesehen habe. Ich verwende Memo1 nur einmal und das ist beim Klicken. auf die Listbox.

zu1: ist mir bekannt.....

edit:
Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
begin
  PlayListeManger:=TPlaylistenManger.Create;
  PlayListeManger.PlayListItems:=Memo1.Lines;
end;
Wenn ich das Memo1 direkt zuweise, hängt sich das Programm beim ausführen auf.
Ich vermute es liegt ein Pointer Problem vor, was direkt oder indirekt mit Lazarus zu tun hat.
Evlt. werde ich es mal unter Delphi testet, wie es sich dort verhält. Wenn es da klappt, dann ist es doch beweisen, das es ein Lazarus Problem ist oder ?
Angehängte Dateien
Dateityp: zip playlisten_238.zip (95,0 KB, 5x aufgerufen)
Michael Springwald
MFG
Michael Springwald,
Bitte nur Deutsche Links angeben Danke (benutzte überwiegend Lazarus)
  Mit Zitat antworten Zitat
Muetze1
(Gast)

n/a Beiträge
 
#30

Re: StringList weiter reichen zur Eigentliche Klasse

  Alt 1. Nov 2007, 12:53
Zitat von mimi:
Zitat von Muetze1:
Du weist irgendwo der Instanz die Items auf die Lines Eigenschaft des Memos selber zu
Nein das tue ich mit 100%iger Sicherheit nirgends, warum auch ?
Aber genau in dem von dir geposteten Quellcode weist doch der PlaylistenManager-Eigenschaft Memo1.Lines (wie ich es sagte) zu, und genau diese Eigenschaft weist du doch den PlaylistItems der TBasePlaylist zu. Somit nutzt er das Memo1. Vollkommen logisch und wie ich behauptet hatte.

Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
begin
  PlayListeManger:=TPlaylistenManger.Create;
  PlayListeManger.PlayListItems:=Memo1.Lines; // <<< Ich denke du willst ListBox.Items und nicht Memo1.Lines
                                                // genau davon habe ich geredet...
end;
Zitat von mimi:
Wenn ich das Memo1 direkt zuweise, hängt sich das Programm beim ausführen auf.
Diese Zuweisung sollte der Compiler nichtmal akzeptieren ohne harten Typecast, da du schliesslich nicht kompatible Typen zuweisen willst. Und das es abstürzt ist mehr als logisch, schliesslich ist ein TStrings-Derivat was anderes als ein TMemo.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 3 von 4     123 4      


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 12:54 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