-
как еще можно заставить окно перерисоваться чтобы не мигало кроме InvalidateRect(Handle,nil,false)?
-
перекрыть WM_ERASEBACKGND
-
а это откуда? в messages нет такого каково его значение?
-
WM_ERASEBKGND если InvalidateRect(Handle,nil,true) - то при BeginPaint(который вызывается в WM_PAINT) вызывается WM_ERASEBKGND, при котором - в VCL(TWinControl) по умолчанию делается заливка фона(вот оно мерцание)...
Но! Если в VCL Control-е включен DoubleBuffered - оно делается независимо от флага InvalidateRect(,,bErase)
Т.о., если, скажем, нужна форма с динамическим фоном: 1. DoubleBuffered - забыть как о страшном сне(и удивиться порядку повышения скорости) 2. Перекрыть WM_ERASEBKGND по аналогии с TWinControl.WMEraseBkgnd - где и делать отрисовку фона... 3. При необходимости обновления фона - InvalidateRect(Handle,nil,true) (Для выжимания капель таки уточнять необходимый регион отрисовки) 4. Если есть дочерние Control-ы(в случае VCL) - разобраться с ControlStyle - csOpaque
|