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

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

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

Ответить
Sasha
новенький
Сообщения: 41
Зарегистрирован: 07.12.2015 00:27:43

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

Сообщение Sasha »

Сдел компонент, наследник от TWinControl. Всё вроде работает, но есть проблема с отрисовкой во время работы программы.
Проблема состоит в том, что сначала выполняется функция отрисовки Лазаруса, а после неё, так которая нужна мне,
в итоге видно как рисуется квадрат, залитый цветом Color, а затем поверх него, всё что мне нужно.
Вопрос, как недопустить отрисовку по умолчанию, а чтобы запускалась, только пользовательская?
MylnikovDm
постоялец
Сообщения: 103
Зарегистрирован: 15.02.2007 20:26:10
Откуда: Челябинск

Сообщение MylnikovDm »

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

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

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

В таких случаях желательно публиковать код хотя бы вашей функции.
Sasha
новенький
Сообщения: 41
Зарегистрирован: 07.12.2015 00:27:43

Сообщение Sasha »

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

Добавлено спустя 2 минуты 41 секунду:
результат перекрытия функций сводился к 2-м вариантам:
- моей отрисовки вообще не было, только Лазаровская
- сначала Лазаровская, затем моя отрисовка
zub
долгожитель
Сообщения: 2890
Зарегистрирован: 14.11.2005 22:51:26
Контактная информация:

Сообщение zub »

>>Убирал у своего компонента все override (т.е. функция родителя должна была просто переписываться моей), естественно убирал inherited.
override какраз убирать ненадо
Mirage
энтузиаст
Сообщения: 881
Зарегистрирован: 06.05.2005 20:29:07
Откуда: Russia
Контактная информация:

Сообщение Mirage »

А WMEraseBkgnd перекрывал? Или что там обрабатывает WM_ERASEBKGND.
Sasha
новенький
Сообщения: 41
Зарегистрирован: 07.12.2015 00:27:43

Сообщение Sasha »

Спасибо Mirage, именно в этом и было дело, сделал обработчик сообщения WM_ERASEBKGND (LM_ERASEBKGND в Лазарусе) и всё теперь работает, как нужно.
Ответить