![]() |
StringList weiter reichen zur Eigentliche Klasse
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:
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.
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 = '.M3U' then 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]) = '#EXTM3U' then 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; ... 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; |
Re: StringList weiter reichen zur Eigentliche Klasse
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.
|
Re: StringList weiter reichen zur Eigentliche Klasse
ich kann die leider nicht so ganz folgen......
per Assign() habe ich das auch schon versucht.... |
Re: StringList weiter reichen zur Eigentliche Klasse
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; |
Re: StringList weiter reichen zur Eigentliche Klasse
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. |
Re: StringList weiter reichen zur Eigentliche Klasse
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.
|
Re: StringList weiter reichen zur Eigentliche Klasse
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. |
Re: StringList weiter reichen zur Eigentliche Klasse
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.
|
Re: StringList weiter reichen zur Eigentliche Klasse
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. |
Re: StringList weiter reichen zur Eigentliche Klasse
Zitat:
Und korrigiere das schon vorhin von mir im Code angesprochene Override beim Destruktor! |
Re: StringList weiter reichen zur Eigentliche Klasse
das mit Override habe ich schon.
Du meinst es könnte damit was zu tun habe, da nirgend geklärt ist das es sich um eine TStringList handelt ? sondern "nur" um eine TStrings ? Aber auch als das klar war, hat es nicht geklappt. Ich habe im Create ja schonmal gesagt, das es sich um eine TStringList handelt und alle Items manuel per addObject hinzugefügt, klappte aber auch nicht. |
Re: StringList weiter reichen zur Eigentliche Klasse
wenn ich das so habe:
Delphi-Quellcode:
sehe ich was in der Listbox und die Writeln Meldung wird ausgeben.
procedure TPlaylistenManger.SetPlaylistItems(const AValue: TStrings);
begin //fPlaylistItems.Assign(AValue); fPlaylistItems:=TStringList(AValue); end; procedure TPlaylistenManger.LoadFromFile(const aFileName: String = ''); var i:integer; begin InitPlaylist(ExtractFileName(aFileName),Playliste); Playliste.OhneExt:=OhneExt; Playliste.PlayListItems:=TStringlist(PlayListItems); Playliste.LoadFromFile(aFileName); writeln(PlayListItems.text); // PlayListItems.Assign(Playliste.PlayListItems); _ext:=Playliste.ext; end; Das Problem jedoch sobald ich versuche von einer anderen Procedure aus auf PlayListItems.Text zuzugreifen, ist diese Leer. Aber genau das ist gerade für mein vorhaben wichtig. Das das nicht so ist. |
Re: StringList weiter reichen zur Eigentliche Klasse
Nein, TStrings reicht. Der Typecast ist unsinnig und braucht nicht getan werden im Constructor sowie im LoadFromFile().
Meine Frage zu dem Code: Was ist "Playliste" für ein Typ und was macht er mit PlayListItems? |
Re: StringList weiter reichen zur Eigentliche Klasse
Ich habe mir das so gedacht:
Ich verbinde die TStrings von der Playlistmanger klasse z.b. mit der Listbox.Items. Jetzt lade ich eine Playliste - meiner wahl z.b. eine m3u(später sollen noch mehr folgen), anhand der Datei Endung wird der Playlisten Typ in der Procedure InitPlaylist Ermittelt und gesetzt. In der TPlayListM3U.LoadFromFile soll PlayListenItems(von typ TStrings) gefült werden. dazu wird er von TPlaylistenManger.LoadFromFile gesetzt. Playliste ist von typ TPlaylistBase das kann im Moment nur eine TPlayListM3U sein. Alle Playlisten müssen von TPlaylistBase abgeleitet werden. TPlaylistBase stellt im wesentlichen zwei Methoden zuverfügung: Laden und Speichern. Ich kann mir den Fehler immer noch nicht Erklären. Gut den Typ Cast mache ich wieder weg. |
Re: StringList weiter reichen zur Eigentliche Klasse
So sehe ich auch erstmal keinen Fehler. Grundlegend: Kannst du den Code zippen (der reine Playlistenteil, also Manager + BasePlaylist + M3U Ableitung reicht ja) und hier mal anhängen? Ich würde dann mal reinschauen. Wir haben ja heute Feiertag...
|
Re: StringList weiter reichen zur Eigentliche Klasse
Liste der Anhänge anzeigen (Anzahl: 1)
ja ! ist kein Problem, ist aber ein Lazarus Projekt.
Aber ich nutzte allgemeine Sachen. du müsstest nur eine eigene Oberfläche Bauen Vielen Dank für deine Hilfe. Ich hoffe du findest den Fehler. Also dir ist klar, was ich möchte ? Aber im Prinzip müsste es doch so gehen oder nicht ? (habe die Typcast noch nicht entfernt) |
Re: StringList weiter reichen zur Eigentliche Klasse
Liste der Anhänge anzeigen (Anzahl: 1)
Ok, es lag nur daran, dass du im Manager noch ein Assign() anstatt der Zuweisung drinne hattest.
Folgende Punkte: 1. Denk dran, dass du alle Instanzen von TInfo die du angelegt hast auch selber wieder freigeben musst. Die Listbox kümmert sich nicht darum! 2. Ich habe "Kommentar" mal verbessert - nur mal so nebenbei 3. Warum ist der Parameter Filename bei LoadFromFile() optional? Ich brauch die Methode Loadfromfile nicht aufrufen, wenn ich keinen Dateinamen habe. Beim speichern sehe ich dass ein: keine Angabe heisst: Speicher unter original geladenem Namen. Aber beim Laden? Ich habe das mal abgeändert. 4. Der Destruktor ist schon virtuell (muss er auch sein), somit zerschiesst du die gesamte Kette der Aufrufe mit der Deklaration eines virtuellen Destruktors in deiner Basisplaylistklasse. Ich habe es abgeändert. 5. Warum definierst und implementierst du Constructoren und Destructoren, wenn sie keinen Code beinhalten? Dies ist nicht nötig und macht den Code nur grösser und damit unleserlicher. 6. Ich habe ein paar Resourcen-Schutzblöcke eingefügt (try/finally), damit die temporären Instanzen auch im Falle eines Fehlers (Exception) wieder ordentlich freigegeben werden. 7. Alles was du direkt nach "class" deklarierst, ist public (oder sogar published). Damit ist es öffentlich einseh- und zugreifbar. (TPlaylistenManager) 8. Beim setzen einer neuen Instanz für die PlaylistenItems (also einer anderen Listbox o.ä.), muss diese Änderung mit durchgereicht werden, so dass die eigentliche Playlist auch die richtige Instanz hat. (siehe SetPlaylistItems()) 9. Was macht InitPlaylist() wenn er die Endung nicht kennt? Die Variable wird nicht initialisiert und somit weisst du nicht, ob du eine gültige Instanz in fPlayliste hast nach dem Aufruf oder nicht. 10. TPlaylistenManager.SaveToFile() ruft InitPlaylist() auf, damit erstellst du eine neue Instanz und überschreibst die vorhandene Instanz in fPlayliste Korrigierte Version im Anhang. |
Re: StringList weiter reichen zur Eigentliche Klasse
Zu 1: Danke ! Irgendwie dachte ich das würde TStrings auto. tuen bei der Freigabe.
Zu 2: Danke ! Zitat:
zu 4: Wenn du das bei der PlaylistBase meinst, ja, weil er soll ja was machen, und es soll überschrieben werden können, wenn es nötig ist. zu 5: Als Vorbereitung, es kann ja sein, das ich später dort Variablen Definieren möchte. zu 6: Danke. zu 7: Ich weiß, aber das ist auch published sein kann, ist mir neu. Vielen Dank, für deine Mühe, ich glaube das ist das erste mal seit dem ich hier im Forum bin das jemand meinen Soruce-Code zu genau unter die Lupe nimmt. Das ist ein Teil von ![]() ich werde dich auf jeden Fall erwähnen. Zitat:
![]() also nach einen ersten test geht es immer noch nicht so wie ich es wollte. Wenn ich von ausen auf writeln(PlayListeManger.PlayListItems.Text); zugreife ist diese Eigenschaft leer. In der Listbox sehe ich aber Einträge. |
Re: StringList weiter reichen zur Eigentliche Klasse
PlayListeManger ist im TFrom1 Definiert
|
Re: StringList weiter reichen zur Eigentliche Klasse
Zitat:
Zitat:
Zitat:
Delphi-Quellcode:
ist dies das gleiche wie
type
type TMyClass = class end;
Delphi-Quellcode:
Das erste ist nur eine Kurzform. Du leitest immer (sofern du nichts anderes angibst) von TObject ab. Somit erbst du automatisch den als virtuell deklarierten Destructor von TObject. Du hast somit schon einen als virtuell deklarierten Destruktor.
type
TMyClass = class(TObject) end; Wenn du nun in TPlaylistBase deinen Destruktor definierst und virtual; dahinter vermerkst, dann führst du einen neuen Destruktor ein mit dem gleichen Namen und verdeckst den von TObject. Dadurch wird aber jeder Destructor-Aufruf der bei dem TObject.Destroy ankommt nicht mehr an dich weiter geleitet. Free, FreeAndNil() etc. rufen immer den Destruktor vom Typ TObject auf und somit wird deiner niemals aufgerufen. Und damit in abgeleiteten Klassen trotzdem immernoch der Destruktor aufgerufen wird, muss dieser virtuell sein und in nachfolgenden Klassen überschrieben werden. Somit: Nimm das virtual weg! Zitat:
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? Ich schaue nochmal in mein Project und teste explizit. |
Re: StringList weiter reichen zur Eigentliche Klasse
Liste der Anhänge anzeigen (Anzahl: 1)
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. |
Re: StringList weiter reichen zur Eigentliche Klasse
Zitat:
Zitat:
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:
warum gibst du hier PLM wieder frei ? Ich möchte ihn ja später noch verwenden.
lList := TStringList.Create;
try PLM := TPlaylistenManger.Create; try PLM.PlaylistItems := lList; PLM.LoadFromFile(ParamStr(1)); finally PLM.Free; end; 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 ? |
Re: StringList weiter reichen zur Eigentliche Klasse
Das Seltsamme ist, so wird die richtige anzahl ausgeben.
Delphi-Quellcode:
Die Listbox ist aber gefüllt.
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; |
Re: StringList weiter reichen zur Eigentliche Klasse
Zitat:
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:
Zitat:
Zitat:
Zitat:
Zitat:
|
Re: StringList weiter reichen zur Eigentliche Klasse
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. |
Re: StringList weiter reichen zur Eigentliche Klasse
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 ? |
Re: StringList weiter reichen zur Eigentliche Klasse
Wenn ich das so habe, wird das Memo gefüllt:
Delphi-Quellcode:
und nicht die Listbox. Ich denke das es sich hierbei um einen Lazarus BUG handeln muss.
procedure TForm1.FormCreate(Sender: TObject);
begin PlayListeManger:=TPlaylistenManger.Create; PlayListeManger.PlayListItems:=ListBox1.Items; end; Ich glaube ich sollte die Frage noch mal im Lazarus-Forum stellen. Vielen Dank, für deine Mühevolle Hilfe. |
Re: StringList weiter reichen zur Eigentliche Klasse
1. Es gibt da oben rechts bei deinen Einträgen einen recht nützlichen "EDIT" Button.
2. Zitat:
3. Zitat:
|
Re: StringList weiter reichen zur Eigentliche Klasse
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:
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:
Wenn ich das Memo1 direkt zuweise, hängt sich das Programm beim ausführen auf.
procedure TForm1.FormCreate(Sender: TObject);
begin PlayListeManger:=TPlaylistenManger.Create; PlayListeManger.PlayListItems:=Memo1.Lines; end; 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 ? |
Re: StringList weiter reichen zur Eigentliche Klasse
Zitat:
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:
|
Re: StringList weiter reichen zur Eigentliche Klasse
Zitat:
Zitat:
Also unter Delphi wird die Listbox gefüllt edit: ich habe die frage jetzt doch unter ![]() gestellt. mal sehen was "die" sagen werden. Ich bin mir sicher es handelt sich um ein Pointer Problem. |
Re: StringList weiter reichen zur Eigentliche Klasse
Leider habe ich hier im Forum gelernt, dass man nicht einfach Annahmen treffen kann bezüglich offensichtlicher Aussagen.
Und zu dem Pointer Problem: ich bin noch immer zu 99.9% davon überzeugt, dass es nicht an Lazarus sondern am Code liegt. Ich habe hier auf Arbeit kein Lazarus und werde es mir heute Abend zu Hause anschauen. |
Re: StringList weiter reichen zur Eigentliche Klasse
Danke !
Ich verstehe das nicht mehr, ich weiße nirgend Memo1.Lines zu einer anderen TSTringlist lösche ich das Memo1 hängt sich das Programm auf. Ist das nicht beweis genug ? |
Re: StringList weiter reichen zur Eigentliche Klasse
wenn ich:
Delphi-Quellcode:
Geht es wie gewünscht. der Unterschied ist das ich
procedure TForm1.SpeedButton1Click(Sender: TObject); // Öffnen
begin PlayListeManger.PlayListItems:=Listbox1.items; PlayListeManger.LoadFromFile('/media/hda7/Daten/music/entspannung.m3u'); end; PlayListeManger.PlayListItems:=Listbox1.items; nicht schon in OnCreate zuweise sondern erst wenn es gebraucht wird. |
Re: StringList weiter reichen zur Eigentliche Klasse
Das Problem liegt einfach nur daran, dass du die im PlaylistenManager hinterlegte Instanz der Items nicht beim InitPlaylist() - also anlegen der Instanz - deren Eigenschaft weiterreichst. Wenn du dies dort machst, brauchst du diese Zuweisung nicht mehr.
Grundlegend habe ich debuggt mit Lazarus und Lazarus hat ein Problem mit dem AddObject() mit dem Info. Anscheinend meint er, dass die TInfo Instanz nicht mehr existiert. Der Debugger ist leider keine Hilfe und in den Komponentenquelltext komme ich nicht reindebuggt. Grundlegend scheint es wirklich ein Lazarus Problem zu sein. Warum ist eine andere Frage. Also: auch wenn ich es wirklich nicht geglaubt habe durch dieses abstruse Verhalten, so sind doch die 0.1% eingetreten und es ist ein Fehler von Lazarus (meines Erachtens). Somit: sorry, aber das konnte ich wirklich nicht glauben. Das ist wirklich zu abstrus. Aber ich nehme alles zurück und behaupte nun das Gegenteil. Sorry nochmal. |
Re: StringList weiter reichen zur Eigentliche Klasse
Na macht nix. Vielen Dank für deine Ausführliche Hilfe und Erklärungen.
Hast du evlt. eine Idee, wie ich den Fehler am besten umgehen kann ? Oder ist meine Lösung evlt. schon die beste: einfach den Ort zu verschieben. Wo die zuweisung stad findet. Ich frage mich gerade wann eigentlich diese OnCreate von From1 ausgelöst wird. Sobald das Formular fertig erstellt ist oder ? also wenn alle Komponenten Installisiert wurden sind. Evlt wird der BUG aber schon in der Nächsten Version behoben sein. Welche FCL Version hast du ? es gibt da schon eine neuere evlt. tritt der Fehler dort nicht mehr auf. Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:08 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-2025 by Thomas Breitkreuz