我在将编辑框中的文本转换为WideChar时遇到问题。这正被用于打印表情符号的代码中。
如果我像下面这样手动设置WideChar值,它就能正常工作
Emoji[1] := WideChar($D83D);
Emoji[2] := WideChar($DC4D);但我希望能够通过编辑框设置十六进制代码,如下所示
StringToWideChar(edit1.text, @wc1, Length(edit1.text));
StringToWideChar(edit2.text, @wc2, Length(edit2.text));
Emoji[1] := wc1;
Emoji[2] := wc2;wc1和wc2被定义为WideChar。编辑框包含的值与上面硬编码的值相同。该代码导致输出为空,因此转换出现了问题。
我做错了什么?感谢你在这里的帮助。
发布于 2021-04-28 05:58:14
不能将字符串'$D83D'解释为文本--相反,必须将其解析为整数。
首先,您需要从编辑框中获取文本。这是Edit1.Text。然后,您需要将其转换为整数。例如,您可以使用StrToInt或TryStrToInt。然后,您只需将该整数重新解释(强制转换)为Char
procedure TForm1.Edit1Change(Sender: TObject);
var
CodeUnit: Integer;
begin
if TryStrToInt(Edit1.Text, CodeUnit) and InRange(CodeUnit, 0, $FFFF) then
Label1.Caption := Char(CodeUnit)
else
Label1.Caption := '';
end;在这里,作为奖励,我还使用InRange验证了假设的代码单元是一个实际的16位无符号整数(我的意思是,理论上用户可以输入123456789)。Delphi的StrToInt函数支持使用美元符号表示法的十六进制。
https://stackoverflow.com/questions/67291163
复制相似问题