Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 18.12.2015, 10:52   #1
garuna
Форумчанин
 
Аватар для garuna
 
Регистрация: 13.04.2013
Сообщений: 180
Восклицание Плавное размытие VCL компонента, как добиться такого эффекта

Подскажите, как сделать такое вот плавное затенение и размытие в ListView внизу? И чтобы при прокрутке вот эта затененная размытость поднималась выше\ниже по мере скроллинга? С чего начать, куда копать)

garuna вне форума Ответить с цитированием
Старый 18.12.2015, 10:57   #2
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 19,042
По умолчанию

В стандартном если и получится, в чем сомневаюсь сильно, то самостоятельной прорисовкой с градиентами. А зачем такая заморочка? Сомнительная полезность для пользователя
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 18.12.2015, 11:08   #3
garuna
Форумчанин
 
Аватар для garuna
 
Регистрация: 13.04.2013
Сообщений: 180
По умолчанию

Аватар, нужно сделать чтобы можно было посмотреть только 20-30 записей в ListView. снизу еще панельку хочу прикрутить, типа "для дальнейшего просмотра введите пароль".

Затенение сделал через GradientFillCanvas(), как описано здесь http://stackoverflow.com/questions/3...ckground-color, но как сделать этот градиент прозрачным не знаю.

Последний раз редактировалось garuna; 18.12.2015 в 11:14.
garuna вне форума Ответить с цитированием
Старый 18.12.2015, 11:22   #4
TaLadno
Форумчанин
 
Регистрация: 03.06.2015
Сообщений: 393
По умолчанию

GDI+
TGPGraphics
TGPLinearGradientBrush <- (для "первого" цвета ставите полную прозрачность, для второго полную непрозрачность)

TGPGraphics.FillRectangle

Ну и рисовать все это дело на канве компонента

получится что-то типа такого (см. вложение)
Изображения
Тип файла: jpg Плавное размытие.jpg (6.4 Кб, 107 просмотров)
Вы там держитесь.

Последний раз редактировалось TaLadno; 18.12.2015 в 11:28.
TaLadno вне форума Ответить с цитированием
Старый 18.12.2015, 11:39   #5
garuna
Форумчанин
 
Аватар для garuna
 
Регистрация: 13.04.2013
Сообщений: 180
По умолчанию

Цитата:
Сообщение от TaLadno Посмотреть сообщение
GDI+
TGPGraphics
TGPLinearGradientBrush <- (для "первого" цвета ставите полную прозрачность, для второго полную непрозрачность)

TGPGraphics.FillRectangle

Ну и рисовать все это дело на канве компонента

получится что-то типа такого (см. вложение)

Вроде бы то что нужно. Спасибо, посмотрю что за GDI+
garuna вне форума Ответить с цитированием
Старый 18.12.2015, 22:04   #6
beegl
instagram
Участник клуба
 
Аватар для beegl
 
Регистрация: 24.05.2008
Сообщений: 1,453
Лампочка

Цитата:
Сообщение от garuna Посмотреть сообщение
по мере скроллинга? С чего начать, куда копать)
text - скроллин
beegl вне форума Ответить с цитированием
Старый 19.12.2015, 13:06   #7
IvaniuS
Форумчанин
 
Аватар для IvaniuS
 
Регистрация: 16.04.2007
Сообщений: 225
По умолчанию

По моему по скриншоту выше ему поможет -
Код:
procedure GradientFill_My(C: TCanvas; R: TRect; StartColor, EndColor: TColor; DoVert: boolean = false);
type
  TRIVERTEX_My = packed record
    X,Y:Integer;
    R,G,B,Alpha: Word;
  end;
var
  v: array[0..1] of TRIVERTEX_My;
  C0, C1: cardinal;
  M: array[0..1] of integer;
begin
  ZeroMemory(@v,SizeOf(TRIVERTEX_My)*2);
  C0:=ColorToRGB(StartColor);
  C1:=ColorToRGB(EndColor);
  v[0].x:=R.Left;
  v[0].y:=R.Top;
  v[0].R := MakeWord(0, GetRValue(C0));
  v[0].G := MakeWord(0, GetGValue(C0));
  v[0].B := MakeWord(0, GetBValue(C0));
  v[1].x:=R.Right;
  v[1].y:=R.Bottom;
  v[1].R := MakeWord(0, GetRValue(C1));
  v[1].G := MakeWord(0, GetGValue(C1));
  v[1].B := MakeWord(0, GetBValue(C1));
  M[0]:=0;
  M[1]:=1;
  GradientFill(C.Handle, @V, 2, @M, 1, byte(DoVert));
end;
IvaniuS вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как сделать чтобы после эффекта transition блок менялся? exoslam HTML и CSS 0 04.03.2015 17:36
Как добиться перекрывания диалоговых окон? SashaAVP Visual C++ 3 12.07.2013 10:57
Как добиться работы system()? Dmitry_B Visual C++ 11 03.02.2013 14:58
Runtime-ошибка компонента VCL 3D Hunter Общие вопросы Delphi 10 13.01.2013 12:54
Как реализуется размытие картинки в вебе? kokon Помощь студентам 0 29.12.2010 13:24