Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi TListView und auf Object zugreifen (https://www.delphipraxis.net/145103-tlistview-und-auf-object-zugreifen.html)

RWarnecke 23. Dez 2009 19:29


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:
  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;
Wie kann ich nun auf das Object zugreifen ? :gruebel:

mimi 23. Dez 2009 19:33

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:
ListItem.SubItems.AddObject(IntToStr(FieldByName('Feld0').AsInteger), Pointer(I));
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.

edit02:
Delphi-Quellcode:
ListItem.SubItems.AddObject(IntToStr(FieldByName('Feld0').AsInteger), Pointer(I));
es währe auch noch folgendes denkbar: Integer(TObject(@LV_Kundendaten.items[0].Data))

Dazu gab es hier auch schon mal Beiträge...

RWarnecke 23. Dez 2009 20:11

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 ?

mimi 23. Dez 2009 21:35

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:
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)));
Wenn du mit AddObject ein Object Hinzufügt wird das in den Feld Data des Items gespeichert. Am einfachsten geht das mit Klassen.
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: http://www.delphipraxis.net/internal...teger+listview etwas weiter unten siehst du das es so geht: Integer(ListView1.items[0].data); wenn du es ohne Klassen machen möchtest.


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