Lazarus и скины: пример переопределения отрисовки контрола

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

Lazarus и скины: пример переопределения отрисовки контрола

Сообщение Slavikk » 16.09.2010 10:58:13

Сделал небольшой пример переопределения отрисовки контрла (TButton): http://narod.ru/disk/24952094000/LCLSkin_Demo.7z.html. В идеале хотел бы отрисовывать контрол в OpenGL со сглаживанием шрифтов и плавной анимацией, но пока руки не дошли.

Раньше игрался с примером скинирования самой TForm, но бросил, так как получалось глючно и вызывала шок у пользователя нестандартным окном. Только Winamp - овское нестандартное окно по привычке не вызывает шок. Поэтому придерживаюсь мысли, что скины нужны для того, что бы контролы программы были приближены к общим контролам операционной системы, но при этом более плавно воспроизводилась анимация нажатия кнопок и отображения иконок, а так же менее рубленным (более сглаженным) был текст на кнопках. При этом все скины должны отключаться.

Если кто доведёт пример до готового компонента и поделится им, буду благодарен.
Аватара пользователя
Slavikk
постоялец
 
Сообщения: 208
Зарегистрирован: 15.01.2007 22:34:52
Откуда: Из лесов...

Re: Lazarus и скины: пример переопределения отрисовки контрола

Сообщение FedeX » 16.09.2010 11:29:49

Контрол ещё не смотрел, он есть два вопроса по замыслу, касательно OpenGL.
1. Что планируеться для каждого контрола иметь свой контекст OpenGL (какой срам! :D ) или отрисовывать все контролы на одном контексте (тогда как это реализовать и как быть с не-OpenGL контролами? )?
2. Как OpenGL поможет сгладить шрифты (и почему вы считаете, что это будет быстрее, чем обычные методы сглаживания)?
Аватара пользователя
FedeX
постоялец
 
Сообщения: 422
Зарегистрирован: 27.03.2006 09:25:34
Откуда: украина, житомир

Re: Lazarus и скины: пример переопределения отрисовки контрола

Сообщение Mr.Smart » 16.09.2010 11:39:11

Пример? :shock:
Ну уж извините....
Код: Выделить всё
  // Отрисовываем кнопку по умолчанию (иначе будет глючить)
  inherited WMPaint(Msg);

  // Получаем HDC кнопки
  DC := GetDC(Handle);

  // Отрисовка изображения из картинки поверх уже отрисованной кнопки
  BitBlt(DC, 0, 0, Width, Height, Form1.Image1.Picture.Bitmap.Canvas.Handle,
    0, 0, SRCCOPY);

мммдаа
Mr.Smart
долгожитель
 
Сообщения: 1796
Зарегистрирован: 29.03.2008 01:01:11
Откуда: из леса!

Re: Lazarus и скины: пример переопределения отрисовки контрола

Сообщение Slavikk » 16.09.2010 13:52:52

>FedeX
по п.1.: для каждого контрола иметь свой контекст OpenGL - это проще всего, но это и бредовее всего. Отрисовывать все контролы на одном контексте правильнее всего, но нужно чего то придумать, что бы отрисовывались и стандартные контролы.
по п.2.: мне просто анимация нужна более плавная и быстрая при рисовании графиков / блок схем в основном для этого и нужен конкретно мне OpenGL.

>Mr.Smart
Соласен пример ламерский, но главное, что стремился показать как переопределить процедуру отрисовки и как что то поверх контрола отрисовать. Т.е. это не из серии готовых кодов, а просто указатель в каком направлении копать.

Вот тут у человека пример компонента с полностью переопределённой TButton и своей процедурой отрисовки для неё (не переопределение отрисовки, а полностью своя): http://lirein.org.ru/cgi.php/index?topic=Bio.MaskImageControls.
Аватара пользователя
Slavikk
постоялец
 
Сообщения: 208
Зарегистрирован: 15.01.2007 22:34:52
Откуда: Из лесов...


Вернуться в Lazarus

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 54

Рейтинг@Mail.ru