Добавить символ угла к строке - PullRequest
0 голосов
/ 17 октября 2019

Как я могу добавить символ угла к строке, чтобы вставить TMemo?

Я могу добавить символ степени достаточно легко на основе его восьмеричного значения из расширенная таблица ascii :

String deg = "\272";  // 272 is octal value in ascii code table for degree symbol
Form1->Memo1->Lines->Add("My angle = 90" + deg);

Но, если я , попробуйте использовать escape-последовательность для символа угла (\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.

enter image description here

ps Эта таблица удобно видеть коды.

После после ответа Роба у меня все работает, но в iOS угол смещен вниз под горизонталь с другим текстом. На Win32 он крошечный. Хорошо выглядит на Android. Я сообщу об ошибке в Embarcadero, хотя и незначительно.

results

android result

Здесьэто код, который я использовал, основываясь на комментариях Роба:

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:

after setting font to 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);

Ответы [ 2 ]

1 голос
/ 20 октября 2019

Ошибка компилятора в том, что вы используете узкий строковый литерал ANSI, а \u2220 не помещается в char. Вместо этого используйте строковый литерал Unicode:

UnicodeString deg = _D("\u2220");

Макрос RTL _D() префиксирует литерал с префиксом L или u в зависимости от того, использует ли UnicodeString wchar_t (только для Windows)или char16_t (другие платформы) для своих символьных данных.

0 голосов
/ 17 октября 2019

Ошибка указывает на некоторый сбой диапазона кода, который вы должны избежать. Попробуйте установить код символа напрямую:

UnicodeString  szDeg;
UnicodeString  szMessage;

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

  szMessage=UnicodeString(L"My angle = 90 ")+szDeg;
  Form1->Memo1->Lines->Add(szMessage);
...