F
fuyou
Unregistered / Unconfirmed
GUEST, unregistred user!
1、重装操作系统之前编译的程序是正常的:在简体系统显示的是简体,繁体系统或英文系统显示的是繁体;用以前的程序现在运行还是正常的。2、重装操作系统之后对程序重编译后却不正常了:简体系统下使用正常,繁体系统或英文系统下就出现了乱码;3、怀疑是操作系统设置或DELPHI第三方控件不同,导致编译后的文件差异,但是什么却不知道。主要函数如下:function TSysFunc.GBToBig5(GBStr: string): string;var Len: Integer; pGBCHTChar: PChar; pGBCHSChar: PChar; pUniCodeChar: PWideChar; pBIG5Char: PChar;begin pGBCHSChar := PChar(GBStr); Len := MultiByteToWideChar(936, 0, pGBCHSChar, -1, nil, 0); GetMem(pGBCHTChar, Len * 2 + 1); ZeroMemory(pGBCHTChar, Len * 2 + 1); //GB CHS -> GB CHT LCMapString($804, LCMAP_TRADITIONAL_CHINESE, pGBCHSChar, -1, pGBCHTChar, Len * 2); GetMem(pUniCodeChar, Len * 2); ZeroMemory(pUniCodeChar, Len * 2); //GB CHT -> UniCode MultiByteToWideChar(936, 0, pGBCHTChar, -1, pUniCodeChar, Len * 2); Len := WideCharToMultiByte(950, 0, pUniCodeChar, -1, nil, 0, nil, nil); GetMem(pBIG5Char, Len); ZeroMemory(pBIG5Char, Len); //UniCode -> Big5 WideCharToMultiByte(950, 0, pUniCodeChar, -1, pBIG5Char, Len, nil, nil); Result := string(pBIG5Char); FreeMem(pBIG5Char); FreeMem(pGBCHTChar); FreeMem(pUniCodeChar);end;function TSysFunc.getDisplay(const input: string): string;//****INPUT 即为要显示的原字符begin if (GetOEMCP = 936) then begin Result := input; end else if (GetOEMCP = 950) then //繁体系统 begin Result := GBToBig5(input); end else begin Result := GBToBig5(input); end;end;