Сдел компонент, наследник от TWinControl. Всё вроде работает, но есть проблема с отрисовкой во время работы программы.
Проблема состоит в том, что сначала выполняется функция отрисовки Лазаруса, а после неё, так которая нужна мне,
в итоге видно как рисуется квадрат, залитый цветом Color, а затем поверх него, всё что мне нужно.
Вопрос, как недопустить отрисовку по умолчанию, а чтобы запускалась, только пользовательская?
Свой отрисовщик компонента
Модератор: Модераторы
-
MylnikovDm
- постоялец
- Сообщения: 103
- Зарегистрирован: 15.02.2007 20:26:10
- Откуда: Челябинск
Какая функция выполняется у Лазаруса и какую перекрыли вы?
Если названия функции одинаковые, значит вам следует убрать из своей функции вызов функции из предка, которая делается через ключевое слово inherited.
Если названия функций разные, то, возможно, вы перекрыли не ту функцию.
В таких случаях желательно публиковать код хотя бы вашей функции.
Если названия функции одинаковые, значит вам следует убрать из своей функции вызов функции из предка, которая делается через ключевое слово inherited.
Если названия функций разные, то, возможно, вы перекрыли не ту функцию.
В таких случаях желательно публиковать код хотя бы вашей функции.
Если бы я знал какая функция точно отрисовывает объект, то и проблемы бы не было. Я перекрывал следующие функции:
procedure WMPaint(var Msg: TLMPaint); message LM_PAINT;
procedure PaintHandler(var TheMessage: TLMPaint);
procedure PaintWindow(DC: HDC); virtual;
Убирал у своего компонента все override (т.е. функция родителя должна была просто переписываться моей), естественно убирал inherited.
Код я выложу, чуть попозже. Его почистить нужно, чтобы выкинуть всё "лишнее".
Добавлено спустя 2 минуты 41 секунду:
результат перекрытия функций сводился к 2-м вариантам:
- моей отрисовки вообще не было, только Лазаровская
- сначала Лазаровская, затем моя отрисовка
procedure WMPaint(var Msg: TLMPaint); message LM_PAINT;
procedure PaintHandler(var TheMessage: TLMPaint);
procedure PaintWindow(DC: HDC); virtual;
Убирал у своего компонента все override (т.е. функция родителя должна была просто переписываться моей), естественно убирал inherited.
Код я выложу, чуть попозже. Его почистить нужно, чтобы выкинуть всё "лишнее".
Добавлено спустя 2 минуты 41 секунду:
результат перекрытия функций сводился к 2-м вариантам:
- моей отрисовки вообще не было, только Лазаровская
- сначала Лазаровская, затем моя отрисовка
>>Убирал у своего компонента все override (т.е. функция родителя должна была просто переписываться моей), естественно убирал inherited.
override какраз убирать ненадо
override какраз убирать ненадо
Спасибо Mirage, именно в этом и было дело, сделал обработчик сообщения WM_ERASEBKGND (LM_ERASEBKGND в Лазарусе) и всё теперь работает, как нужно.
