Invalidate方法通知Windows应该重新绘制表单的整个表面。最重要的是Invalidate不会立即强制执行绘制操作。 Windows只是存储请求,并且只会响应它
当前程序完全执行后,并且只要系统中没有其他待处理事件。 Windows故意延迟绘画操作,因为它是最耗时的操作之一。有时,这种延迟,
只有在多次更改后才能绘制表单,避免多次连续调用(慢)绘制方法。
•Update方法要求Windows立即更新表单的内容并重新绘制
。但请记住,只有存在无效区域时才会执行此操作。如果刚刚调用了Invalidate方法或结果,则会发生这种情况
用户的操作。如果没有无效区域,则对Update的调用完全没有效果。出于这个原因,通常在调用Invalidate后才会看到对Update的调用。
这正是两个Delphi方法Repaint和Refresh所做的。
•Repaint方法按顺序调用Invalidate和Update。因此,它会立即激活OnPaint事件。此方法的版本略有不同,称为Refresh。对于表格,效果是一样的;对于组件,它可能会略有不同。

当您需要向表单请求重绘操作时,通常应该调用Invalidate,
遵循标准的Windows方法。这在您需要时尤为重要
经常请求此操作,因为如果Windows花费太多时间来更新
屏幕,重绘的请求可以累积成一个简单的重绘动作。该
Windows中的wm_Paint消息是一种低优先级消息。更确切地说,如果一个
请求重新绘制正在等待,但其他消息正在等待,其他消息在系统实际执行绘制操作之前处理。
另一方面,如果多次调用Repaint,则每次Windows可以处理其他消息之前必须重新绘制屏幕,​​并且由于绘制操作是计算密集型的,因此实际上可能会降低应用程序的响应速度。有时候,
但是,当您希望应用程序尽快重绘表面时。在这些不常见的情况下,调用Repaint是可行的方法。

另一个重要的考虑因素是在绘制操作期间,Windows只重绘了
所谓的更新区域,加快了操作。因此,如果您只使a无效
窗口的一部分,只有该区域将被重新绘制。要做到这一点,你可以使用
InvalidateRect和InvalidateRegion函数。实际上,这个功能是一把双刃剑。这是一种非常强大的技术,可以提高速度并减少频繁重绘操作引起的闪烁。另一方面,它也可能产生不正确的输出。
一个典型的问题是,只有一些受用户操作影响的区域实际被修改,而其他区域保持原样,即使系统执行应该更新它们的源代码。实际上,如果绘制操作落在更新区域之外,系统会忽略它,就好像它是ou

Refresh和Repaint是一样的,它只是简单地调用了Repaint.
Update会导致整个窗口(对于没有窗口的TGraphicControl来说,就是它的父控件的窗口)立即处理WM_PAINT消息,即重画应该画的部分.
Invalidate使控件所在窗口的控件客户区域(对于TWinControl来说就是它的客户区域,对于TGraphicControl来说就是它的父控件的窗口在它的区域范围内的部分)失效,从而产生一个WM_PAINT消息,

但并不马上重绘,直到其它消息处理完或遇到一个Update的调用.
Repaint是立即重绘该控件,在TWinControl中其实就是调用了Invalidate和Update,在TGraphiControl中分不同情况作了不同处理,逻辑稍复杂一些,但功能是一样的.

