在任何其他现有第三方窗口后面放置一个窗口

时间:2009-10-07 07:58:25

标签: windows delphi forms positioning z-order

为了截取特定窗口的截图,我需要在该窗口后面放置一个白色的TForm。我可以使用哪种Windows API来更改窗口的z顺序并将其正确放置?

3 个答案:

答案 0 :(得分:4)

尝试SetWindowPos()功能。

答案 1 :(得分:1)

在Delphi上,您可以使用SendToBack方法,.Top.Left属性。

form1.Top := ...;
form1.Left := ...;
form1.SendToBack;
  

程序SendToBack;

     

描述

     

使用SendToBack更改顺序   重叠的控制或表格。

     

控件堆叠的顺序   彼此顶部(也称为Z.   订单)取决于订单   控件放在表单上。对于   例如,如果你放一个标签和一个   表单上的图像,以便一个在顶部   另一个,放置的那个   首先在表格上成为一个   底部。因为这两个标签和   图像是非窗口控件,   他们像你期望的那样“堆叠”   至。调用SendToBack方法   顶部对象将其移动到另一个之下   对象

     

两个窗口的堆叠顺序   控件与堆叠相同   两个非窗口控件。对于   例如,如果您在表单上放置备忘录,   然后在它上面放一个复选框,   复选框保留在顶部。调用   SendToBack复选框使得   备忘录出现在最上面。

     

窗口和窗口的堆叠顺序   非窗口控件不能   混到。例如,如果你放一个   备忘录,一个窗口控件,在表单上,   然后放一个标签,一个非窗口   控制,在它上面,标签   在备忘录后面消失了。窗   控件总是叠加在上面   非窗口控件。在这   例如,调用SendToBack方法   备忘录什么都不做,标签   留在备忘录后面。

     

如果控件具有输入焦点   当SendToBack方法执行时,   它失去了输入焦点。

(编辑:WinSnap是一个非常好的实用程序,用于拍摄和编辑屏幕截图)

答案 2 :(得分:0)

如果你可以获得你想要的窗口的句柄,那么我会认为: 伪代码:

MyAppWindow.BringToFront

接着是

TargetWindow.BringToFront

应该有预期的效果,是吗?