При работе с графикой в приложениях на FireMonkey для Android может возникнуть проблема с отображением текста. В частности, при использовании метода .filltext текст может отображаться в виде блоков белого цвета на фоне. В данной статье мы рассмотрим, как решить эту проблему, основываясь на пересказе и анализе предоставленного контекста.
Описание проблемы
Разработчики, использующие FireMonkey для создания приложений, которые работают на разных платформах, могут столкнуться с неожиданным поведением при выводе текста. В частности, если разработчик использует метод .filltext для отображения текста на графическом изображении, все может работать отлично на Win32, но на Android текст может быть представлен в виде блоков белого цвета на фоне, вместо ожидаемого текста с определенным цветом и стилем. Причиной этого является неправильно установленный кисть, используемая шрифтом, что не очевидно для понимания без дополнительных пояснений.
Подтвержденный ответ
Для корректного отображения текста на Android в FireMonkey необходимо установить цвета кисти, отвечающие за цвет текста и фон вокруг него. В коде это достигается следующим образом:
Image1.bitmap.Canvas.Fill.Color := TAlphaColors.Yellow; // цвет текста
Image1.Bitmap.Canvas.Fill.DefaultColor := TAlphaColors.black; // цвет фона
Это отличается от поведения на Win32, где цветом текста управляет свойство Stroke.Color, и вокруг текста создается прозрачный фон.
Пример рабочего кода
procedure TMainFrm.draw_waveform;
var
mRect: TRect; // желтый график на черном фоне с желтым текстом
begin
waveformunit.init(Image1); // инициировать изображение, возможно, в другом месте
// ОЧЕНЬ важно выполнить это для Android, иначе не будет работать!!!
// Image.Bitmap.SetSize(Trunc(Image.Width * Image.Canvas.Scale),
// Trunc(Image.Height * Image.Canvas.Scale));
// Image.Bitmap.canvas.Clear(TAlphaColors.black);
to_polygon;
Image1.bitmap.Canvas.BeginScene;
Image1.Bitmap.canvas.Clear(TAlphaColors.black);
Image1.bitmap.Canvas.Stroke.Thickness := 1;
Image1.bitmap.Canvas.Stroke.Color := TAlphaColorRec.Yellow; // цвет линии полигона
Image1.bitmap.Canvas.DrawPolygon(FPoints2, 1); // рисование полигона
// Теперь тестируем текст
Image1.Bitmap.canvas.Stroke.Kind := TBrushKind.bkSolid;
Image1.Bitmap.canvas.Stroke.Thickness := 1;
Image1.bitmap.Canvas.Fill.Color := TAlphaColors.Yellow; // цвет текста
Image1.Bitmap.Canvas.Fill.DefaultColor := TAlphaColors.black; // цвет фона
Image1.Bitmap.Canvas.Font.Size := 36;
Image1.Bitmap.Canvas.Font.Family := 'Arial';
Image1.Bitmap.Canvas.Font.Style := [TFontStyle.fsBold];
Image1.bitmap.Canvas.Blending := false;
Image1.bitmap.Canvas.Font.Size := 40;
mRect.Create(0, 0, Round(Image1.width), Round(Image1.height));
Image1.bitmap.Canvas.FillText(mRect, 'Hello Text!', False, 1,
[TFillTextFlag.RightToLeft], TTextAlign.Center, TTextAlign.Trailing);
Image1.bitmap.Canvas.EndScene;
// ...
end;
Альтернативный ответ (не требуется)
В контексте не было предоставлено информации, которая бы требовала альтернативного решения, поэтому данный раздел опускается.
Заключение
При работе с графикой и текстом в FireMonkey для Android важно помнить о различиях в настройке кистей и цветов между разными платформами. Установка правильных цветов для текста и фона позволит избежать проблем с отображением текста в блоках. Следуя приведенным рекомендациям, разработчики смогут обеспечить корректное отображение текста в приложениях, работающих на Android с использованием FireMonkey.
Проблема отображения текста при использовании метода `.filltext` в FireMonkey для Android связана с неправильной настройкой кисти шрифта, что приводит к отображению белых блоков на экране вместо ожидаемого текста.
Комментарии и вопросы
Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.