Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Algorithmen, Datenstrukturen und Klassendesign (https://www.delphipraxis.net/78-algorithmen-datenstrukturen-und-klassendesign/)
-   -   Pointer zu String (https://www.delphipraxis.net/167500-pointer-zu-string.html)

thomasschaf 2. Apr 2012 15:47

Pointer zu String
 
Hallo,

ich möchte ListView1.Selected.Data als String ausgeben.
Die Länge ist in ListView1.Selected.SubItems[3] zu finden.

Leider funktionieren diese nicht:

Delphi-Quellcode:
// gibt Access violation
procedure TForm1.ListView1SelectItem(Sender: TObject; Item: TListItem;
  Selected: boolean);
var
  str: string;
  len: integer;
begin
  len := StrToInt(ListView1.Selected.SubItems[3]);

  SetLength(str, len);
  Move(ListView1.Selected.Data, Pointer(str), len);

  Memo1.Text := str;
end;
Delphi-Quellcode:
// nur der erste Buchstabe erscheint
procedure TForm1.ListView1SelectItem(Sender: TObject; Item: TListItem;
  Selected: boolean);
var
  str: string;
  len: integer;
begin
  len := StrToInt(ListView1.Selected.SubItems[3]);

  SetLength(str, len);
  Move(ListView1.Selected.Data^, str[1], len);

  Memo1.Text := str;
end;
Vielen Dank

mkinzler 2. Apr 2012 16:04

AW: Pointer zu String
 
PChar ist ein Pointer auf einen String

Wird ein Fehelr angezeigt?

himitsu 2. Apr 2012 16:07

AW: Pointer zu String
 
Und das Wichtiges wurde wieder mal vergessen.
Wie ist der String dort reingekommen?


Wie ist Move in Lazrus deklariert?
Als offene Var/Const-Parameter oder als Pointer.


Warum den String nicht als weiteres SubItem?
Man muß ja nicht alle anzeigen.

thomasschaf 2. Apr 2012 16:15

AW: Pointer zu String
 
Man könnte den String natürlich auch als weiteres Subitem einfügen oder ein Array of String nehmen und dort die Strings einfügen.
Das sind auch die geplanten Alternativen wenn das nicht geht.

Delphi-Quellcode:
var
  iRet: integer;  
  buf: array[0..MAX_CHAR] of char;
  buf2: PChar;      
...
begin
...
  iRet     := recv(RawSocket, buf, sizeof(buf), 0);
  getmem(buf2, iRet);
  copymemory(buf2, @buf, iRet);
( listdata     := ListView1.Items.Add; )
  listdata.Data := buf2;
...
end;
und...
Delphi-Quellcode:
Procedure Move(const source;var dest;count:SizeInt);


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