Delphi中有关窗口绘制的更多相关文章

  1. Delphi中正常窗口的实现

    摘要: 在Delphi的VCL库中,为了使用以及实现的方便,应用对象Application创建了一个用来处理消息响应的隐藏窗口.而正是这个窗口,使得用VCL开发出来的程序存在着与其他窗口不能正常排列平 ...

  2. 有谁知道Delphi中"窗口"的创建过程?

      求助:有谁知道Delphi中窗口的创建过程,此“窗口”不仅仅指 TForm 类型, 还包括一般的窗口控件,如TButton,TEdit等等,希望有能够十分详细的运作 过程,比如说CreatPara ...

  3. 在Delphi中如何控制其它应用程序窗口

    在编写Delphi的应用程序中,常常涉及对其它Windows应用程序的操作.例如,在数据库的管理系统中,财务人员需要使用计算器,即可调用Windows内含的计算器功能,若每次使用,均通过“开始/程序/ ...

  4. Delphi中使用Dos窗口输出调试信息

    在项目文件 *.DPR (Project->View Source)  里加上{$APPTYPE   CONSOLE} 然后,在需要输出处加上 Writeln(‘your debug messa ...

  5. DELPHI中MDI子窗口的关闭和打开

    DELPHI中MDI子窗口的关闭 和打开       Delphi中MDI子窗口的关闭方式默认为缩小而不是关闭,所以当你单击子窗口右上角的关闭按钮时会   发觉该子窗口只是最小化,而不是你预期的那样被 ...

  6. DELPHI中MDI子窗口的关闭 和打开

    Delphi中MDI子窗口的关闭方式默认为缩小而不是关闭,所以当你单击子窗口右上角的关闭按钮时会发觉该子窗口只是最小化,而不是你预期的那样被关闭.解决办法是在子窗口的OnClose事件处理过程中加入如 ...

  7. Delphi中,除了应用程序主窗口会显示在任务栏上,其它窗口默认都不会显示在任务栏.

    Delphi中,除了应用程序主窗口会显示在任务栏上,其它窗口默认都不会显示在任务栏. Delphi中,除了应用程序主窗口会显示在任务栏上,其它窗口默认都不会显示在任务栏.没有MS开发环境中的ShowI ...

  8. DELPHI中如何闪烁应用程序窗口或任务栏按钮

    使用FlashWindowEx函数: 一.设置FlashWInfoDelphi中TFlashWInfo申明如下:TypeTFlashWInfo = record cbSize : LongInt; h ...

  9. Delphi中编辑word

      其他(28)   //启动Word   try     wordapplication1.connect;   except     messagedlg('word may not be ins ...

随机推荐

  1. 给你的app添加桌面widget

    首先,什么是桌面widget,桌面widget是一种桌面插件,如下图: 这种类型的控件叫做widget,一般长按桌面会弹出一个界面让你选择控件,选择完了拖到桌面就能使用了. 下面我们为这个app来添加 ...

  2. 蜕变成蝶~Linux设备驱动之字符设备驱动

    一.linux系统将设备分为3类:字符设备.块设备.网络设备.使用驱动程序: 字符设备:是指只能一个字节一个字节读写的设备,不能随机读取设备内存中的某一数据,读取数据需要按照先后数据.字符设备是面向流 ...

  3. Docker-集群swarm(5)

     Docker集群的概念 群集是一组运行Docker并加入集群的计算机.在此之后,您继续运行您习惯使用的Docker命令,但现在它们由群集管理器在群集上执行.群中的机器可以是物理的或虚拟的.加入群组后 ...

  4. Windows10环境下使用VisualSVN server搭建SVN服务器

    参考: Windows10环境下使用VisualSVN server搭建SVN服务器 要搭建个svn用.之前自己的服务器用的乌龟.后来用了这个VisualSVN server. 具体教程见上链接.暂无 ...

  5. Ubuntu系统安装nginx

    1.首先查看linux系统 cat /proc/version Linux version 4.9.59-v7+ (dc4@dc4-XPS13-9333) (gcc version 4.9.3 (cr ...

  6. 进程池的回调函数callback

    如下代码: from multiprocessing import Pool def func1(n): print('in func1') return n*n def func2(nn): pri ...

  7. jenkins启动java项目的jar包总是退出

    参考文档: https://www.cnblogs.com/DFX339/p/8241253.htmlhttps://blog.csdn.net/windanchaos/article/details ...

  8. 9 个用于移动APP开发的顶级 JavaScript 框架【申明:来源于网络】

    9 个用于移动APP开发的顶级 JavaScript 框架[申明:来源于网络] 地址:http://www.codeceo.com/article/9-app-javascript-framework ...

  9. Python IDLE arcpy设置环境变量

    在IDLE中 import arcpy help(arcpy) 得到的路径为: 但是在arcmap中,路径为: 说明IDLE的环境变量设置有问题: 在windows的环境变量中设置环境变量PYTHON ...

  10. C/S和B/S的应用的区别

    C/S: C是指Client,S是指Server.C/S模式就是指客户端/服务器模式.通过它可以充分利用两端硬件环境的优势,将任务合理分配到Client端和Server端来实现,降低了系统的通讯开销. ...