Zeichenfolge auf TListItem.Data zuweisen
Zeichenfolge auf TListItem.Data zuweisen
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
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
-
- 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
Einfach mitr Pointern arbeiten: http://www.schoenleber.org/pascal/pascal2-06.html
Ceterum censeo computatores per Pascal docendos esse.
Re: Zeichenfolge auf TListItem.Data zuweisen
OK, ich hab mir den Artikel zur Verwendung von Pointern durchgelesen.
Allerdings ist mir nachwievor nicht klar, wie ich jetzt mit Zeichenfolgen umgehe...
Allerdings ist mir nachwievor nicht klar, wie ich jetzt mit Zeichenfolgen umgehe...
Re: Zeichenfolge auf TListItem.Data zuweisen
Müsste mit PChar gehen.
Re: Zeichenfolge auf TListItem.Data zuweisen
Gut, mit PChar bekomme ich die Zeichenfolge jetzt schonmal rein, aber wie lese ich die Zeichenfolge wieder aus Data aus?
Re: Zeichenfolge auf TListItem.Data zuweisen
Verstehe die Frage nicht so ganz.Kay hat geschrieben:Gut, mit PChar bekomme ich die Zeichenfolge jetzt schonmal rein, aber wie lese ich die Zeichenfolge wieder aus Data aus?
Meinst du das?
Code: Alles auswählen
var p:Pointer;
begin
p:=PChar('test');
Caption:=PChar(p);
end;
Re: Zeichenfolge auf TListItem.Data zuweisen
Nein ich meine die Zuweisung auf die Data-Eigenschaft von TListItem, d. h. das Hinzufügen von zusätzlichen Informationen, also z. B.theo hat geschrieben:Verstehe die Frage nicht so ganz.Kay hat geschrieben:Gut, mit PChar bekomme ich die Zeichenfolge jetzt schonmal rein, aber wie lese ich die Zeichenfolge wieder aus Data aus?
Meinst du das?
Code: Alles auswählen
var p:Pointer; begin p:=PChar('test'); Caption:=PChar(p); end;
Code: Alles auswählen
var
ListItem: TListItem;
begin
ListItem := ListView1.Items.Add;
ListItem.Caption := 'unwichtig';
ListItem.Data := PChar('zusatz');
end;
Code: Alles auswählen
var
ListItem: TListItem;
begin
ListItem := ListView1.Selected;
// hier muss jetzt die Data-Eigenschaft gelesen werden
end;
Kay
Zuletzt geändert von Lori am Mi 28. Nov 2012, 19:57, insgesamt 1-mal geändert.
Grund: Bitte den richtigen Highlighter verwenden.
Grund: Bitte den richtigen Highlighter verwenden.
Re: Zeichenfolge auf TListItem.Data zuweisen
Das habe ich doch in meinem Beispiel gezeigt.
ListItem.Data ist ein Pointer wie p.
ListItem.Data ist ein Pointer wie p.
Re: Zeichenfolge auf TListItem.Data zuweisen
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.
Re: Zeichenfolge auf TListItem.Data zuweisen
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.

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.
Re: Zeichenfolge auf TListItem.Data zuweisen
Sorry, ich glaube du verstehst mich nicht.
Die Zuweisung funktioniert doch:
Steht doch schon längst alles.
Mein Problem ist, dass ich nicht weiß, wie ich den Text jetzt wieder "raushole".
Die Zuweisung funktioniert doch:
Code: Alles auswählen
ListItem.Data := PChar('zusatz');
Mein Problem ist, dass ich nicht weiß, wie ich den Text jetzt wieder "raushole".
Re: Zeichenfolge auf TListItem.Data zuweisen
DAS STEHT IN DER ZWEITEN ZEILEKay hat geschrieben: Steht doch schon längst alles.
Mein Problem ist, dass ich nicht weiß, wie ich den Text jetzt wieder "raushole".
Re: Zeichenfolge auf TListItem.Data zuweisen
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
Dann hab ich allerdings einen Char-Pointer, wie komme ich anschließend wieder zu meiner Zeichenfolge?
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;
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.
Grund: Es gibt einen Highlighter für Lazarus-Code; diesen bitte auch benutzen.
Re: Zeichenfolge auf TListItem.Data zuweisen
Pchar IST eine Zeichenfolge, und ausserdem zuweisungskompatibel mit String.Kay hat geschrieben: Dann hab ich allerdings einen Char-Pointer, wie komme ich anschließend wieder zu meiner Zeichenfolge?
Dein "hinterlegt" kann genau so gut ein String sein:
Code: Alles auswählen
var hinterlegt: AnsiString;
Re: Zeichenfolge auf TListItem.Data zuweisen
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.
Aber gut, lassen wir das. Jetzt funktioniert's jedenfalls. Vielen Dank.