При работе с контролами Firemonkey в Delphi, иногда возникают проблемы с изменением свойств шрифта, таких как размер и семейство, особенно когда это необходимо сделать программно для последующего сохранения в виде скриншота. В контексте вопроса пользователь столкнулся с трудностями в изменении свойств шрифта для меток (labels) и других текстовых стилевых элементов, которые должны быть корректно отображены на скриншоте.
Подтвержденный ответ
Для решения проблемы с изменением свойств шрифта в контролах Firemonkey, необходимо отключить стилизацию для соответствующих свойств. Это можно сделать, изменив свойство StyledSettings контрола. Например, для изменения семейства и размера шрифта, необходимо установить StyledSettings в значение, исключающее стилизацию для ssFamily и ssSize.
Также важно помнить, что после изменения свойств шрифта, необходимо вызвать метод Repaint, чтобы изменения отобразились на форме:
Label1.Repaint;
Альтернативное решение
В качестве альтернативного решения, можно обернуть текстовые элементы в TRectangle и затем нарисовать этот прямоугольник на изображение. Это позволит изменить свойства шрифта непосредственно в коде и сохранить их в скриншоте. Пример кода для процедуры Process формы:
procedure TfrmSnapshot.Process;
var
LRect1: TRectF;
X, Y, W, H: Integer;
begin
// ...
With imgSnap.Bitmap Do
Begin
// Создаем прямоугольник для каждого элемента
LRect1.Create(Round(Label1.Position.X), Round(Label1.Position.Y), Round(X + Label1.Width), Round(Y + Label1.Height));
// Устанавливаем свойства шрифта
RectMainTitle.Text := fTitle;
RectMainTitle.Font.Size := 40.0;
RectMainTitle.Font.Family := 'Arial';
// Очищаем bitmap
Clear(fColorBack);
// Перерисовываем прямоугольники на bitmap
RectMainTitle.PaintTo(Canvas, zp_GetLRect(RectMainTitle));
// ...
End;
// ...
imgSnap.MakeScreenshot.SaveToFile('test.jpg');
end;
И функция для получения прямоугольной области:
function TfrmSnapshot.zp_GetLRect(const AControl: TControl): TRectF;
var
X, Y, W, H: Single;
begin
// ...
Result := TRectF.Create(X, Y, W, H);
end;
Важно также убедиться, что форма, на которой отображается изображение, видима (вызовите Form.Show) перед созданием скриншота.
Заключение
Используя описанные методы, можно успешно изменить свойства шрифта для текстовых элементов в Firemonkey и корректно отобразить их на скриншоте.
Проблема заключается в изменении свойств шрифта в контролах Firemonkey для корректного отображения на скриншотах.
Комментарии и вопросы
Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS