Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Решение проблемы рисования линии на холсте FMX canvas в Delphi Berlin 10.1 Update 2

Delphi , Графика и Игры , Canvas

При работе с 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




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: Canvas ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-12-22 20:14:06
2025-02-05 22:10:06/0.0035190582275391/0