Вверх ↑
Ответов: 1926
Рейтинг: 172
#1: 2019-07-19 11:36:53 ЛС | профиль | цитата
М-да, крепость остаётся неприступной.
Пробовал перехватывать событие WM_PAINT, после чего вызывать OnPaint - вроде всё работает (стандартная отрисовка + событие).
Но проблема в том, что на OnPaint должен выдаваться контекст отрисовки (hdc), а через _onMessage он не выдаётся. Этот HDC можно получить ф-цией BeginPaint, которая готовит элемент к отрисовке, но её вызов сразу блокирует стандартную отрисовку контрола.

Вот примерно так (в Win.pas):
   case Msg.message of
WM_PAINT: begin
if Msg.wParam = 0 then DC := BeginPaint(Control.Handle, PaintStruct) else DC := Msg.wParam;
if assigned(OldPaint) then OldPaint(Control, DC);
_hi_onEvent(fOnPaint, integer(DC));
if Msg.wParam = 0 then EndPaint(Control.Handle, PaintStruct);
end;
end;

Именно эта ф-ция (вместе с парной EndPaint) содержится в KOL в ф-ции WndProcPaint, которая висит в SetOnPaint. Именно на этом участке происходит блокировка.
карма: 9
0
Редактировалось 1 раз(а), последний 2019-07-19 11:37:18