如何将angle symbol添加到字符串中以放入TMemo
?
我可以根据extended ascii table中的八进制值轻松添加度符号:
String deg = "\272"; // 272 is octal value in ascii code table for degree symbol
Form1->Memo1->Lines->Add("My angle = 90" + deg);
但是,如果我尝试对角度符号(\u2220
)使用转义序列,则会出现编译器错误W8114 Character represented by universal-character-name \u2220 cannot be represented in the current ansi locale
:
UnicodeString deg = "\u2220";
Form1->Memo1->Lines->Add("My angle = 90" + deg);
为清楚起见,下面是我所追求的符号。如果可以的话,我也可以使用@
,只是想知道是否可以在不咬牙的情况下做到这一点。我这次测试的目标是Win32,但我希望它也能在iOS和Android上运行。
p.s。 This table方便查看代码。
之后,Rob回答了我的问题,但在iOS上,其他文本的角度向下偏移到水平线以下。在Win32上,它很小。在Android上看起来不错。我会作为错误报告给Embarcadero,尽管较小。
这是我根据罗伯的评论使用的代码:
UnicodeString szDeg;
UnicodeString szAng;
szAng.SetLength(1);
szDeg.SetLength(1);
*(szAng.c_str()) = 0x2220;
*(szDeg.c_str()) = 0x00BA;
Form1->Memo1->Lines->Add("1: " + FormatFloat("##,###0.0",myPhasors.M1)+ szAng + FormatFloat("###0.0",myPhasors.A1) + szDeg);
以下是将TMemo
字体显式设置为Courier New时的外观:
这是雷米答复后我使用的最终代码:
UnicodeString szAng = _D("\u2220");
UnicodeString szDeg = _D("\u00BA");
Form1->Memo1->Lines->Add("1: " + FormatFloat("##,###0.0",myPhasors.M1)+ szAng + FormatFloat("###0.0",myPhasors.A1) + szDeg);
答案 0 :(得分:1)
编译器错误是因为您使用的是窄ANSI字符串文字,并且\u2220
不适合char
。请改用Unicode字符串文字:
UnicodeString deg = _D("\u2220");
RTL的_D()
宏为文字加上前缀L
或u
,这取决于UnicodeString
使用wchar_t
(仅Windows)还是{{ 1}}(其他平台)为其字符数据。
答案 1 :(得分:0)
该错误表示某种代码范围故障,您应该能够避免这种情况。尝试直接设置字符代码:
UnicodeString szDeg;
UnicodeString szMessage;
szDeg.SetLength(1);
*(szDeg.c_str())=0x2022;
szMessage=UnicodeString(L"My angle = 90 ")+szDeg;
Form1->Memo1->Lines->Add(szMessage);