Zeichenfolge auf TListItem.Data zuweisen

Rund um die LCL und andere Komponenten
Kay
Beiträge: 134
Registriert: So 14. Nov 2010, 15:17

Zeichenfolge auf TListItem.Data zuweisen

Beitrag von Kay »

Hallo,

ich hätte eine Frage zur Einlagerung von Informationen in Listeneinträge bei TListView.
Hierfür gibt es ja die Eigenschaft Data von TListItem und die ist vom Typ Pointer. Wenn ich hier Objekte zuweise, funktioniert das sehr gut. Aber wie läuft das bei primitiven Datentypen?
Ich möchte für mein Projekt eine Zeichenfolge an jeden Listeneintrag hängen, bin mir aber nicht sicher, wie ich diese der Eigenschaft Data zuweisen bzw. wieder auslesen kann. Muss ich dazu vielleicht eine Wrapper-Klasse verwenden, z. B. TStringStream oder geht das auch einfacher?

Vielen Dank und viele Grüße
Kay

diogenes
Beiträge: 200
Registriert: So 11. Jul 2010, 18:39
OS, Lazarus, FPC: Linux
CPU-Target: 64 Bit
Wohnort: Wien
Kontaktdaten:

Re: Zeichenfolge auf TListItem.Data zuweisen

Beitrag von diogenes »

Ceterum censeo computatores per Pascal docendos esse.

Kay
Beiträge: 134
Registriert: So 14. Nov 2010, 15:17

Re: Zeichenfolge auf TListItem.Data zuweisen

Beitrag von Kay »

OK, ich hab mir den Artikel zur Verwendung von Pointern durchgelesen.
Allerdings ist mir nachwievor nicht klar, wie ich jetzt mit Zeichenfolgen umgehe...

Benutzeravatar
theo
Beiträge: 10936
Registriert: Mo 11. Sep 2006, 19:01

Re: Zeichenfolge auf TListItem.Data zuweisen

Beitrag von theo »

Müsste mit PChar gehen.

Kay
Beiträge: 134
Registriert: So 14. Nov 2010, 15:17

Re: Zeichenfolge auf TListItem.Data zuweisen

Beitrag von Kay »

Gut, mit PChar bekomme ich die Zeichenfolge jetzt schonmal rein, aber wie lese ich die Zeichenfolge wieder aus Data aus?

Benutzeravatar
theo
Beiträge: 10936
Registriert: Mo 11. Sep 2006, 19:01

Re: Zeichenfolge auf TListItem.Data zuweisen

Beitrag von theo »

Kay hat geschrieben:Gut, mit PChar bekomme ich die Zeichenfolge jetzt schonmal rein, aber wie lese ich die Zeichenfolge wieder aus Data aus?
Verstehe die Frage nicht so ganz.

Meinst du das?

Code: Alles auswählen

var p:Pointer;
begin
  p:=PChar('test');
  Caption:=PChar(p);
end;  

Kay
Beiträge: 134
Registriert: So 14. Nov 2010, 15:17

Re: Zeichenfolge auf TListItem.Data zuweisen

Beitrag von Kay »

theo hat geschrieben:
Kay hat geschrieben:Gut, mit PChar bekomme ich die Zeichenfolge jetzt schonmal rein, aber wie lese ich die Zeichenfolge wieder aus Data aus?
Verstehe die Frage nicht so ganz.

Meinst du das?

Code: Alles auswählen

var p:Pointer;
begin
  p:=PChar('test');
  Caption:=PChar(p);
end;  
Nein ich meine die Zuweisung auf die Data-Eigenschaft von TListItem, d. h. das Hinzufügen von zusätzlichen Informationen, also z. B.

Code: Alles auswählen

var
  ListItem: TListItem;
begin
  ListItem := ListView1.Items.Add;
  ListItem.Caption := 'unwichtig';
  ListItem.Data := PChar('zusatz');
end;
Später im Programm möchte ich die Info wieder auslesen und da ist halt jetzt die Frage wie, da es sich ja um einen Pointer handelt...

Code: Alles auswählen

var
  ListItem: TListItem;
begin
  ListItem := ListView1.Selected;
  // hier muss jetzt die Data-Eigenschaft gelesen werden
end;
Grüße,
Kay
Zuletzt geändert von Lori am Mi 28. Nov 2012, 19:57, insgesamt 1-mal geändert.
Grund: Bitte den richtigen Highlighter verwenden.

Benutzeravatar
theo
Beiträge: 10936
Registriert: Mo 11. Sep 2006, 19:01

