我有一个非常奇怪的问题。我在Win7平台上使用D2007。
我的应用程序在第一台 Win7 机器(我的)上运行良好,但 UI 无法在第二台 Win7 系统(三星平板电脑)上正确刷新。
我在平板电脑上使用远程调试。经过长时间的评估和调试后,我发现WM_SIZE
我的一个框架没有启动。每个框架都包含在她的父级和Align = alClient
.
在我的机器上,这条消息发送得很好,当然,用户界面也有正确的行为。
Windows Unit 的哪个外部函数发送 WM_Size 消息代码?
我将更详细地解释这个问题。
当应用程序最大化或调整大小时,我看到两台 Win7 机器之间的 UI 刷新行为有所不同。
某些帧的大小已正确调整,但其中一个未正确调整。结构如下:
MainForm -> 一些框架 -> PageControl -> TabSheet -> Frame1 -> Frame2。
注意 :
我的 UI 在大多数计算机上都能正常运行。
我使用标准的windows机制
在此结构中,直到包含 TabSheet 的所有帧都被调整大小,但 Frame1 没有。帧是在运行时创建的。
因为我知道 TabSheet 的名称,所以我可以在断点处停下来查看 WMSize。
我在其中使用了一些条件断点TWinControl.AlignControls
并抓住了Frame1
.
使用断点Classes.StdWndProc
,我可以跟踪发送到的消息Frame1.Handle
。
当一切正常时:
$0046 : WM_WINDOWPOSCHANGING
$0083 : WM_NCCALCSIZE
$0085 : WM_NCPAINT
$0014 : WM_ERASEBKGND
$0047 : WM_WINDOWPOSCHANGED
$0005 : WM_SIZE
当调整大小失败时:
$0046 : WM_WINDOWPOSCHANGING
$0085 : WM_NCPAINT
$0014 : WM_ERASEBKGND
$0047 : WM_WINDOWPOSCHANGED
因为,代码是相同的,操作系统在这两种情况下都是 Win7,我不明白这个问题。我只知道这两条消息WM_NCCALCSIZE
,并且WM_SIZE
在第二种情况下从未发送过。
这就是我寻找返回WM_SIZE
响应的函数的原因。