AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

pointer auf TList

Ein Thema von theomega · begonnen am 15. Feb 2003 · letzter Beitrag vom 15. Feb 2003
Antwort Antwort
Seite 1 von 2  1 2   
Benutzerbild von theomega
theomega

Registriert seit: 18. Jun 2002
684 Beiträge
 
#1

pointer auf TList

  Alt 15. Feb 2003, 19:37
Hallo

ich muß an eine TTreeNode eine TList binden. Das geht ja über die Data-Eingenschaft Der TTreeNode. Der muß man ja einen Pointer zuweisen auf eine Struktur, die man daran binden will. Ich will jetzt also eine TList an die Treenode binden. Allerdings bekomme ich das nicht gebaken:

Delphi-Quellcode:

PList = ^TList;

var
list:PList;

.
.
.
new(list);
list^.add(objekt);
schon da stürzt mein Programm ab. Es scheitert am list^.add. warum geht das nicht, und was muß ich ändern?

Grüße

TO
  Mit Zitat antworten Zitat
jbg

Registriert seit: 12. Jun 2002
3.481 Beiträge
 
Delphi 10.1 Berlin Professional
 
#2
  Alt 15. Feb 2003, 19:40
Da bastelst dir da einen Zeiger auf eine Zeiger. TList ist bereits ein Zeiger.

Delphi-Quellcode:
var List: TList;
begin
  ...
  TreeItem.Data := List;
end;
  Mit Zitat antworten Zitat
Benutzerbild von theomega
theomega

Registriert seit: 18. Jun 2002
684 Beiträge
 
#3
  Alt 15. Feb 2003, 19:43
aber dann kann ich nicht mit
new(list) eine neue Liste erstellen. Ich brauche nämlich für jedes TreeItem eins.
  Mit Zitat antworten Zitat
jbg

Registriert seit: 12. Jun 2002
3.481 Beiträge
 
Delphi 10.1 Berlin Professional
 
#4
  Alt 15. Feb 2003, 19:46
Wie wäre es mit TList.Create.
  Mit Zitat antworten Zitat
Benutzerbild von d3g
d3g

Registriert seit: 21. Jun 2002
602 Beiträge
 
#5
  Alt 15. Feb 2003, 19:47
Sorry, der Weg, mit dem du die Liste erstellst, ekelt mich an .
Das Problem bei der Sache ist, dass du Delphi-Klassen nicht mehr wie in Pascal mit New() erstellst und mit Dispose() freigibst (das geht nur mit objects), sondern man benutzt Kon- und Destruktor, sodass die Objekte dynamisch auf dem Heap abgelegt werden.
Delphi-Quellcode:
var
  List: TList;
  Obj: TObject;

// ...

List := TList.Create();
Obj := TObject.Create();
List.Add(@Obj);
TreeNode.Data := @List;
MfG,
d3g

[edit]Mal wieder ein paar Beiträge verpennt ...[/edit]
-- Crucifixion?
-- Yes.
-- Good. Out of the door, line on the left, one cross each.
  Mit Zitat antworten Zitat
Benutzerbild von theomega
theomega

Registriert seit: 18. Jun 2002
684 Beiträge
 
#6
  Alt 15. Feb 2003, 19:48
Das kann doch garnicht gehen. Wie erstelle ich jetzt eine zweite Liste? Ohne eine zweite Variable zu nehmen?
  Mit Zitat antworten Zitat
Benutzerbild von d3g
d3g

Registriert seit: 21. Jun 2002
602 Beiträge
 
#7
  Alt 15. Feb 2003, 19:53
Hi theomega,

das geht so und nur so. Wenn du mehrere Listen ohne Variablen erstellen willst, mache es doch so:
Delphi-Quellcode:
for i := 0 to TreeView.Items.Count do begin
  List := TList.Create();
  List.Add(@MyObject);
  TreeView.Items.Item[i].Data := @List;
end;
Vergiss nicht, die Items hinterher alle mit TList.Free() freizugeben!

MfG,
d3g
-- Crucifixion?
-- Yes.
-- Good. Out of the door, line on the left, one cross each.
  Mit Zitat antworten Zitat
Benutzerbild von theomega
theomega

Registriert seit: 18. Jun 2002
684 Beiträge
 
#8
  Alt 15. Feb 2003, 20:05
Geht leider immer noch nicht:

Delphi-Quellcode:

type TBeleg=record
        belegdatum: TDateTime;
        betrag: double;
        spendenbescheinigungsnr: string;
        ausgestelltam: TDateTime;
        sachlicherichtigkeit:string;
        rechnericherichtigkeit:string;
        einnahme:boolean;
        //nextbeleg:pointer;
        index:integer;
        text1:string;
        text2:string;
end;
PBeleg=^TBeleg;

.
.
.

var liste:TList;
kontodata:PBeleg;
.
.
.
for i:= 1 to counter do begin;
List.Create;

for j:= 1 to 10 do begin;
new(belegdata);
belegdata^.betrag := j;
liste.Add(belegdata);
end;

treeview.items[j].data := @ liste;
Liste.free;
end;
warum geht das nicht?
Gibt einen Absturz.
  Mit Zitat antworten Zitat
jbg

Registriert seit: 12. Jun 2002
3.481 Beiträge
 
Delphi 10.1 Berlin Professional
 
#9
  Alt 15. Feb 2003, 20:08
Ersten lass das @ bei "treeview.items[j].data := @ liste;". Damit weist du .data die Adresse, an der die Variable liste steht zu und nicht die Adresse der Liste. TList.Create liefert bereits einen Pointer.
Zweitens entferne das liste.Free. Damit gibst du die Liste frei und .data zeigt ins Nirvana.
  Mit Zitat antworten Zitat
Benutzerbild von theomega
theomega

Registriert seit: 18. Jun 2002
684 Beiträge
 
#10
  Alt 15. Feb 2003, 20:10
Ändert nichts, Fehler bleibt.
Und selbst wenn da funktionieren würde: hätten dann nicht alle Treenodes die gleiche Liste dahinter? Es sollen ja verschiedene sein!
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2   

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:02 Uhr.
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