Я следовал инструкциям здесь, и они помогли. У меня есть несколько дополнительных советов, которые могут помочь,
- Два включения, которые вам понадобятся для этой работы, — это WinAPI.Windows и WinAPI.Messages.
- Если вы поместите эти включения в начало предложения «использует», у вас вряд ли возникнут конфликты имен с такими вещами, как TBitmap.
Теперь я добавляю следующий код,
procedure TMainForm.FormCreate(Sender: TObject);
begin
AddFontResource('c:\fontpath\myfont.ttf');
SendMessage(HWND_BROADCAST, WM_FONTCHANGE, 0, 0) ;
end;
procedure TMainForm.FormDestroy(Sender: TObject);
begin
RemoveFontResource('c:\fontpath\myfont.ttf');
SendMessage(HWND_BROADCAST, WM_FONTCHANGE, 0, 0) ;
end;
Когда я запускаю это в форме firemonkey, я заметил следующее.
- Код работает
- Другие приложения (например, блокнот, офис) могут внезапно увидеть новый шрифт
- Текстовые объекты в моем приложении не распознают новый шрифт
- Если я динамически назову свой текстовый объект именем шрифта, он все равно не изменится.
- Если я динамически назову свой текстовый объект другим очевидным шрифтом, он изменится.
- Если я закрою свое приложение, другие приложения перестанут видеть новый шрифт.
Это говорит мне, что мой код работает (см. пункты 1 и 6), но FMX не распознает шрифт в моей основной форме, если вы используете имя, которое появляется в блокноте. Я вчетверо проверил имя шрифта.
Я создал два одинаковых проекта. Один был VCL, а другой FMX. Проект VCL отлично работает как для статического, так и для динамического текста. Код FMX не работает ни для того, ни для другого. Если бы мне пришлось рискнуть предположить, я бы сказал, что FMX создает список шрифтов при запуске и сверяет список доступных шрифтов с этим списком (т.е. как кеш). Рискну предположить, что это делается для того, чтобы абстрагировать FMX от базовой операционной системы...
Если кто делал эту работу под firemonkey, буду признателен за любые советы. Кроме того, если кто-нибудь знает, как достичь той же цели под Mac, я тоже был бы признателен за указатель.
С уважением,
Mr Ed.
person
Mr Ed
schedule
24.08.2013