解析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
版權聲明:本文為博主原創文章,轉載請附上博文鏈接!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM