Autor Beitrag
dowo
Hält's aus hier
Beiträge: 3



BeitragVerfasst: Mi 28.01.04 11:50 
Hallo,

Ich habe (hoffentlich) eine TList von TLists erzeugt, in der wie in einer Matrix die Werte
100 400
200 500
stehen. Jetzt würde ich gerne wissen, wie ich jede einzelne dieser Zahlen (bzw. Speicherpositionen) ansprechen kann.
Ich bin relativ neu bei Delphi, und falls mir jemand sonstige Tipps zu dem unten geschriebenen Code geben kann, bin ich auch sehr dankbar.


ausblenden volle Höhe Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;


type
  TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;


var
  Form1: TForm1;
  Liste1,Liste2: TList;
  A:^integer;
  Poi:^integer;
  Zahl:integer;
  x:integer;
implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var i:integer;
begin
  Liste1:=TList.Create;
  Liste2:=TList.Create;
  new(A);
  A^:=100;
  Liste2.Add(A);
  new(A);
  A^:=200;
  Liste2.Add(A);
  Liste1.Add(Liste2);
  Liste2.free;

  Liste2:=TList.Create;
  new(A);
  A^:=400;
  Liste2.Add(A);
  new(A);
  A^:=500;
  Liste2.Add(A);
  Liste1.Add(Liste2);

  for i:=0 to Liste1.count-1 do
  begin
  Poi:=Liste1.Items[i];  //Man bekommt nicht die einzelnen Elemente
  Zahl:=Poi^;
  showmessage(inttostr(Zahl));
  end;
  Liste1.free;
  Liste2.free;
end;


Moderiert von user profile iconUGrohne: Topic verschoben und Tags korrigiert
Tana´Ri
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 230



BeitragVerfasst: Mi 28.01.04 15:49 
Wenn ichs recht versteh fügst du Liste1 zwei items an. diese sind selbst
Listen mit je 2 items.

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
for i:=0 to 1 do // List 1 or 1 Dimension
 for j:=0 to 2 do // list 2 or Item of list1 or 2 dimension
  begin
   P := (List1.Items[i] as TList).Items[j];
   ShowMessage(IntToStr(P^));
 end;


i hope it works ;-)

_________________
mfg
Tana´Ri
obbschtkuche
Gast
Erhaltene Danke: 1



BeitragVerfasst: Mi 28.01.04 16:09 
Da gibst du die Liste wieder frei:

ausblenden Delphi-Quelltext
1:
2:
  Liste1.Add(Liste2);
  Liste2.free;


Wenn du danach aber nochmal darauf zugreifen willst, gibt es sie natürlich nichtmehr.
Das solltest du am Ende tun. Außerdem sollten auch die Elemente der Listen wieder aus dem speicher entfernt werden (dispose)
Poi sollte dann noch vom Typ TList sein.
dowo Threadstarter
Hält's aus hier
Beiträge: 3



BeitragVerfasst: Mi 28.01.04 16:40 
Tana´Ri hat folgendes geschrieben:
Wenn ichs recht versteh fügst du Liste1 zwei items an. diese sind selbst
Listen mit je 2 items.

Du hast mein Problem genau richtig erkannt, und mir mit der Synthax schon mal eine wertvollen Tip gegeben, allerdings kommt, wenn ich diesen Code richtig einfüge, der Fehler "Operator ist auf diesen Operandentypen nicht anwendbar" beim Compilieren.
Was ist denn noch falsch daran?

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
for i:=0 to 1 do // List 1 or 1 Dimension
 for j:=0 to 2 do // list 2 or Item of list1 or 2 dimension
  begin
   P := (List1.Items[i] as TList).Items[j];
   ShowMessage(IntToStr(P^));
 end;


i hope it works ;-)
Tana´Ri
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 230



BeitragVerfasst: Mi 28.01.04 17:01 
Versuch mal das

P := (List1.Items[i]^ as TList).Items[j];
OR
P := TList(List1.Items[i]^).Items[j];

_________________
mfg
Tana´Ri
dowo Threadstarter
Hält's aus hier
Beiträge: 3



BeitragVerfasst: Mi 28.01.04 19:07 
Titel: Problem gelöst
Hi Obschtkuche und Tana'Ri,

mit der Hilfe von Euch beiden habe ich es geschafft mein Problem zu lösen. Weitere Fragen folgen sicherlich. Aber vielen Dank für die schnelle Beratung.

Hier der Code:

ausblenden volle Höhe Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
var
  Form1: TForm1;
  Liste1,Liste2,Liste3,TempListe: TList;
  A:^integer;
  Zahl:integer;
  P:^integer;
implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var i,j:integer;
begin
  Liste1:=TList.Create;

  Liste2:=TList.Create;
  new(A);
  A^:=1;
  Liste2.Add(A);
  new(A);
  A^:=2;
  Liste2.Add(A);
  new(A);
  A^:=3;
  Liste2.Add(A);
  Liste1.Add(Liste2);

  Liste3:=TList.Create;
  new(A);
  A^:=40;
  Liste3.Add(A);
  new(A);
  A^:=50;
  Liste3.Add(A);
  Liste1.Add(Liste3);

 for i:=0 to Liste1.count-1 do
 begin
   TempListe:=Liste1.Items[i];
   for j:=0 to TempListe.count-1 do
   begin
     P := TempListe.items[j];
     ShowMessage(IntToStr(P^));
   end;
 end;

  Liste1.free; Liste2.free; Liste3.free;
end;

end.