同上!~~procedure TWinControl.Update; begin if HandleAllocated then UpdateWindow(FHandle); end;procedure TWinControl.Repaint; begin Invalidate; Update; end;procedure TControl.Refresh; begin Repaint; end;
顶楼上的,我想不仅要学习楼上给出的代码,更重要的是学习他如何学习的方法。 所有的焦点就集中在Repaint上,从下往上看: Invalidate:使整个窗体的客户区域变为无效区域,然后调用Update方法; Update方法实际调用API函数向WinProc发送WM_PAINT消息,这样根据无效区域的大小(这里是整个窗体客户区域)来重绘。 从上往下看: Refresh调用的就是Repaint,两者没有不同,只是使用在不同的地方,方便理解,就好比Delphi里面经常出现的这样的一种比较好笑的声明: type TFileName = type string; 这是什么意思?呵呵,为了方便理解而已。
begin
if HandleAllocated then UpdateWindow(FHandle);
end;procedure TWinControl.Repaint;
begin
Invalidate;
Update;
end;procedure TControl.Refresh;
begin
Repaint;
end;
所有的焦点就集中在Repaint上,从下往上看:
Invalidate:使整个窗体的客户区域变为无效区域,然后调用Update方法;
Update方法实际调用API函数向WinProc发送WM_PAINT消息,这样根据无效区域的大小(这里是整个窗体客户区域)来重绘。
从上往下看:
Refresh调用的就是Repaint,两者没有不同,只是使用在不同的地方,方便理解,就好比Delphi里面经常出现的这样的一种比较好笑的声明:
type
TFileName = type string;
这是什么意思?呵呵,为了方便理解而已。