![]() |
TstringList // Form2 daten aus einer anderen Klasse lesen
Hi LEute !
Folgendes Problem beschäftigt mich schon eine Weile. Ich habe eine MainForm, eine Playlist_Klasse, und eine Form2. In der Playlist_Klasse ist die TStringList. Die wird aus der MainForm gefüttert. Also adden, counten etc funzt alles super. Jetzt wird die Form2 aus der MainForm angezeigt.
Delphi-Quellcode:
Wenn ich jetzt versuche aus der Form2 auf die Playlist_Klasse zu lesen geht nix.
Form2.Show;
Ich habe es testhalber mit einen einfachem count versucht.
Delphi-Quellcode:
Er gibt mir aber immer null zurück. Ich checke das nicht. Bitte um Hilfe.unit window_playlist; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs,Playlist_s0n_Klasse; type TForm2 = class(TForm) procedure FormCreate(Sender: TObject); procedure FormClick(Sender: TObject); private { Private-Deklarationen } public { Public-Deklarationen } end; var Form2: TForm2; swPlaylist: Ts0nPlaylist; implementation {$R *.dfm} procedure TForm2.FormCreate(Sender: TObject); begin swPlaylist := Ts0nPlaylist.Create; end; procedure TForm2.FormClick(Sender: TObject); var test: integer ; begin test:=swPlaylist.GetCount; showMessage(inttostr(test)); <---- da gibt er immer 0 zurück end; end. mfg s0n |
Re: TstringList // Form2 daten aus einer anderen Klasse lese
Du arbeitest auch mit 2 verschiedenen Instanzen der Klasse
|
Re: TstringList // Form2 daten aus einer anderen Klasse lese
Ich schimpfe mich selber als Anfänger. Könntest du mir das bitte erklären wie ich es richtig programmieren sollte ?
|
Re: TstringList // Form2 daten aus einer anderen Klasse lese
Moin,
wir vermuten, dass du in Form1 ebenfalls eine Instanz von Ts0nPlaylist erstellst. Da du das gleiche in Form2 noch einmal machst, hast du 2 Instanzen der Klasse erzeugt. Jede Klasse führt natürlich die eigenen Daten, daher kennt die 2te Instanz nicht der Daten der Ersten. Lösungen gibt es mehrere - man könnte z.B. die Klasse Ts0nPlaylist sich selbst erzeugen lassen (im initialization-Abschnitt der Unit) dann können alle auf diese zentrale Instanz zugreifen. |
Re: TstringList // Form2 daten aus einer anderen Klasse lese
Moin moin,
Deine Playlist aus Form1 hat vielleicht den gleichen Namen, ist aber nicht die Gleiche. Mit "swPlaylist := Ts0nPlaylist.Create; " generierst Du nur an anderer Stelle eine Playlist, die geuso heisst, wie die ind Form1. wenn Du in Form1:
Delphi-Quellcode:
vor dem implementation Teil einfügst und in der "unit window_playlist;" im uses Teil Form1 einfügst, kannst du
var
Form1: TForm1; swPlaylist: Ts0nPlaylist;
Delphi-Quellcode:
Gruss
procedure TForm2.FormClick(Sender: TObject);
var test: integer ; begin test:=Form1.swPlaylist.GetCount; showMessage(inttostr(test)); <---- dass gibt dann den gewünschten Wert zurück end; Michael |
Re: TstringList // Form2 daten aus einer anderen Klasse lese
.. und hat damit eine zirkuläre Referenz, nicht besonders schön
|
Re: TstringList // Form2 daten aus einer anderen Klasse lese
Zitat:
Könntest du mir bitte ein kleines Beispiel zeigen wie die Klasse sich selbst erzeugt? Ich verstehe das jetzt ehrlich gesagt nicht so wirklich. Und wie greife ich dann auf diese Instanz zu. Genauso wie bisher ? mfg s0n |
Re: TstringList // Form2 daten aus einer anderen Klasse lese
sehr schematisch:
Delphi-Quellcode:
Alle Formulare etc. die die Unit "PlaylistKlasse" einbinden, können die von dieser Klasse veröffentlichten Methoden etc. nun nutzen. Aufruf z.B. mit Playlist.Count
Unit PlaylistKlasse;
interface type tPlaylist ... public function Count:Integer; end; var Playlist : tPlaylist implementation ... initialization Playlist:=tPlaylist.Create(nil); finalization FreeAndNil(Playlist); end. |
Re: TstringList // Form2 daten aus einer anderen Klasse lese
Also ich habe jetzt in der Playlist Klasse folgendes geschrieben
Delphi-Quellcode:
Wobei ich die initial.... auch diret in create schreiben könnte ( denke ich mal )var Playlist: Ts0nPlaylist; implementation constructor Ts0nplaylist.Create; begin inherited create; scPlayList := THashedStringList.Create; scActTrackIndex:= 0; end; destructor Ts0nplaylist.Destroy; begin scPlaylist.Free; inherited destroy; end; // eine menge Prozeduren und funktionen initialization Playlist := Ts0nPlaylist.Create; finalization FreeAndNil (Playlist); end. Ich habe es probiert so zu schreiben:
Delphi-Quellcode:
Da sagt er mir aber das ich zu viele PArameter angegeben habe.Ohne Nil nimmt er es an.initialization Playlist := Ts0nPlaylist.Create(Nil); So nun aber zum eigentlichen. Es funzt irgendwie nicht. Ich kann aus der Form2 Unit alle propertys oder proceduren verwenden. Aber nicht aus der Mainform obwohl in Uses mit angewählt. DAs heißt, ich kann immernoch nicht von der Main FOrm und von Form2 auf die Playlist_Klasse zu greifen. |
Re: TstringList // Form2 daten aus einer anderen Klasse lese
Hallo,
hat das jetzt noch mit der PlayList zu tun ? Wenn nicht, bitte neuen Thread aufmachen. Heiko |
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:05 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