0

如何在字符串中添加角度符号以放入TMemo

我可以根据扩展 ascii 表中的八进制值轻松添加度数符号:

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 上运行。

在此处输入图像描述

ps 此表便于查看代码。

遵循 Rob 的回答后,我已经开始工作了,但在 iOS 上,角度与其他文本一起向下偏移到水平线以下。在 Win32 上它很小。在安卓上看起来不错。我会向 Embarcadero 报告一个错误,尽管很小。

结果

安卓结果

这是我根据 Rob 的评论使用的代码:

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时的外观:

将字体设置为 Courier New 后

这是我在 Remy 回复后使用的最终代码:

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);
4

2 回答 2

1

编译器错误是因为您使用的是窄 ANSI 字符串文字,并且\u2220不适合char. 改用 Unicode 字符串文字:

UnicodeString deg = _D("\u2220");

RTL 的_D()宏在文字前面加上Loru前缀,具体取决于是UnicodeString使用wchar_t(仅限 Windows)还是char16_t(其他平台)作为其字符数据。

于 2019-10-19T22:05:04.147 回答
0

该错误表示某种代码范围故障,您应该能够避免这种情况。尝试直接设置字符代码:

UnicodeString  szDeg;
UnicodeString  szMessage;

  szDeg.SetLength(1);
  *(szDeg.c_str())=0x2022;

  szMessage=UnicodeString(L"My angle = 90 ")+szDeg;
  Form1->Memo1->Lines->Add(szMessage);
于 2019-10-17T14:38:02.373 回答