Die Sache ist ganz einfach. Ich will die Objekte selbst in der List darstellen, das erspart mir Methoden zu implementieren, die dann jedes Mal Änderungen an den ListItems über Item.Data oder so ähnlich auf die Objekte übertragen, die die ListItems ja eigentlich repräsentieren sollen. Außerdem kann ich dann meine Objekte auch gleich in der Liste speichern und habe die Daten nicht redundant. Da die Objekt nicht sonderlich umfangreich sind, erschien es mir sehr praktisch, diese alle als Erben von TListItem zu deklarieren. Ich kann also die TListView nicht nur als Präsentation meiner Objekte nutzen, sondern gleich als deren direkter Administrator.
Was nun mein konkretes Problem angeht, so bin ich durch Probieren von selbst auf die Lösung gekommen. Allerdings gefällt mir diese noch nicht, weil viel zu viel Quelltext. –Am liebsten würde ich es so machen, wie’s in letzten auskommentieren Zeile steht - Ich habe herausgefunden, dass ich nur nach dem Einfügen des Items mittels AddItem() die Caption setzen muss. Aber eigentlich sollte das im Konstruktor von TSlcCriterion geschehen. Die Caption des Items wird also erst in der TListView angezeigt, wenn ich nach dem Einfügen, die Caption setze. Der Wert der Caption vor dem Einfügen wird nicht berücksichtigt. Na ja, also wenn jemand weiß, wie ich die Caption davor auch noch berücksichtigen kann, mir also das nachträgliche Setzen sparen kann, dann wäre ich für eine Tipp sehr dankbar.
Code:
procedure CreateListItem(Field: TField);
var
Item: TSlcCriterion;
begin
//ToDo evtl. vereinfachen
Item := TSlcCriterion.Create(LvCrt.Items, Field);
LvCrt.Items.AddItem(Item);
Item.Caption := Field.FieldName;
//LvCrt.Items.AddItem(TSlcCriterion.Create(LvCrt.Items, TField(LvFld.Selected.Data)));
end;
Greetings Scouty