2010-03-17 87 views
3

這是交易。主窗體設置爲fsNormal。這個主窗體通過浮動工具欄全屏顯示。工具欄是標準樣式,樣式設置爲fsStayOnTop德爾福fsStayOnTop奇數

大多數情況下,按預期工作。 mainform顯示,工具欄浮在上面。

有時候(這是要找到一個可重複的一系列步驟管不着)時,ALT-Tab鍵,並從其他應用程序(或單擊任務欄上的Delphi應用程序圖標時)以下症狀可能發生:

  1. 當離開Delphi應用程序時,浮動的最上面的fsStayOnTop窗體停留在其他應用程序之上。因此,如果我使用Firefox的話,浮動菜單也會保持在Firefox的頂部。

  2. 當從另一個應用程序的Alt鍵切換到Delphi應用程序時,浮動菜單不可見(因爲它位於fsNormal mainform的後面)。

這是一個已知的錯誤,還是有任何黑客強迫它的工作?當應用程序的多個副本正在運行時(這些應用程序之間沒有交互,並且應該在自己的Windows「沙箱」中運行),這也似乎發生的最多。

就好像德爾福弄糊塗了哪個窗口意味着置頂,並將它們互換或將浮動窗體更改爲靜態模式。

還是我誤解了fsStayOnTop?我假設將表單樣式設置爲fsStayOnTop可以使其保持在當前應用程序中的所有其他表單之上,而不是其他所有窗體在其他正在運行的應用程序中。

回答

0

更多信息和可能的解決方案。

將floatform設置爲fsnormal。

當mainform.activate事件觸發時調用floatingform.bringtofront。

但我也使用stayontop所有其他應用程序對話框。當應用程序的多個副本正在運行時,對話框顯示相同的問題(即,如果app1的對話框處於打開狀態並且離開對話框的對話框可能會保留在所有其他程序的頂部)。

+0

還有一個問題。我怎樣才能設置一個窗體樣式,以保持只有另一種形式(在這種情況下,主窗體)?然後我可以改變對話框而不是fsstayontop,當他們激活時,我可以告訴他們只留在主表頂部? PS,很抱歉回答我自己的問題。我沒有意識到我應該評論而不是回答。 – TallGuy 2010-03-17 09:24:01

+3

是的,你應該移動這整個信息編輯你的問題。 – 2010-03-17 09:45:00

0

我不知道這方面的錯誤。

讓我先解釋這個過程是如何工作的:創建保存的形式,通過調用Win32函數SetWindowPosHWND_TOPMOST參數窗口中

德爾福首先使用fsStayOnTop風格。

有關SetWindowPos的詳細說明,請參閱http://msdn.microsoft.com/en-us/library/ms633545(VS.85).aspx

每次應用程序被停用或最小化時,Delphi枚舉所有最頂層的窗體來規範化窗體(normalize是vcl用來表示最頂層的窗口變成不是最頂層的術語)並且它保持內部當時最頂層的所有窗口的列表。

每次應用程序被激活或恢復,Delphi使用存儲在最頂層窗口的列表中的信息,以

所以恢復所有最頂層的形式(使用setWindowPosHWND_TOPMOST參數)給我的問題似乎是在Delphi在應用程序最小化時枚舉窗口時存儲信息的方式。

我會進入最小化或取消激活功能,並檢查最上面的窗口列表(它在Application.FTopMostList上)是否被正確列出。

+0

一些更多的信息。有一些與我在谷歌搜索中用fsstayontop顯示的內容相同的已知錯誤。 我的修復程序現在將所有對話框設置爲fsnormal。然後在mainform.onactivate下添加這段代碼 如果(floatingmenu <> nil)和; 這可以像現在預期的那樣工作,並且可以遠離任何delphi怪異處理fsstayontop窗體的方式。 – TallGuy 2010-03-20 23:13:03

-1

我有一個類似的問題,這個環節我有很大幫助:Delphi: Balloon Form with fsStayOnTop not working in Win7

當我打電話Application.NormalizeTopMosts()函數,則最頂層的形式表現如我所料。

+0

考慮用參考頁面的摘錄擴展您的答案。請參閱[如何回答](http://stackoverflow.com/questions/how-to-answer)瞭解裸露鏈接不被視爲良好答案的詳細信息。 – bytebuster 2012-10-29 00:14:59