Заголовок: Неверное поведение PaintTree в TVirtualStringTree при использовании poUnbuffered
Описание проблемы:
При использовании опции poUnbuffered в методе PaintTree компонента TVirtualStringTree отображается только первый узел дерева. Это поведение было замечено при использовании минимального примера VST и не меняется при смене версии компонента. При отключении опции poUnbuffered дерево отображается корректно. Несмотря на то, что все объекты правильно отрисовываются на канвасе, проблема, похоже, связана с обрезкой, но конкретная причина пока не ясна.
Подробности:
Между кодом для отрисовки с опцией poUnbuffered и без нее очень мало отличий. Основные различия заключаются в следующих фрагментах кода:
Создание битмапа NodeBitmap и настройка его параметров при отсутствии опции poUnbuffered.
Настройка высоты битмапа NodeBitmap и установка origine канваса при отсутствии опции poUnbuffered.
Несколько операций BitBlt, копирующих битмап на канвас при отсутствии опции poUnbuffered.
Альтернативный ответ:
Добавление столбца в заголовок дерева устраняет проблему, но это решение может не подходить для всех случаев использования.
Подтвержденный ответ (workaround):
Проблема связана с некорректной работой метода ClipCanvas после изменения origine канваса. Чтобы исправить это, нужно изменить второй фрагмент кода следующим образом:
Это решение исправило проблему в моей ситуации, но может не подходить для всех случаев использования. Будьте осторожны при внесении изменений в код, так как компонент TVirtualStringTree может быть чувствителен к подобным изменениям.
Проблема связана с некорректной работой метода ClipCanvas после изменения origine канваса в TVirtualStringTree при использовании poUnbuffered.
Комментарии и вопросы
Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.