禁用表单上升到顶部

use*_*145 4 forms delphi z-order

我想要一个表格,当我设置在z顺序的底部时,它停留在那里.我试过了:

SetWindowPos(Handle,HWND_BOTTOM,Left,Top,Width,Height,SWP_NOZORDER);
Run Code Online (Sandbox Code Playgroud)

当我与其他一些应用程序重叠时,它会根据需要保留在底部.但是,当我点击它时,它会升到顶部.然后我尝试了:

SetWindowPos(Handle, HWND_BOTTOM, Left, Top, Width, Height,
             SWP_NOACTIVATE or SWP_NOZORDER);
Run Code Online (Sandbox Code Playgroud)

以及来自这个网站的各种其他交换机... http://msdn.microsoft.com/en-us/library/ms633545.aspx

但它仍然升至顶峰.

Ser*_*yuz 8

SetWindowPos仅在调用窗口时才设置窗口的位置,它不会建立状态.处理WM_WINDOWPOSCHANGING是执行此操作的正确方法:

在处理此消息时,修改WINDOWPOS中的任何值会影响窗口在Z顺序中的新大小,位置或位置.应用程序可以通过设置或清除WINDOWPOS的flags成员中的相应位来阻止对窗口的更改.


type
  TForm1 = class(TForm)
    ..
  private
    procedure WindowPosChanging(var Msg: TWMWindowPosMsg);
        message WM_WINDOWPOSCHANGING;
  end;

..

procedure TForm1.WindowPosChanging(var Msg: TWMWindowPosMsg);
begin
  if Msg.WindowPos.flags and SWP_NOZORDER = 0 then
    Msg.WindowPos.hwndInsertAfter := HWND_BOTTOM;
  inherited;
end;
Run Code Online (Sandbox Code Playgroud)