Delphi в мире Юникода
f65d50f6

ShortString


ShortString осталась неизменной, как по функциям, так и по объявлению, она будет работать, как и раньше.

Объявления ShortString выделяют буфер для заданного количества AnsiChar"ов. Такой код: var   S: string[26]; begin     S:= 'abcdefghijklmnopqrstuvwxyz';     WriteLn('Length = ', Length(S));     WriteLn('SizeOf = ', SizeOf(S));     WriteLn('TotalBytes = ', Length(S) * SizeOf(S[1]));     ReadLn; end.

выведет на экран следующее:

Обратите внимание, что общий размер алфавита - 26, это говорит о том, что переменная содержит AnsiChar"ы.

Рассмотрим также и такой код: type TMyRecord = record   String1: string[20];   String2: string[15]; end;

Это запись будет расположена в памяти точно так же, так и раньше - это будет запись из двух AnsiString"ов, содержащих AnsiChar"ы. Если у Вас есть File of Rec из записей, содержащих ShortString"и, то приведенный выше код будет работать, как и раньше, и любое чтение или запись не потребует никаких изменений.

Однако помните, что Char - это теперь WideChar, поэтому если Вы используете код, который читает такие записи из файла и потом делаете что-то вроде: var MyRec: TMyRecord; SomeChar: Char; begin // Чтение MyRec из файла... SomeChar := MyRec.String1[3]; ... end;

то Вы должны помнить, что SomeChar превратит AnsiChar в String1[3] в WideChar. Если Вам нужно, чтобы этот код работал, как раньше, измените объявление SomeChar: var MyRec: TMyRecord; SomeChar: AnsiChar; // Теперь объявлен как AnsiChar для символа из ShortString begin // Чтение MyRec из файла... SomeChar := MyRec.String1[3];  ... end;



Содержание раздела