Конференция "Media" » как заставить окно перерисовываться? [D7, WinXP]
 
  • Andrey_ka (19.11.08 10:18) [0]
    как еще можно заставить окно перерисоваться чтобы не мигало кроме InvalidateRect(Handle,nil,false)?
  • han_malign © (19.11.08 10:30) [1]
    перекрыть WM_ERASEBACKGND
  • Andrey_ka (19.11.08 10:36) [2]
    а это откуда? в messages нет такого
    каково его значение?
  • han_malign © (19.11.08 11:46) [3]
    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
 
Конференция "Media" » как заставить окно перерисовываться? [D7, WinXP]
Есть новые Нет новых   [133926   +455][b:0][p:0]