Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Algorithmen, Datenstrukturen und Klassendesign (https://www.delphipraxis.net/78-algorithmen-datenstrukturen-und-klassendesign/)
-   -   TListViewItem und TObject Daten (https://www.delphipraxis.net/183937-tlistviewitem-und-tobject-daten.html)

weisswe 15. Feb 2015 09:38

TListViewItem und TObject Daten
 
Hello!

Ich möchte meine Anwendung erweitern und benötige hierzu statt eines einfachen Integer Typs ein TObject hinter einem TListViewItem.

Bisher habe ich folgendes gemacht:
Code:
// Zuweisen
ai := ListView1.Items.Add;
ai.Data['idata'] := 5; // 5 = Typ Integer
// Auslesen
ai := ListView1.Selected;
i := ai.Data['idata'].AsInteger;  // Ergebnis = 5
Jetzt möchte ich statt Integer ein TObject verweden:
Code:
// Definition
type Tooo = class(Tobject)
   i: Integer;
end;
var o: Tooo;
// Zuweisen
o := Tooo.Create;
o.i := 5;
ai := ListView1.Items.Add;
ai.Data['odata'] := o; // o = Typ Tooo
// Auslesen
ai := ListView1.Selected;
if ai.Data['odata'].IsObject then    // -> True
begin
   o := Tooo(ai.Data['odata'].AsObject);  // Ergebnis = nil !!!
end;
Irgendeine Idee?

Bjoerk 15. Feb 2015 15:22

AW: TListViewItem und TObject Daten
 
Zum Beispiel so. Und Freigeben nicht vergessen.

Delphi-Quellcode:
type
  TData = class
  A, B: string;
end;

procedure TSomeForm.Button1Click(Sender: TObject);
var
  Item: TListItem;
  Data : TData;
begin
  Item := ListView1.Items.Add;
  Data := TData.Create;
  Data.A := 'A';
  Data.B := 'B';
  Item.Data := Data;
end;

procedure TSomeForm.Button2Click(Sender: TObject);
var
  Data : TData;
begin
  Data := TData(ListView1.Items[0].Data);
  ShowMessage(Data.A);
  ShowMessage(Data.B);
end;

procedure TSomeForm.FormDestroy(Sender: TObject);
var
  Data : TData;
begin
  while ListView1.Items.Count > 0 do
  begin
    Data := TData(ListView1.Items[0].Data);
    Data.Free;
    ListView1.Items.Delete(0);
  end;
end;

weisswe 15. Feb 2015 17:34

AW: TListViewItem und TObject Daten
 
Hallo!

Laut Delphi Wiki ist Data ein Array ->
Delphi-Quellcode:
property Data[const AIndex: string]: TValue read GetData write SetData;
(Delphi XE7 - FMX.ListView.TListViewItem.Data)

Also eine Zuordnung mit nur ListViewItem.Data := funktioniert nicht.

DeddyH 15. Feb 2015 19:37

AW: TListViewItem und TObject Daten
 
Du hättest aber kenntlich machen können, dass es um FireMonkey geht ;)

Volker Z. 15. Feb 2015 21:06

AW: TListViewItem und TObject Daten
 
Hallo,

hab jetzt kein XE7 am Start. Bei der (direkten) Zuweisung von Objekten ignoriert XE4 scheinbar alles was nicht nach Bitmap "riecht". Was die 7er Version macht kann ich nicht sagen.

So könnte es vielleicht klappen:
Delphi-Quellcode:
// Definition
type
  Tooo = class(Tobject)
    i: Integer;
  end;

var
  o : Tooo;
  i : TListViewItem;
  c : TClass;

  // Zuweisen
  o := Tooo.Create;
  o.i := 5;
  i := ListView1.Items.Add;
  i.Data['odata'] := TClass (o);
 
  // Auslesen
  i := ListView1.Selected;
  c := i.Data['odata'].AsClass;
  if Assigned (c) and (TObject (c).ClassName = 'Tooo') then
    ShowMessage (IntToStr (Tooo(c).i))
Speicher freigeben nicht vergessen.

Gruß

Daniel 15. Feb 2015 22:51

AW: TListViewItem und TObject Daten
 
Ja, das mit den Objekten ist etwas blöd. Casten nach NativeInt geht aber.

weisswe 16. Feb 2015 07:06

AW: TListViewItem und TObject Daten - Gelöst!
 
@Volker Z: VIELEN DANK!!! - funktioniert ohne Probleme! :)

@Bjoerk: Danke für die Meldung - FMX ist aber anders.. ;-)
@Detlef: Wusste nicht, das es da Unterschiede gibt - verwende die Komponente zum ersten Mal
@Daniel: Ja, hatte bis dato noch keine Probleme Objekte "direkt" zuzuordnen (z.B. TListbox)

Vielen Danke euch Allen,
Werner

weisswe 16. Feb 2015 13:52

AW: TListViewItem und TObject Daten
 
Leider noch ein Problem.
FMX Windows funktioniert mit der Lösung - jedoch nicht mit iOS. :(
Also nochmal von vorne...
Ich schaue mal ob das ein bekannter Bug ist oder einfach nur nicht "unterstützt" wird...

Grüße,
Werner


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