delphi 显示分辨率更改后的表单重画问题

7y4bm7vi  于 2022-11-04  发布在  其他
关注(0)|答案(1)|浏览(188)

我有一个 Delphi GUI应用程序,它运行得很好,直到显示分辨率的改变自动导致程序的GUI窗口被重绘。我们可以通过WM_DISPLAYCHANGE消息捕获这个显示事件。
在repaint事件中,似乎某些TListView组件在该时刻隐藏,直到它们再次变为可见时才进行重绘。
似乎只在窗体的可见组件上调用了重画,并且操作系统在不可见项再次变为可见时重画这些不可见项。
但是,当代码引用TListView中的项时,在WM_DISPLAYCHANGE消息之后,TListView中应该有项,但是TListView.Items.Count返回0,就好像TListView是空的一样。
在我使TListView在屏幕上可见之后,一切都恢复了正常,我可以再次引用TListView中的项。
我尝试显式调用TListView.Repaint()来更新它,而不必显示它,但它不起作用。
这是有记录的行为吗?
是否有方法可以立即重画不可见的表单组件,而不必使其在屏幕上可见?

mjqavswn

mjqavswn1#

如果没有分配句柄,ListView.Items.Count返回0。要使它返回正确的值,请在前面调用ListView.HandleNeeded

相关问题