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 ListView und Data: mit Strings arbeiten (https://www.delphipraxis.net/87439-listview-und-data-mit-strings-arbeiten.html)

Mazel 28. Feb 2007 18:30


ListView und Data: mit Strings arbeiten
 
Hallo,

ich habe ein Problem mit dem Datafeld von einem Item in einem ListView. Ich möchte dort für jedes Item dem Pfad einer Datei abspeichern. Der ListView besteht aus mehreren Spalten wobei in der ersten der Dateiname ohne Pfad steht, den Pfad soll man aber nicht sehen, daher dachte ich mir diesem im Datafeld zu hinterlegen, aber leider scheidert es beim auslesen bzw. beim füllen:
Delphi-Quellcode:
 // einfügen
 ListView1.Items[0].Data := Pointer(PChar(Folder + SearchRec.Name));

 // auslesen
 ShowMessage(String(PString(LVwMP3.Items[LVwMP3.ItemIndex].Data)));
Als Anzeige bekomme ich nur sinnfreier Text, ohne Bezug.

Hat jemand eine Lösung dafür?

Gruß
Mazel

Neutral General 28. Feb 2007 18:35

Re: ListView und Data: mit Strings arbeiten
 
Hi,

erstmal muss ich sagen das ich bei den Pointern nicht 100%ig durchblicke aber versuchs ma mit

Delphi-Quellcode:
ShowMessage(PString(LVwMP3.Items[LVwMP3.ItemIndex].Data)^);
Nicht böse sein wenns nicht geht :duck: ^^

Gruß
Neutral General

Der_Unwissende 28. Feb 2007 18:39

Re: ListView und Data: mit Strings arbeiten
 
Hi,
dein Pointer wird sicherlich nur lokal (auf dem Stack) abgelegt. Delphi weiß hier einfach nicht, dass Du den länger benötigst, mit dem Ende der Methode, indem dieser Aufruf statt findet wird auch dieser Pointer auf nichts sinnvolles mehr zeigen. Du solltest Dir lieber etwas Speicher auf dem Heap reservieren. Dazu kannst Du einfach mit GetMem Speicher holen und als String behandeln.

Delphi-Quellcode:
var buffer: ^String;
begin
  GetMem(buffer, length(Folder + SearchRec.Name));
  buffer^ := Folder + SearchRec.Name;
...
end;
Nicht vergessen, das was Du so auf dem Heap ablegst, musst Du auch selbst wieder von dort entfernen!

Gruß Der Unwissende

[add]
ansonsten hat der Neutral General recht, Du musst natürlich den String wieder dereferenzieren!
[/add]

Lannes 28. Feb 2007 18:49

Re: ListView und Data: mit Strings arbeiten
 
Hallo,

mein Ansatz:
Delphi-Quellcode:
//setzen
ListView1.Items[0].Data := StrNew(PChar(s));
//lesen
showmessage(pchar(ListView1.Items[0].Data));
//freigeben in OnDeletion
StrDispose(PChar(Item.Data));

Mazel 28. Feb 2007 21:09

Re: ListView und Data: mit Strings arbeiten
 
Danke Lannes, das funktioniert.

Pointer sind nicht ganz meine Sache, da gibt es bei mir oft Verwirrung.

Gruß
Mazel


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