Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi TList mit Sammlung von Klassen (https://www.delphipraxis.net/88282-tlist-mit-sammlung-von-klassen.html)

fapsons 13. Mär 2007 08:03


TList mit Sammlung von Klassen
 
Hallo Leute,

habe folgende Klassen und TList:

Delphi-Quellcode:
TTerminal = class
     ID :Integer;
     Typ :String;
     Bezeichn :String;
     Beschreib :String;
End;

TSoftwarePaket = class
...
puplic
     Terminals: TList;
...
end;

TSoftwarePaket.Init
begin
...
 Terminals := TList.Create;
end;

...
procedure XY;
reg := SoftwarePaket.Create;
Terminals.Add(TTerminal); // wie greife ich jetzt korrekt auf meine
Terminals[0].ID := test; // Klasse TTerminal zurück?
Wie kann ich nun korrekt auf meine Klasse TTerminal in der TList zurückgreifen? Bin leider noch absoluter Anfänger und habe keine Ahnung...;)


Viele Dank,
-fapsons..

r2c2 13. Mär 2007 08:46

Re: TList mit Sammlung von Klassen
 
Hallo :hi:
das geht mit einem so gennaten TypeCast:
Delphi-Quellcode:
  TKlasse(List[i]).Eigenschaft := Wert;
  // oder besser mit Sicherung:
  (List[i] as TKlasse).Eigenschaft := Wert;
mfg

Christian

fapsons 13. Mär 2007 08:55

Re: TList mit Sammlung von Klassen
 
Habe glaube ich noch nicht so richtig verstanden, was du damit meinst.
Habe es jetzt so gemacht:


Delphi-Quellcode:
reg := TSoftwarePaket.Create;

reg.Terminals.add(reg.Terminals[l] as TTerminal).ID := 'String';
Was mache ich falsch?

sniper_w 13. Mär 2007 09:04

Re: TList mit Sammlung von Klassen
 
Delphi-Quellcode:
var myTerminal: TTerminal;
begin
  myTerminal := TTerminal.Create();
  myList.Add(myTerminal);// hinzufühgen

  WriteLn(  TTerminal(myList.Items[0]).ID ); // zugreifen
end;
Auf jedem Fall ist es gut sich über TObjectList zu informieren.

fapsons 13. Mär 2007 10:00

Re: TList mit Sammlung von Klassen
 
Habe es jetzt so gemacht:

Delphi-Quellcode:

TTerminal(reg.LTerminals.Items[n]).ID := 123;
Sobald jedoch n größer als 0 wird, kommt die Fehlermeldung, dass der Wert 1 den maximalen Listenindex überschreitet. Woran liegt das? Ist das nicht dynamisch?

fapsons 13. Mär 2007 10:02

Re: TList mit Sammlung von Klassen
 
Danke, habs selber hinbekommen...;)

fapsons 13. Mär 2007 10:16

Re: TList mit Sammlung von Klassen
 
Jetzt ist leider ein neues Problem aufgetreten:

Wenn ich die Eigenschaften von TTerminal aus der TList wie folgt beschreibe, sind alle TTerminals im TList identisch. Sprich alle Eigenschaften des TTerminal der TList[1] gleichen der von TTerminal der TList[2]...usw.


Ich hoffe ihr könnt mir folgen..;)

[delphi]
with D_DataModule.DataSet do //Terminaltypen abrufen
begin
SelectSQL.Clear;
SelectSQL.Text := 'select * from terminal order by 1 asc';
Open;
end;


n := 0;
while not D_DataModule.DataSet.Eof do
begin
reg.LTerminals.Add(Terminal);
TTerminal(reg.LTerminals.Items[n]).ID := D_DataModule.DataSet.FieldByName('TMID').Value;
TTerminal(reg.LTerminals.Items[n]).Typ := D_DataModule.DataSet.FieldByName('TYP').AsString;
TTerminal(reg.LTerminals.Items[n]).Bezeichn := D_DataModule.DataSet.FieldByName('BEZEICHNUNG').As String;
TTerminal(reg.LTerminals.Items[n]).Beschreib := D_DataModule.DataSet.FieldByName('BESCHREIBUNG').A sString;
D_DataModule.DataSet.Next;
n := n + 1;
end;
D_DataModule.DataSet.Close;

showmessage(TTerminal(reg.LTerminals.Items[0]).ID); // gibt
showmessage(TTerminal(reg.LTerminals.Items[1]).ID); // jeweils die selben Werte aus, obwohl es in
// der DB 2 unterschiedliche sind
[delphi]

fapsons 13. Mär 2007 10:18

Re: TList mit Sammlung von Klassen
 
Nochmal besser lesbar...;)

Jetzt ist leider ein neues Problem aufgetreten:

Wenn ich die Eigenschaften von TTerminal aus der TList wie folgt beschreibe, sind alle TTerminals im TList identisch. Sprich alle Eigenschaften des TTerminal der TList[1] gleichen der von TTerminal der TList[2]...usw.


Ich hoffe ihr könnt mir folgen..

Delphi-Quellcode:
 
with D_DataModule.DataSet do //Terminaltypen abrufen
begin
SelectSQL.Clear;
SelectSQL.Text := 'select * from terminal order by 1 asc';
Open;
end;


n := 0;
while not D_DataModule.DataSet.Eof do
begin
reg.LTerminals.Add(Terminal);
TTerminal(reg.LTerminals.Items[n]).ID := D_DataModule.DataSet.FieldByName('TMID').Value;
TTerminal(reg.LTerminals.Items[n]).Typ := D_DataModule.DataSet.FieldByName('TYP').AsString;
TTerminal(reg.LTerminals.Items[n]).Bezeichn := D_DataModule.DataSet.FieldByName('BEZEICHNUNG').AsString;
TTerminal(reg.LTerminals.Items[n]).Beschreib := D_DataModule.DataSet.FieldByName('BESCHREIBUNG').AsString;
D_DataModule.DataSet.Next;
n := n + 1;
end;
D_DataModule.DataSet.Close;

showmessage(TTerminal(reg.LTerminals.Items[0]).ID); // gibt
showmessage(TTerminal(reg.LTerminals.Items[1]).ID); // jeweils die selben Werte aus, obwohl es in
// der DB 2 unterschiedliche sind

sniper_w 13. Mär 2007 10:33

Re: TList mit Sammlung von Klassen
 
Zitat:

Sprich alle Eigenschaften des TTerminal der TList[1] gleichen der von TTerminal der TList[2]...usw.
Wiel du immer an der selben Stelle die Werte speicherst. Ich würde es so machen:
Delphi-Quellcode:
n := 0;
while not D_DataModule.DataSet.Eof do
begin
  Terminal := TTerminal.Create();
  with Terminal do
  begin
    ID := D_DataModule.DataSet.FieldByName('TMID').Value;
    Typ := D_DataModule.DataSet.FieldByName('TYP').AsString;
    Bezeichn := D_DataModule.DataSet.FieldByName('BEZEICHNUNG').AsString;
    Beschreib := D_DataModule.DataSet.FieldByName('BESCHREIBUNG').AsString;
  end;
  reg.LTerminals.Add(Terminal);
  D_DataModule.DataSet.Next;
  n := n + 1;
end;

fapsons 13. Mär 2007 10:43

Re: TList mit Sammlung von Klassen
 
Super!!! Funktioniert bestens!!


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:12 Uhr.
Seite 1 von 2  1 2      

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