Свой отрисовщик компонента

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

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

Свой отрисовщик компонента

Сообщение Sasha » 21.01.2016 13:11:17

Сдел компонент, наследник от TWinControl. Всё вроде работает, но есть проблема с отрисовкой во время работы программы.
Проблема состоит в том, что сначала выполняется функция отрисовки Лазаруса, а после неё, так которая нужна мне,
в итоге видно как рисуется квадрат, залитый цветом Color, а затем поверх него, всё что мне нужно.
Вопрос, как недопустить отрисовку по умолчанию, а чтобы запускалась, только пользовательская?
Sasha
новенький
 
Сообщения: 41
Зарегистрирован: 07.12.2015 01:27:43

Re: Свой отрисовщик компонента

Сообщение MylnikovDm » 21.01.2016 18:41:36

Какая функция выполняется у Лазаруса и какую перекрыли вы?

Если названия функции одинаковые, значит вам следует убрать из своей функции вызов функции из предка, которая делается через ключевое слово inherited.

Если названия функций разные, то, возможно, вы перекрыли не ту функцию.

В таких случаях желательно публиковать код хотя бы вашей функции.
MylnikovDm
постоялец
 
Сообщения: 103
Зарегистрирован: 15.02.2007 21:26:10
Откуда: Челябинск

Re: Свой отрисовщик компонента

Сообщение Sasha » 22.01.2016 14:27:56

Если бы я знал какая функция точно отрисовывает объект, то и проблемы бы не было. Я перекрывал следующие функции:
procedure WMPaint(var Msg: TLMPaint); message LM_PAINT;
procedure PaintHandler(var TheMessage: TLMPaint);
procedure PaintWindow(DC: HDC); virtual;
Убирал у своего компонента все override (т.е. функция родителя должна была просто переписываться моей), естественно убирал inherited.
Код я выложу, чуть попозже. Его почистить нужно, чтобы выкинуть всё "лишнее".

Добавлено спустя 2 минуты 41 секунду:
результат перекрытия функций сводился к 2-м вариантам:
- моей отрисовки вообще не было, только Лазаровская
- сначала Лазаровская, затем моя отрисовка
Sasha
новенький
 
Сообщения: 41
Зарегистрирован: 07.12.2015 01:27:43

Re: Свой отрисовщик компонента

Сообщение zub » 22.01.2016 15:12:16

>>Убирал у своего компонента все override (т.е. функция родителя должна была просто переписываться моей), естественно убирал inherited.
override какраз убирать ненадо
zub
долгожитель
 
Сообщения: 2887
Зарегистрирован: 14.11.2005 23:51:26

Re: Свой отрисовщик компонента

Сообщение Mirage » 22.01.2016 16:09:02

А WMEraseBkgnd перекрывал? Или что там обрабатывает WM_ERASEBKGND.
Mirage
энтузиаст
 
Сообщения: 881
Зарегистрирован: 06.05.2005 20:29:07
Откуда: Russia

Re: Свой отрисовщик компонента

Сообщение Sasha » 22.01.2016 16:57:10

Спасибо Mirage, именно в этом и было дело, сделал обработчик сообщения WM_ERASEBKGND (LM_ERASEBKGND в Лазарусе) и всё теперь работает, как нужно.
Sasha
новенький
 
Сообщения: 41
Зарегистрирован: 07.12.2015 01:27:43


Вернуться в Lazarus

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

Сейчас этот форум просматривают: Yandex [Bot] и гости: 251

Рейтинг@Mail.ru