FastReport 4.12 VCL for Delphi XE2 中文乱码问题解决方法
FastReport 4.12 VCL for Delphi XE2,按默认方法安装,将语言切换为中文简体后,不管是设计时还是运行时,设计器的菜单项部分中文乱码,从盒子搜索到了解决方法,摘录如下:
方法一:
第1步:将Source目录内的frxRes.pas修改:
procedureTfrxResources.AddXML(constStr:AnsiString); var Stream:TStringStream; begin Stream:= TStringStream.Create(UTF8Encode(String(str))); LoadFromStream(Stream); Stream.Free; end;
第二步:将ResChinese目录内的xml文件用文本文件打开,将其另存为ASCII格式,然后运行mk.bat
第三,重新用recompile.exe编译
方法二:
可以自己编译一个frcc.exe,替换Res目录下的,然后再recompile即可。delphi XE2测试界面都正常。
用delphiXE建立一个console工程,名称为frcc,代码如下:
program frcc; {$APPTYPECONSOLE} uses SysUtils, Classes, StrUtils; var xml: string; list: TStringList; i: Integer; fileName: string; lineWidth: integer; line: string; begin try if ParamCount < 1 then begin Writeln('noinput'); Exit; end; xml:= ParamStr(1); fileName:= ExtractFileName(xml); fileName:= Copy(fileName, 1, Length(fileName)-4); //deleteext.xml list:= TStringList.Create(); list.LoadFromFile(xml, TEncoding.UTF8); xml:= list.Text; list.Clear; list.Add('unit' + fileName + ';'); list.Add(''); list.Add('interface'); list.Add('{$Ifrx.inc}'); list.Add('implementation'); list.Add('usesfrxRes;'); list.Add('constresXML='); xml:= ReplaceText(xml, #13,''); xml:= ReplaceText(xml, #10,''); i:= 1; while True do begin if (i + 80) < (Length(xml) + 1) then lineWidth:= 80 else lineWidth:= Length(xml) + 1 - i; if lineWidth = 0 then break; line:= Copy(xml, i, lineWidth); list.Add(QuotedStr(line) + '+'); i:= i + lineWidth; end; list.Add(''''';'); list.Add('initialization'); list.Add('frxResources.AddXML(Utf8Encode(resXML));'); list.Add(''); list.Add('end.'); list.SaveToFile(ChangeFileExt(ParamStr(1),'.pas'),TEncoding.Default); list.Free; except on E: Exception do Writeln(E.Classname, ':', E.Message); end; end.