![]() |
TListView und auf Object zugreifen
Hallo zusammen,
anscheinend bin ich entweder zu blöd oder ich seh den Wald vor lauter Bäumen nicht. Ich befülle folgendermaßen eine ListView mit 2 Spalten :
Delphi-Quellcode:
Wie kann ich nun auf das Object zugreifen ? :gruebel:
I := 0;
LV_Kundendaten.Items.BeginUpdate; with DM_Main, DM_Main.UniQuery_KundenQ do begin Open; while not Eof do begin ListItem := LV_Kundendaten.Items.Add; ListItem.Caption := FieldByName('Feld1').AsString; ListItem.SubItems.Add(Format('V - %2.2d', [FieldByName('Feld2').AsInteger])); ListItem.SubItems.AddObject(IntToStr(FieldByName('Feld0').AsInteger), Pointer(I)); I := I + 1; Next; end; Close; end; LV_Kundendaten.Items.EndUpdate; |
Re: TListView und auf Object zugreifen
LV_Kundendaten[0].Caption oder LV_Kundendaten.items[0].Caption oder LV_Kundendaten[0].SubItems[0]
edit: War zu schnell:
Delphi-Quellcode:
Das wird so nicht gehen, aber versuch mal folgendes statt Pointer nimm mal TObject(i) und dann mit Integer(LV_Kundendaten.items[0].Data) müsste eigentlich gehen, wenn nicht musst du dir eine eigene Klasse erstellen und die zuweisen.
ListItem.SubItems.AddObject(IntToStr(FieldByName('Feld0').AsInteger), Pointer(I));
edit02:
Delphi-Quellcode:
es währe auch noch folgendes denkbar: Integer(TObject(@LV_Kundendaten.items[0].Data))
ListItem.SubItems.AddObject(IntToStr(FieldByName('Feld0').AsInteger), Pointer(I));
Dazu gab es hier auch schon mal Beiträge... |
Re: TListView und auf Object zugreifen
Hallo Michael,
erstmal danke für Deine Antwort. Nur leider kapiere ich noch nicht so richtig wie ich das mit dem Data mache. Mein Ziel soll es sein, dass der Integer-Wert von Feld0 als unsichtbarer Wert mit zum dem ListView-Eintrag gespeichert wird. Dadurch möchte ich mir eine zusätzliche Abfrage auf die Datenbank sparen. Nur kapiere ich immer noch nicht, wie mir da Data weiterhelfen kann ? |
Re: TListView und auf Object zugreifen
Jeder Eintrag in der ListView hat ein Feld Data. Dieser ist meine ich von Datentyp TObject. Jetzt gibt es zwei Wege:
Du fügst dein Eintrag so hinzu: ListView1.Items.AddObject(...,TObject(varInteger)) ; nur beim Zurückwandeln bin ich mir nicht mehr sicher: Integer(TObject(ListItems1.Items[0].Data)); könnte gehen. Data speichert das Objekt. Was auf jedenfall geht ist:
Delphi-Quellcode:
Wenn du mit AddObject ein Object Hinzufügt wird das in den Feld Data des Items gespeichert. Am einfachsten geht das mit Klassen.
TMyClass = class
myIntVar:Integer end; // Dann sieht das Hinzufügen so aus: var myVar:TMyVar; begin myVar:=TMyVar.Create; myVar.myIntVar:=20; ListView1.Items.AddObject(...,myVar); // Der Zugriff erfolgt so: ShowMessage(IntTostr(TMyClass(ListView1.Items[0].Data))); Es geht aber auch ohne. Mit Pointern, da weiß ich im Moment jedoch nicht wie. Hier im Forum gab es mal dazu Beiträge / Thread. Ich suche sie mal... Edit01: ![]() |
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:33 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz