Как назначить (отобразить) Unicode UTF-32 (разные символы и пиктограммы) для TLabel.Caption?

Я хочу отобразить ???? (U + 1F4CD - круглая канцелярская кнопка) в TLabel caption (lblLocation) отображается что-то вроде: "???? Pretoria, South Africa", но вместо этого я продолжаю получать странные вещи, похожие на блоки.

Я пробовал вставить символ прямо в исходный код, но это также приводит к странной блочной вещи (мой исходный код закодирован в UTF-8).

Перед вставкой ????:

image

Сразу после вставки ????:

image

Я также пробовал использовать ConvertFromUtf32() согласно Как преобразовать кодовую точку Unicode, такую ​​как U + 1F4DB, в char?.

lblLocation.Caption := lblLocation.Caption + ConvertFromUtf32(StrToInt('$1F4CD'));

Выполнение приведенного выше кода дает следующее в заголовке TLabel:

image


person Community    schedule 28.09.2019    source источник
comment
Вы можете использовать charmap (в Windows), чтобы проверить, содержит ли шрифт метки символ.   -  person Sertac Akyuz    schedule 28.09.2019
comment
Что касается задания, lbLocation.Caption + #$1F4CD в порядке.   -  person Sertac Akyuz    schedule 29.09.2019
comment
ConvertFromUtf32(StrToInt('$1F4CD')) - вам не нужно StrToInt(), вместо этого можно использовать целочисленный шестнадцатеричный литерал: lbLocation.Caption := ConvertFromUtf32($1F4CD) + ' Pretoria, South Africa'; Или просто используйте символьные литералы UTF-16: lbLocation.Caption := #$D83D#$DCCD' Pretoria, South Africa';   -  person Remy Lebeau    schedule 29.09.2019
comment
@Remy - Length(#$1F4CD) возвращает 2, задание в моем комментарии работает.   -  person Sertac Akyuz    schedule 29.09.2019
comment
@SertacAkyuz Я не говорил, что #$1F4CD не работает. Хотя использование шестнадцатеричных значений ›4 цифры недокументировано. До 4 цифр документируется как 1 WideChar, не упоминается ›4 цифры, дающие 2 WideChar. Если это сработает - отлично. Возможно, это новая функция, я уверен, что она не всегда работала в ранних версиях Delphi с поддержкой Unicode.   -  person Remy Lebeau    schedule 29.09.2019


Ответы (1)


Символ, который вы пытаетесь отобразить, не имеет глифа в используемом вами шрифте. Вам нужно найти шрифт, в котором есть глиф для этого символа.

person David Heffernan    schedule 28.09.2019