我正在设计一个类似于 TGrid 的控件。
假设,我设计的 TMyGrid 继承于 TCustomControl,
就我知道的,TControl.Paint是放置代码绘图的好地方。很多情况下,都会导致TControl.Paint被Call。
比如说,当我们拖一个TForm从TMyGrid上经过时,
就会导致TControl.Paint被Call。问题是,如果TControl.Paint中处理整个绘制的过程,
那很容易导致TMyGrid发生闪烁的现象。就我所知,应该有一个简单的方法可以得知,
当一个TForm从TMyGrid上经过的时候,
最小应重绘的区域在哪里﹖那么,怎么判断呢﹖

解决方案 »

  1.   

    楼主说的不是会是RePaint方法吧
      

  2.   

    To duanhai,不是 Repaint。目前我找到最有可能的答案是 Canvas.ClipRect不知其他人是否认同,有没有其它可能的答案﹖
      

  3.   

    Canvas.ClipRect 是 Win32 下的可能答案。
    那么在 .Net Framework 下,答案又是什么呢﹖
      

  4.   

    闪烁的问题通常是因为在段时间内屏显被不断的刷新,
    所以建议你不在onMovingOver这种过程当中自主刷新,而是把刷新交给系统,如果你要确保自己的屏显正确可以在BeginMoving和EndMoving的时候自己刷新屏显.
    系统的刷新很有意思,有时会出错,我就有几次把其他窗口的内容"留到"另外的窗口中,
    再就是看你的grid主要处理对象和要达到的效果了.解决核心问题,其他的给出合理解释.
      

  5.   

    在 FCL 下,prococedure TMyGrid.PaintEventHandler(Sender: Object; E: PaintEventArgs);
    begin
      e.ClipRectangle;
    end;