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 Tlistview.Data verwenden (https://www.delphipraxis.net/77234-tlistview-data-verwenden.html)

Preddy2005 16. Sep 2006 18:07


Tlistview.Data verwenden
 
Hallo!

Ich finde einfach nichts brauchbares im Internet und in den Foren zu dem Thema, deswegem frage ich einfach mal hier nach.
Habe das alte Problem dank euch ebenfalls lösen können, nachdem ich ein wenig nochmal alles überflogen habe und ein paar Tutorials und Bücher mir angeguckt habe.

Zu dem Problem :

Delphi-Quellcode:

   for i := 0 to FBenutzerliste_Laden.Count-1 do // Für die Benutzerlisteneinträge
    begin
     Trenner := pos(',',FBenutzerliste_Laden.Strings[i]); // Trennzeichen ermitteln zwischne Benutzername und Benutzernummer
     FBenutzerliste_Eintrag := Benutzerlistview.Items.Add; // Eintrag für den Listview erzeugen
     FBenutzerliste_Eintrag.Caption := copy(FBenutzerliste_Laden.Strings[i],1,Trenner-1); // Weist dem Eintrag den Benutzernamen zu
     Self := Self.Create; // Neues Klassenobjekt erstellen
     FBenutzername := copy(FBenutzerliste_Laden.Strings[i],1,Trenner-1); // Benutzernamen in die Variable kopieren
     FBenutzerNummer := StrToInt(copy(FBenutzerliste_Laden.Strings[i],Trenner+1,4)); // UIN kopieren
     FBenutzerFenster_Offen := 0; // Benutzerfenster ist am Anfang stets geschlossen
     FBenutzerInfoFenster_Offen := 0; // Benutzerinfofenster ebenfalls
     Benutzerlistview.Items.Item[i].Data := Self; // Den Datenzeiger setzen
    end;
Es wird zur Laufzeit von jedem Listitem ein Objekt angelegt, das den Benutzernamen, Benutzernummer, usw. enthält.

Dies funktioniert alles soweit. Nur beim abspeichern bräuchte ich ein wenig Hilfe.

Delphi-Quellcode:
 for i := 0 to Benutzerlistview.Items.Count -1 do // Benutzerliste hinzufügen
  begin
       Benutzerlistview.Items.Item.Data; // Wie verwende ich die Data Eigenschaft
  end;
Ich will die Einträge in eine Stringliste schreiben und diese dann via Stream senden.

Stream senden ist kein Problem , aber wie komme ich über Data an die Klassenfelder ran???

Hoffe mir kann jemand bei dem Problem helfen.

Danke im voraus

Matthias

Zacherl 16. Sep 2006 18:19

Re: Tlistview.Data verwenden
 
Eintragen:

Delphi-Quellcode:
var
  UserData: TUserData;
begin
  UserData := TUserData.Create;
  UserData.Name := 'irgendwas'
  {...}

  with ListView.Items.Add(nil, '') do
  begin
    Text := 'hallo';
    Data := Pointer(UserData);
  end;
end;
Auslesen
Delphi-Quellcode:
begin
  with TUserData(ListView.Items[0].Data) do
  begin
    ShowMessage(Name);
  end;
end;
Florian

SirThornberry 16. Sep 2006 18:31

Re: Tlistview.Data verwenden
 
Da du weißt welcher Typ sich hinter Data verbirgt musst du einfach nur casten. Ein Cast kann wie folgt aussehen
Delphi-Quellcode:
TDeineKlasse(ZumBeispielDeinData).MethodenVariablenEtcVonTDeineKlasse
der eigentliche Cast ist dabei
Delphi-Quellcode:
TDeineKlasse(ZumBeispielDeinData);
es geht also auch so:
Delphi-Quellcode:
var UserData: TUserData;
begin
  UserData := TUserData(Benutzerlistview.Items.Item[x].Data);
  //Do anything with UserData

Preddy2005 17. Sep 2006 14:59

Re: Tlistview.Data verwenden
 
Vielen Dank für die schnelle und kompetente Hilfe. Funktioniert wunderbar.

Gruß Preddy


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