我正在设计一个类似于 TGrid 的控件。
假设,我设计的 TMyGrid 继承于 TCustomControl,
就我知道的,TControl.Paint是放置代码绘图的好地方。很多情况下,都会导致TControl.Paint被Call。
比如说,当我们拖一个TForm从TMyGrid上经过时,
就会导致TControl.Paint被Call。问题是,如果TControl.Paint中处理整个绘制的过程,
那很容易导致TMyGrid发生闪烁的现象。就我所知,应该有一个简单的方法可以得知,
当一个TForm从TMyGrid上经过的时候,
最小应重绘的区域在哪里﹖那么,怎么判断呢﹖
假设,我设计的 TMyGrid 继承于 TCustomControl,
就我知道的,TControl.Paint是放置代码绘图的好地方。很多情况下,都会导致TControl.Paint被Call。
比如说,当我们拖一个TForm从TMyGrid上经过时,
就会导致TControl.Paint被Call。问题是,如果TControl.Paint中处理整个绘制的过程,
那很容易导致TMyGrid发生闪烁的现象。就我所知,应该有一个简单的方法可以得知,
当一个TForm从TMyGrid上经过的时候,
最小应重绘的区域在哪里﹖那么,怎么判断呢﹖
那么在 .Net Framework 下,答案又是什么呢﹖
所以建议你不在onMovingOver这种过程当中自主刷新,而是把刷新交给系统,如果你要确保自己的屏显正确可以在BeginMoving和EndMoving的时候自己刷新屏显.
系统的刷新很有意思,有时会出错,我就有几次把其他窗口的内容"留到"另外的窗口中,
再就是看你的grid主要处理对象和要达到的效果了.解决核心问题,其他的给出合理解释.
begin
e.ClipRectangle;
end;