【问题标题】:Delphi 6 : Detect when a Form is fully painted?Delphi 6:检测表单何时完全绘制?
【发布时间】:2010-10-14 02:29:19
【问题描述】:

是否有一种简单方便的方法来判断 TForm 上的所有组件、框架和子控件何时完全绘制?我基本上是在寻找与网页中的 onload() 事件等效的事件,但在 Delphi 表单的上下文中。即使某些表单元素当前不可见,这种技术仍然可以工作,并且在表单调整大小发生后它会再次触发。我有一些表单元素“抖动”,因为不同的表单元素会自动调整它们的大小,我想关闭重绘,直到全部完成以获得更清晰的外观。

【问题讨论】:

  • 你问错问题了。与其询问是否检测绘制事件的结束,您应该只询问如何定位控件而不发生闪烁。完全不同的问题,尤其是当您考虑不断更新自身的控件时,它们永远不会完成绘制。我建议您编辑您的问题,以便询问您真正想知道的内容。

标签: delphi resize refresh onload paint


【解决方案1】:

Delphi 控件有一个 BeginUpdate 和 EndUpdate 过程。回到我做 Delphi 编程的时候——已经有一段时间了——我们想要加载一个需要大量数据的网格,我们会在加载之前调用 BeginUpdate,然后在加载完成后调用 EndUpdate。这告诉控件停止接收消息(即在加载新记录时滚动)并等待一次更新 - 使一切“看起来”更快。您可以将控件设置为 BeginUpdate 模式,直到重新绘制完成,然后 EndUpdate 以同步所有内容。

【讨论】:

    【解决方案2】:

    看看 DoubleBuffered 属性:

    判断控件的图片是否 直接渲染到窗口或 首先绘制到内存中的位图。 Delphi 语法:属性 双缓冲:布尔值;描述 当 DoubleBuffered 为 false 时, 窗口控件绘制自己 直接到窗口。什么时候 DoubleBuffered 为真,窗口化 控制将自己绘制到内存中 然后用于绘制的位图 窗户。双缓冲减少了 控制时的闪烁量 重绘,但更多的记忆 密集的。当一个窗口控件是 一个码头站点并有一个相关的码头 经理,它必须是双缓冲的。 注意:某些控件,例如 TRichEdit,无法将自己绘制成 位图。对于这样的控制, DoubleBuffered 必须设置为 false。

    【讨论】:

      猜你喜欢
      • 2015-01-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-11-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多