При работе с FMX canvas в Delphi Berlin 10.1 Update 2 пользователи могут столкнуться с проблемой, когда попытка нарисовать линию без создания объекта TStrokeBrush приводит к неожиданным результатам. В данной статье мы рассмотрим, почему вторая попытка нарисовать линию не работает и как это можно исправить.
Проблема
В коде, представленном ниже, используется создание объекта TStrokeBrush для рисования линии:
brush := TStrokeBrush.Create(TBrushKind.Solid, TAlphaColors.Lightgray);
brush.Thickness := 2;
with Canvas do
begin
BeginUpdate;
DrawLine(PointF(10, 10), PointF(100, 10), 1, brush);
EndUpdate;
end;
Этот код работает корректно и рисует линию на холсте. Однако, при попытке использовать следующий код, линия не отображается:
with Canvas do
begin
BeginUpdate;
Stroke.Color := TAlphaColors.Black;
Stroke.Thickness := 2.0;
DrawLine(PointF(10, 10), PointF(100, 10), 1);
EndUpdate;
end;
Причина проблемы
Причиной отсутствия линии на холсте является изменение в поведении свойства Stroke.Kind, которое по умолчанию теперь установлено в None для всех платформ. В предыдущих версиях Delphi значение этого свойства могло отличаться в зависимости от платформы.
Решение
Чтобы решить проблему, необходимо явно установить свойство Stroke.Kind в TBrushKind.Solid перед рисованием линии. Вот пример кода, который решает проблему:
with Canvas do
begin
BeginUpdate;
Stroke.Kind := TBrushKind.Solid;
Stroke.Color := TAlphaColors.Black;
Stroke.Thickness := 2.0;
DrawLine(PointF(10, 10), PointF(100, 10), 1);
EndUpdate;
end;
Альтернативное решение
Также стоит отметить, что использование BeginScene и EndScene вместо BeginUpdate и EndUpdate может быть предпочтительным, особенно в контексте, отличном от обработчика событий перерисовки. Вот пример кода с использованием BeginScene и EndScene:
Brush := TStrokeBrush.Create(TBrushKind.Solid, TAlphaColors.Black);
Brush.Thickness := 2;
with Canvas do
begin
BeginScene;
DrawLine(PointF(10, 10), PointF(100, 10), 1, Brush);
EndScene;
end;
Заключение
В данной статье мы рассмотрели проблему рисования линии на FMX canvas в Delphi Berlin 10.1 Update 2 и предложили два способа её решения: явно установить свойство Stroke.Kind в TBrushKind.Solid или использовать TStrokeBrush вместе с BeginScene и EndScene. Оба метода позволяют успешно нарисовать линию на холсте, не создавая объект TStrokeBrush каждый раз.
При работе с компонентом FMX canvas в Delphi Berlin 10.1 Update 2 для корректного рисования линии на холсте необходимо явно установить свойство Stroke.Kind в значение TBrushKind.Solid, так как по умолчанию оно установлено в None, что приводит к отсутстви
Комментарии и вопросы
Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS