窗體Form的FormStyle屬性設定為fsStayOnTop時屬性設定不起作用問題探討。
阿新 • • 發佈:2020-11-28
這個問題是這樣的:
在應用程式中載入兩個窗體,一個是模態的,另一個是非模態窗體。其中非模態窗體的屬性設定為fsStayOnTop就是讓其一直在前方顯示。這樣的效果就是在操作模態窗體的時候,可以看得到非模態窗體,但是不可以操作非模態窗體,這樣的效果是正確的。但是當程式執行某些操作之後,比如發了某個windows訊息之後,這樣的狀態就會發生改變,導致非模態窗體不能正常顯示。
問題是系統訊息傳送之後窗體的FormStyle屬性依然為fsStayOnTop但是就是不在前方顯示,此問題相當噁心啊。如果設定為模態窗體則當這個窗體出現的時候就不能操作其他窗體,設定為非模態的則會導致沒有獲得焦點時可以處於最上面,但一旦獲取焦點,就被mainform遮住了 設定成fsStayOnTop好象沒有什麼作用。
研究了一段時間,也用度娘度了好久,才找到一個合適的解決方案。現在共享出來,希望大家遇到之後能迅速解決~~
過載窗體的這個方法,然後在這個方法中指定窗體的控制代碼。
procedure CreateParams(var Params: TCreateParams); override;
procedure MainForm.Createparams(var Params: TCreateParams); begin inherited; With Params do begin WndParent := Application.MainForm.Handle; Params.ExStyle := WS_EX_TOPMOST; end; end;
這樣之後,程式便可以順利執行了。這是強制指定窗體的擴充套件屬性啊!