Nal*_*alu 4 delphi delphi-5 delphi-xe3
我正在将我的Delphi 5应用程序迁移到Delphi XE3.我在编译时得到了一些错误.有人可以帮我解决这些问题.提前感谢您的帮助.
我无法OemToChar在XE3中找到功能定义.当我按住Ctrl键并单击该功能时,它会显示消息Unable to locate 'WinAPI.Windows.pas'.我无法打开任何delphi组件文件.windows.pas位于系统上的位置是什么?或者如何解决?
Incompatiable Types: 'PAnsiChar' and 'PWideChar'在下面的功能在线OemToChar(p1, p2).
function OemToAnsi(const Str: string): string;
var
p1,
p2: PChar;
begin
p1 := PChar(Str);
p2 := StrNew(p1);
OemToChar(p1, p2);
Result := StrPas(p2);
StrDispose(p2);
end;
Run Code Online (Sandbox Code Playgroud)
'Low Bound Exceeds High Bound'在以下代码中获取错误.function StrToRichText(const Str: string): string;
var
i: integer;
begin
Result := '';
for i := 1 to Length(Str) do
begin
case Str[i] of
#128 .. #255 :
Result := Result + '\''' + LowerCase(IntToHex(Ord(Str[i]), 2));
'\','{','}':
Result := Result + '\' + Str[i];
else
Result := Result + Str[i];
end;
end;
end;
Run Code Online (Sandbox Code Playgroud)
你的OemToAnsi功能应该是这样的:
function OemToAnsi(const Str: AnsiString): AnsiString;
begin
SetLength(Result, Length(Str));
OemToCharA(PAnsiChar(Str), PAnsiChar(Result));
end;
Run Code Online (Sandbox Code Playgroud)
但也许你会更好
function OemToWide(const Str: AnsiString): string;
begin
SetLength(Result, Length(Str));
OemToChar(PAnsiChar(Str), PChar(Result));
end;
Run Code Online (Sandbox Code Playgroud)
至于你StrToRichText,那看起来更难.它显然只接受ANSI输入.如果你想坚持使用ANSI,那么只需将声明更改为
function StrToRichText(const Str: AnsiString): AnsiString;
Run Code Online (Sandbox Code Playgroud)
RTF使用7位ASCII编码.要使该函数与Unicode输入一起使用,您需要使用ordinal> = 128转义任何字符.例如,在Wikipedia 富文本格式页面上描述了转义.我会把它作为锻炼给你!
在你走得更远之前,你需要阅读MarcoCantù的白皮书:Delphi和Unicode.