Ale*_*der 7 forms delphi repaint
例如,我需要在运行时禁用两个按钮.在我禁用第一个按钮后,它会变成灰色,第二个 - 它也会变成灰色.但我不知道如何同时重新粉刷!
我需要这样的东西:
如何实现?
Rem*_*eau 10
查看Win32 API WM_SETREDRAW消息.例如:
SendMessage(Handle, WM_SETREDRAW, False, 0);
Button1.Enabled := False;
Button2.Enabled := False;
SendMessage(Handle, WM_SETREDRAW, True, 0);
InvalidateRect(Handle, nil, True);
Run Code Online (Sandbox Code Playgroud)
在应用程序重新进入消息循环之前,无法处理消息,因此任何修改/更新依赖于消息处理的控制状态的尝试都不会在不"消息"消息的单个代码序列中起作用.
幸运的是,VCL控件通常通过Update方法提供强制重新绘制的方法,而无需等待消息处理:
Button1.Enabled := False;
Button2.Enabled := False;
Button1.Update;
Button2.Update;
Run Code Online (Sandbox Code Playgroud)
这与独立于禁用表单重新绘制无关.窗体不会重新绘制,直到您的应用程序进入消息循环,无论如何,因此禁用形式绘画,本身并不导致邮件处理单个过程中重新启用是在浪费时间.
这可能不是完全同时重新绘制两个按钮,但真正同时绘制两个单独的控件是不可能的,如果没有进入多线程GUI绘画代码,我认为这超出了这个问题的范围.以这种方式调用两个按钮上的更新将尽可能接近同时生效.
| 归档时间: |
|
| 查看次数: |
13692 次 |
| 最近记录: |