отображение форм и навигации в Delphi 2010
При вызове форм не отображается кирилица, не работает строка навигации отчета (всего две неработающих кнопки с неверной кодировкой). Ниже предложен вариант полного решения проблемы.
Баг 1: модуль frxServerTemplates, строка 195
процедура перевод юникода в ASCII запускается два раза
заменить
FTemplate.LoadFromStream(FSSI{$IFDEF Delphi12}, TEncoding.ASCII{$ENDIF});
на
FTemplate.LoadFromStream(FSSI);
Баг2: модуль frxServerVariables, строка 35
разработчики оставили две версии метода AddVariable. При извлечении ресурсов метод вызывается в таком виде:
FTemplate.Variables.AddVariable('L_FIRST', UTF8Encode(frxResources.Get('HTMLNavFirst')));
т. к. UTF8Encode возвращает RawByteString, который неявно приводится как к ANSIstring, так и к Unicodestring, вызывается первая попавшая версия AddVariable, с параметром ANSIstring, хотя фактически UTF8Encode возвращает ссылку на unicode. Хотя ANSI версия метода для FRS под Delphi2010 вообще не нужна.
заменить
procedure AddVariable(const Name: String; const Value: AnsiString);{$IFDEF Delphi12} overload;
procedure AddVariable(const Name: String; const Value:String); overload;
{$ENDIF}
на
procedure AddVariable(const Name: String; const Value: {$IFDEF Delphi12}String {$ELSE} AnsiString{$ENDIF});
убрать реализацию второй перезагрузки метода (AddVariable(const Name: String; const Value:String)), оставив без изменения первую
Баг3: модуль frxServerForms, строка 87
заменить
WriteExpLn(AnsiString(str));
на
WriteExpLn(UTF8Encode(str));
После предложных манипуляций FRS полностью работоспособен под Delphi 2010.
Баг 1: модуль frxServerTemplates, строка 195
процедура перевод юникода в ASCII запускается два раза
заменить
FTemplate.LoadFromStream(FSSI{$IFDEF Delphi12}, TEncoding.ASCII{$ENDIF});
на
FTemplate.LoadFromStream(FSSI);
Баг2: модуль frxServerVariables, строка 35
разработчики оставили две версии метода AddVariable. При извлечении ресурсов метод вызывается в таком виде:
FTemplate.Variables.AddVariable('L_FIRST', UTF8Encode(frxResources.Get('HTMLNavFirst')));
т. к. UTF8Encode возвращает RawByteString, который неявно приводится как к ANSIstring, так и к Unicodestring, вызывается первая попавшая версия AddVariable, с параметром ANSIstring, хотя фактически UTF8Encode возвращает ссылку на unicode. Хотя ANSI версия метода для FRS под Delphi2010 вообще не нужна.
заменить
procedure AddVariable(const Name: String; const Value: AnsiString);{$IFDEF Delphi12} overload;
procedure AddVariable(const Name: String; const Value:String); overload;
{$ENDIF}
на
procedure AddVariable(const Name: String; const Value: {$IFDEF Delphi12}String {$ELSE} AnsiString{$ENDIF});
убрать реализацию второй перезагрузки метода (AddVariable(const Name: String; const Value:String)), оставив без изменения первую
Баг3: модуль frxServerForms, строка 87
заменить
WriteExpLn(AnsiString(str));
на
WriteExpLn(UTF8Encode(str));
После предложных манипуляций FRS полностью работоспособен под Delphi 2010.