Forum: GUI-Design mit VCL / FireMonkey / Common Controls
Delphi
by himitsu,
30. Mär 2010
In OnDeletion würde ich einfach alle diese Klassen freigeben, also jeweils die Klasse des Items, welches grade manuel oder automatisch gelöscht wird.
Forum: GUI-Design mit VCL / FireMonkey / Common Controls
Delphi
by himitsu,
30. Mär 2010
Mit einem eigenem Constructor dürfte wohl auch sowas gehn.
item.Data := TTestObject.Create('String im Data des Item: ' + IntToStr(i));
Forum: GUI-Design mit VCL / FireMonkey / Common Controls
Delphi
by himitsu,
30. Mär 2010
.Data ist nicht wirklich umständlich nutzbar ... es ist wie mit jedem anderen Zeiger/Pointer auch.
Und hier war nunmal die eigentlich gute Referenzzählung schuld, welche man durch solch einen Cast absichtlich umgeht.
Einziges Problem bei Properties ist, daß sie keinen gleichzeitigen Schreib- und Lesezugriff erlauben, weswegen String(item.Data):=irgendwas; nicht ging.
Die hoika schon...
Forum: GUI-Design mit VCL / FireMonkey / Common Controls
Delphi
by himitsu,
30. Mär 2010
tja, entweder zu sorgst dafür, daß "test" nie freigegeben/verändert wird, solange die Referenz in item.Data liegt,
oder du mußt eben doch die Referenzzählung beachten
var P: Pointer;
// zuweisen
String(P) := test;
item.Data := P;
Forum: GUI-Design mit VCL / FireMonkey / Common Controls
Delphi
by himitsu,
30. Mär 2010
Eventuell schlägt hier die Referenzzählung des Strings zu, wenn du den String über Pointer(...) zuweißt, wird da die Referenzzählung nicht behandelt.
Wird dann der übergebene String mal freigegeben, dann ist er weg und in .Data steht nur ein Zeiger zu einem nicht mehr existierendem String.
versuch es mal so:
//zuweisen
String(item.Data) := test;
// auslesen
test := String(item.Data);