![]() |
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:
Vielen Dank
// 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; |
AW: Pointer zu String
PChar ist ein Pointer auf einen String
Wird ein Fehelr angezeigt? |
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. |
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:
und...
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;
Delphi-Quellcode:
Procedure Move(const source;var dest;count:SizeInt);
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:02 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz