Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi TstringList // Form2 daten aus einer anderen Klasse lesen (https://www.delphipraxis.net/139388-tstringlist-form2-daten-aus-einer-anderen-klasse-lesen.html)

sonny2007 27. Aug 2009 23:06


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:
Form2.Show;
Wenn ich jetzt versuche aus der Form2 auf die Playlist_Klasse zu lesen geht nix.
Ich habe es testhalber mit einen einfachem count versucht.



Delphi-Quellcode:

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.
Er gibt mir aber immer null zurück. Ich checke das nicht. Bitte um Hilfe.


mfg s0n

mkinzler 28. Aug 2009 05:34

Re: TstringList // Form2 daten aus einer anderen Klasse lese
 
Du arbeitest auch mit 2 verschiedenen Instanzen der Klasse

sonny2007 28. Aug 2009 06:17

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 ?

taaktaak 28. Aug 2009 06:51

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.

kalmi01 28. Aug 2009 06:55

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:
var
  Form1: TForm1;
  swPlaylist: Ts0nPlaylist;
vor dem implementation Teil einfügst und in der "unit window_playlist;" im uses Teil Form1 einfügst, kannst du
Delphi-Quellcode:
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;
Gruss
Michael

taaktaak 28. Aug 2009 06:59

Re: TstringList // Form2 daten aus einer anderen Klasse lese
 
.. und hat damit eine zirkuläre Referenz, nicht besonders schön

sonny2007 28. Aug 2009 07:07

Re: TstringList // Form2 daten aus einer anderen Klasse lese
 
Zitat:

Zitat von taaktaak
Moin,
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.

Das alle auf dieselbe Instanz zu greifen, klingt für mich sehr plausibel.

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

taaktaak 28. Aug 2009 07:21

Re: TstringList // Form2 daten aus einer anderen Klasse lese
 
sehr schematisch:

Delphi-Quellcode:
Unit PlaylistKlasse;

interface

type tPlaylist ...

               public

                function Count:Integer;

               end;

var Playlist : tPlaylist

implementation

...

initialization

  Playlist:=tPlaylist.Create(nil);
 
finalization

  FreeAndNil(Playlist);

end.
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

sonny2007 28. Aug 2009 07:42

Re: TstringList // Form2 daten aus einer anderen Klasse lese
 
Also ich habe jetzt in der Playlist Klasse folgendes geschrieben

Delphi-Quellcode:

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.
Wobei ich die initial.... auch diret in create schreiben könnte ( denke ich mal )


Ich habe es probiert so zu schreiben:
Delphi-Quellcode:
 
initialization
Playlist := Ts0nPlaylist.Create(Nil);
Da sagt er mir aber das ich zu viele PArameter angegeben habe.Ohne Nil nimmt er es an.

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.

hoika 28. Aug 2009 08:05

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 19:27 Uhr.
Seite 1 von 2  1 2      

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