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