Перекрытие отрисовки заднего фона.

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

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

Перекрытие отрисовки заднего фона.

Сообщение olegy123 » 20.03.2018 19:13:37

Помогите.
Я тут стал разбираться с DX. Хочется рисовать в окошке TWinControl.
Нормально, кнанву рисую .. но почему то Lazarus перерисовывает мне задний фон.
Точнее фон родителя окна.. почему то постоянно мне канву из DX перекрашивает в фонюю


стал отлаживать код. Сталкнулся с интересной функцией.
GetNeedParentPaint(AWindowInfo:PWin32WindowInfo;AWinContrlol:TWinContrlol):Boolean; в win32callback.inc

Все там же TWindowProcHelper.SendPaintMessages(ControlDC:HDC);

Походу дела вызывает эту функцию главное окно. Перехватить красиво обычными методами не удается, а хукать TWinProc у окна не правильно.

Можно ли от этого избавится? Существуют ли волшебные overlapping галочки?
olegy123
долгожитель
 
Сообщения: 1643
Зарегистрирован: 25.02.2016 12:10:20

Re: Перекрытие отрисовки заднего фона.

Сообщение zub » 21.03.2018 09:30:36

Вроде как если у родителя выставлен WS_CLIPCHILDREN оно не должно отрываться на детках.
может контрол сам себе фон рисует? если так, то переопределение EraseBackground должно спасти

Добавлено спустя 2 минуты 6 секунд:
Для лазаря есть аналог TOpenGLControl на DX?
zub
долгожитель
 
Сообщения: 2884
Зарегистрирован: 14.11.2005 23:51:26

Re: Перекрытие отрисовки заднего фона.

Сообщение olegy123 » 21.03.2018 15:35:06

zub писал(а):Для лазаря есть аналог TOpenGLControl на DX?

Нема, есть только хендлы DX9/DX10/DX11/DX12
https://github.com/CMCHTPC/DelphiDX12

Вообще DX9 <> DX10 <> DX11 <> DX12 - они могут ломатся..

zub писал(а):Вроде как если у родителя выставлен WS_CLIPCHILDREN оно не должно отрываться на детках.

я сделал без него..
olegy123
долгожитель
 
Сообщения: 1643
Зарегистрирован: 25.02.2016 12:10:20

Re: Перекрытие отрисовки заднего фона.

Сообщение ElectroGuard » 01.04.2018 12:10:40

Код: Выделить всё
procedure WMEraseBkgnd(var Message: TWmEraseBkgnd); message WM_ERASEBKGND;
procedure TControl.WMEraseBkgnd(var Message: TWmEraseBkgnd);
begin
  Message.Result := 1;
end;

?
ElectroGuard
новенький
 
Сообщения: 71
Зарегистрирован: 03.06.2016 12:10:22

Re: Перекрытие отрисовки заднего фона.

Сообщение olegy123 » 02.04.2018 13:31:28

WMEraseBkgnd не спасает от мерцания.. в итоге виден GUI фон элементов.
не.. там идет собственный TWinProc и перекрытие LM_PAINT.

Добавлено спустя 3 минуты 1 секунду:
Пока "завис" - думаю отказатся от TFPImage использовать AggPas.

Добавлено спустя 1 минуту 52 секунды:
Нет работы с градиентами, TTypeFree непонятно как работает.
olegy123
долгожитель
 
Сообщения: 1643
Зарегистрирован: 25.02.2016 12:10:20


Вернуться в Lazarus

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

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

Рейтинг@Mail.ru