Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi TListItem direkt in TListView einfügen (https://www.delphipraxis.net/14791-tlistitem-direkt-tlistview-einfuegen.html)

scouty 15. Jan 2004 19:27


TListItem direkt in TListView einfügen
 
Hi Leute ich habe folgendes Problem: Ich will in eine Liste (TListView) ein Item (TListItem) einfügen. Das mache ich auf die folgende Art:

Delphi-Quellcode:
var
Item: TSlcCriterion; //TSlcCriterion = class(TListItem)

 Item := TSlcCriterion.Create(LvCrt.Items, TField(LvFld.Selected.Data));
 
 LvCrt.Items.AddItem(Item);

Nun, meine Frage, warum wird mir mein Objekt nicht in der Liste angezeigt?!?
Ich habe mit LvCrt.Items.Count geprüft, ob das Objekt einfügt wurde, und der Count hat sich erhöht. Nur sehen tu’ ich in der Liste nix. Ich wäre sehr dankbar, wenn mir jemand von Euch vielleicht ein Tipp geben könnte.

Vielen Dank schon mal….

Scouty

PS.: Wenn ich ein normals ListItem (TListItem) auf die selbe Weise einfügen will, wird das auch nicht angezeit. Daher dürfte es an meiner Klasse nicht liegen.

Keldorn 16. Jan 2004 17:16

Re: TListItem direkt in TListView einfügen
 
Hallo

ich seh hier überhaupt nicht durch. Ich weiß nicht, warum du eine eigene Klasse für ein Listitem erstellst und warum du die Items so komisch versuchst hinzuzufügen. additem is zwar public, aber in der oh steht nix drin.

warum nicht nach dem Prinzip wie in der OH?
Delphi-Quellcode:
Var Listitem:Tlistitem;
begin
  Listitem:=Listview.items.add;
  Listitem.caption:='blablabla';
...

Mfg Frank

scouty 16. Jan 2004 17:40

Re: TListItem direkt in TListView einfügen
 
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


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:40 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