• 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 картинку, подложенную в стиль итема.

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


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

Для публикации сообщений создайте учётную запись или авторизуйтесь

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

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти


  • Последние посетители   0 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу