解析Delphi 窗口置顶,及非主窗口置顶
方法一:
procedure TForm1.Button2Click(Sender: TObject);
begin
Form2.Show;
Application.NormalizeTopMosts;
SetWindowPos(Form2.Handle, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE or SWP_NOSIZE);
end;
方法二:
https://blog.csdn.net/xiaowei_sql/article/details/50829178?tdsourcetag=s_pcqq_aiomsg
窗口置顶
setwindowpos(self.handle,HWND_TOPMIOST,0,0,0,0,SWP_NOMOVE or SWP_NOSIZE);//窗口置顶
setwindowpos(self.handle,HWND_NOTOPMIOST,0,0,0,0,SWP_NOMOVE or SWP_NOSIZE);//取消窗口置顶
非主窗口置顶
在Delphi中,非主窗体如何置顶
SetWindowPos(Form1.Handle, HWND_TOPMIOST, Left, Top, Width, height, SWP_SHOWWINDOW)可以将窗口放在所有窗口的最前面,但是这仅对一个应用程序的主窗口有效,非主窗口只能在这个应用程序的内部被置前,但是其他应用程序的窗口仍然会盖住他。
解决方法是将Form1的父窗口设为桌面,如:
procedure TForm1.CreateParams(var Params: TCreateParams);
begin
inherited;
with Params do
begin
WndParent := GetdesktopWindow();
end;
end;
但是这样会在进程管理器中的应用程序中多出一个Form1,怎样才能不让出现这个Form1了,其实解决方法很简单的,只需要将Form1的caption属性设为空就可以:Form1.Caption := '';
//下面这一种我使用过了,比较喜欢这种 ,很方便
还有另外一种可以不用将Form1的父窗口设为桌面也可以置前,那就是在窗体创建置前调用
Application.NormalizeTopMosts;
然后再调用SetWindowPos也可以实现将窗口置前的效果
---------------------
作者:CherryDuth
来源:CSDN
原文:https://blog.csdn.net/xiaowei_sql/article/details/50829178
版权声明:本文为博主原创文章,转载请附上博文链接!
欢迎关注我,一起进步!扫描下方二维码即可加我