Re: Zeichenfolge auf TListItem.Data zuweisen

Beitrag von theo »

Das habe ich doch in meinem Beispiel gezeigt.
ListItem.Data ist ein Pointer wie p.

Kay
Beiträge: 134
Registriert: So 14. Nov 2010, 15:17

Re: Zeichenfolge auf TListItem.Data zuweisen

Beitrag von Kay »

Naja, also in deinem Beispiel arbeitest du mit Caption, nicht mit Data. Außerdem demonstrierst du nur die Zuweisung, die hatte ich ja mittlerweile hinbekommen. Meine Frage war, wie man den zugewiesenen Wert wieder ausliest, ich will ja später mit der hinterlegten Zeichenfoge weiterarbeiten.

Benutzeravatar
theo
Beiträge: 10936
Registriert: Mo 11. Sep 2006, 19:01

Re: Zeichenfolge auf TListItem.Data zuweisen

Beitrag von theo »

Kay hat geschrieben:Naja, also in deinem Beispiel arbeitest du mit Caption, nicht mit Data. Außerdem demonstrierst du nur die Zuweisung, die hatte ich ja mittlerweile hinbekommen. Meine Frage war, wie man den zugewiesenen Wert wieder ausliest, ich will ja später mit der hinterlegten Zeichenfoge weiterarbeiten.
:roll:

Schau dir das nochmal an, und ersetze p mit ListItem.Data. Das Bsp. besteht aus ZWEI Zeilen.

Ist das soo schwierig zu verstehen?

Caption ist dabei komplett irrelevant, könnte auch eine AnsiString-Variable etc. sein.

Kay
Beiträge: 134
Registriert: So 14. Nov 2010, 15:17

Re: Zeichenfolge auf TListItem.Data zuweisen

Beitrag von Kay »

Sorry, ich glaube du verstehst mich nicht.
Die Zuweisung funktioniert doch:

Code: Alles auswählen

ListItem.Data := PChar('zusatz');
Steht doch schon längst alles.
Mein Problem ist, dass ich nicht weiß, wie ich den Text jetzt wieder "raushole".

Benutzeravatar
theo
Beiträge: 10936
Registriert: Mo 11. Sep 2006, 19:01

Re: Zeichenfolge auf TListItem.Data zuweisen

Beitrag von theo »

Kay hat geschrieben: Steht doch schon längst alles.
Mein Problem ist, dass ich nicht weiß, wie ich den Text jetzt wieder "raushole".
DAS STEHT IN DER ZWEITEN ZEILE

Kay
Beiträge: 134
Registriert: So 14. Nov 2010, 15:17

Re: Zeichenfolge auf TListItem.Data zuweisen

Beitrag von Kay »

OK, wenn es das ist was ich denke, dann fand ich das Beipsiel etwas irreführend.
Meinst du, das der Pointer von Data mit PChar zurückgecastet werden muss, also

Code: Alles auswählen

var
  hinterlegt: PChar;
begin
  ListItem.Data := PChar('Test');
  hinterlegt := PChar(ListItem.Data);
end;
Dann hab ich allerdings einen Char-Pointer, wie komme ich anschließend wieder zu meiner Zeichenfolge?
Zuletzt geändert von Lori am Mi 28. Nov 2012, 19:58, insgesamt 1-mal geändert.
Grund: Es gibt einen Highlighter für Lazarus-Code; diesen bitte auch benutzen.

Benutzeravatar
theo
Beiträge: 10936
Registriert: Mo 11. Sep 2006, 19:01

Re: Zeichenfolge auf TListItem.Data zuweisen

Beitrag von theo »

Kay hat geschrieben: Dann hab ich allerdings einen Char-Pointer, wie komme ich anschließend wieder zu meiner Zeichenfolge?
Pchar IST eine Zeichenfolge, und ausserdem zuweisungskompatibel mit String.

Dein "hinterlegt" kann genau so gut ein String sein:

Code: Alles auswählen

 var hinterlegt: AnsiString;
Das ist nicht irreführend, du denkst einfach nicht mit.

Kay
Beiträge: 134
Registriert: So 14. Nov 2010, 15:17

Re: Zeichenfolge auf TListItem.Data zuweisen

Beitrag von Kay »

Naja, also ich frage etwas zu Data und bastelst mit Caption rum, natürlich ist das irreführend.
Aber gut, lassen wir das. Jetzt funktioniert's jedenfalls. Vielen Dank.

Antworten