Неожиданный вопросительный знак (?
) отображается, когда текст проходит через преобразование кодовой страницы, которое завершается неудачей.
Поскольку Delphi 2007 не поддерживает Unicode, Caption
вашего ярлыка - AnsiString
.Текст, который вы помещаете туда, проходит по крайней мере через одно преобразование кодовой страницы, которое завершается неудачно, и вам нужно выяснить, где происходит преобразование и почему оно терпит неудачу.
Распространенные причины преобразований кодовой страницы:
- Текст для вашего
Label
взят из DFM (вы написали его в Object Inspector).Ваш компьютер и тестовый компьютер используют разные «кодовые страницы по умолчанию для приложений, не поддерживающих Юникод».Вы должны никогда не видеть это во время тестирования на своем компьютере. - Текст для вашего Label получен из базы данных, и либо база данных имеет неправильную кодовую страницу, либо ваш тестовый компьютер имеет неправильный кодpage: когда Delphi старательно пытается преобразовать кодовую страницу, происходит сбой.
- Неправильно установлено свойство набора символов шрифта вашей метки.
Вот немного кода дляпоместите символ ü
в метку для тестирования.Код выбирает EASTEUROPE_CHARSET
, поэтому я знаю, что имею дело с кодовой страницей 1250 .Я делаю это потому, что другие константы Charset либо выбирают неиспользуемые кодовые страницы (которые не включают "ü"), либо выбирают кодовую страницу, которая зависит от ОС (то есть: без фактических изменений).
procedure TForm1.Button1Click(Sender: TObject);
begin
Label1.Font.Charset := EASTEUROPE_CHARSET;
Label1.Caption := Char(252);
end;