• 0
FeLDMARShaL

TShadowEffect

Вопрос

Если у нас у скроллируемой панели создать эффект тень, то эта тень распространяется на все элементы которые находятся внутри этой панели. (Рис1)

IMG0028PNG_4643971_20608265.png

Если мы начинаем скроолировать панель, то контрол уезжает а тень остается на месте (Рис2)

IMG0029PNG_5962481_20608297.png

 

Такой эффект можно убрать если отключить и снова включить Enable у компонента тени. Или если выполнить операцию перерисовки (RecalcSize) у скролл панели.

 

Есть ли более быстрый способ устранить негативный эффект тени? Или какой из способов отработает быстрее?

Изменено пользователем FeLDMARShaL

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

1 ответ на этот вопрос

  • 0

Все применения эффектов кэшируются, так как применение эффекта очень ресурсоемкая задача. То есть под конечное изображение выделяется дополнительный буфер, содержащий результирующее изображение с эффектом. Кэш обновляется либо в ручную, либо автоматически в нескольких случаях. При скроллировании, видимо эффект не обновляется. Это можно сделать в OnViewPortPositionChanged в ручную.

var
  EffectContainer: IEffectContainer;
begin
  if Supports(Button1, IEffectContainer, EffectContainer) then
    EffectContainer.NeedUpdateEffects;

Но повторюсь, в этом случае у вас заметно замедлиться скорость прокрутки. Лучше использовать для тени прозрачную png картинку, подложенную в стиль итема.

Владимир, bigjorj, Error и 1 другому понравилось это

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Создайте аккаунт или войдите для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!


Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите здесь.


Войти сейчас

  • Сейчас на странице   0 пользователей

    Нет пользователей, просматривающих эту страницу