使用refresh全部刷新会产生闪烁,如何让只需要刷新的地方进行刷新,以消除闪烁。

解决方案 »

  1.   

    var
      MyRgn : HRGN;
    begin
      MyRgn := CreateRectRgn( l, t, r, b );
      SelectClipRgn( Canvas.Handle, MyRgn );
      .....................
      repaint code
      .....................
      SelectClipRgn( Canvas.Handle, 0 );
      DeleteObject( MyRgn );
    end;
      

  2.   

    用doublebuffered:=true可以消除闪烁
      

  3.   

    不是画布,是窗口,画布没有这个概念了。你可以只更新窗口的一部分,如 Wnyu(能) 所说的 InvalidateRect,这个是WIN32 API,你需要查查它的帮助。一个例子是:
    ----------------------------------------------------
    var
      rct: TRect;
    begin
    ...
    rct := Rect( x1, y1, x2, y2 );
    InvalidateRect( PaintBox1.Handle, rct );
    ------------------------------------------------------
    另一个功能更强的是InvalidateRgn,能够指定非矩形的区域,不过用起来也更麻烦。