Hallo..
Da ich den DatenTyp für MyRec[x].ExoName[0].b nicht kenne, hier ein Beispiel mit Strings:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8:
| procedure MoveStringData(ASource : string; var ATarget : string); var iLength : integer; begin iLength := length(ASource); setLength(ATarget,iLength ); move(ASource[1],ATarget[1],iLength * SizeOf(Char)); end; |
Bei Move wird 'ein' Speicherbereich von Source nach target kopiert, dazu muss das Ziel bereits groß (Speicher) genug sein, um die Bytes aus der Quelle aufnehmen zu können!
Dem Move ist es egal ob Ansistring oder Widestring, es kopiert einfach nur zusammenhängende 'Bytes'.
Durch das 'SizeOf(Char)' wird bei AnsiStrings ein Byte pro Zeichen, bei UniCode zwei Bytes pro Zeichen kopiert, somit funktioniert die obrige Funktion unter allen Delphi-Versionen , welche move und string kennen!
Somit muss vor dem kopieren nach 'MyRec[x].ExoName[0].b' dieses b groß genug sein, um den String 's' aufnehmen zu können.
---------
Edit:
OK, es geht nur darum aus einem WideString (2 Bytes je Char) ein AnsiString (ein Byte je Char) zu machen, dann genügt wirklich:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15:
| procedure MoveStringData(ASource : AnsiString; var ATarget : AnsiString); var iLength : integer; begin iLength := length(ASource); setLength(ATarget,iLength ); move(ASource[1],ATarget[1],iLength ); end;
var tmpStr : AnsiString; begin tmpStr := Edit1.Text; MoveStringData(tmpStr,tagertStr) |