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;