为了截取特定窗口的屏幕截图,我需要在该窗口后面放置一个白色 TForm。我可以使用什么 Windows API 来更改窗口的 z 顺序并将其正确放置?
3 回答
试试这个SetWindowPos()
功能。
在 Delphi 上,您可以使用SendToBack
方法.Top
和.Left
属性。
form1.Top := ...;
form1.Left := ...;
form1.SendToBack;
程序 SendToBack;
描述
使用 SendToBack 更改重叠控件或表单的顺序。
控件相互堆叠的顺序(也称为 Z 顺序)取决于控件在窗体上的放置顺序。例如,如果您将标签和图像放在表单上,使一个在另一个之上,那么最先放置在表单上的那个将成为底部的那个。因为标签和图像都是非窗口控件,所以它们会像您期望的那样“堆叠”。调用顶部对象的 SendToBack 方法以将其移动到另一个对象下方。
两个窗口控件的堆叠顺序与两个非窗口控件的堆叠顺序相同。例如,如果您在表单上放置了备忘录,然后在其顶部放置了一个复选框,则该复选框仍位于顶部。为复选框调用 SendToBack 会使备忘录显示在顶部。
窗口和非窗口控件的堆叠顺序不能混合。例如,如果您在窗体上放置一个备忘录(一个窗口控件),然后在其顶部放置一个标签(一个非窗口控件),则该标签会在备忘录后面消失。窗口控件总是堆叠在非窗口控件之上。在这个例子中,调用备忘录的 SendToBack 方法什么都不做,标签留在备忘录后面。
如果在执行 SendToBack 方法时控件具有输入焦点,则它会失去输入焦点。
(编辑:WinSnap是一个非常好的截屏工具)
如果您可以在前面获得所需窗口的句柄,那么我会假设:伪代码:
MyAppWindow.BringToFront
其次是
TargetWindow.BringToFront
应该有预期的效果吧?