如果您隱藏主窗體(Form1)並顯示另一個窗體(Form2),則在任務欄中沒有應用程序圖標。有沒有辦法糾正這一點,所以我也有孩子形式的應用程序圖標呢?如何安排一個非主窗體與任務欄按鈕相關聯?
回答
在下文中,我指的是所有者,我的意思是Windows概念,而不是VCL概念。
據我所知,你問如何讓你的其他表單在任務欄上有一個按鈕。對於頂層窗口安排的辦法有一個按鈕在任務欄是:
- 使該窗口可見,和無主,或
- 使該窗口可見,並有
WS_EX_APPWINDOW
擴展窗口風格。
您的應用程序的主要形式Form1
是無主的。當它可見時,它在任務欄上有一個按鈕。
您的應用程序中的其他表單擁有所有者。因此他們沒有任務欄上的按鈕。
爲了讓您的其他表單在任務欄上有按鈕,您需要確保上述任一選項適用。這涉及重寫CreateParams
。
type
TForm2 = class(TForm)
....
protected
procedure CreateParams(var Params: TCreateParams); override;
....
end;
....
procedure TForm2.CreateParams(var Params: TCreateParams);
begin
inherited;
Params.WndParent := 0;
end;
以上爲您提供了選項1.選項2,你會寫這樣的:
procedure TForm2.CreateParams(var Params: TCreateParams);
begin
inherited;
Params.ExStyle := Params.ExStyle or WS_EX_APPWINDOW;
end;
你問的意見在何處放置此代碼。那麼,VCL表格是在Win32之上實現的。這意味着VCL表單被實現爲頂級窗口。 Windows通過對接收各種參數的CreateWindowEx
的調用創建。 Windows可能會在表單的生命週期中重新創建,這需要一些腳手架。
該腳手架的一部分是Windows VCL控件的一種機制,用於提供傳遞給CreateWindowEx
的參數。這些參數在受保護的虛擬方法CreateParams
中提供。你永遠不會調用這個方法,你可以選擇實現它。該框架在需要知道CreateWindowEx
所需的參數時調用它。
通常VCL屬性映射到傳遞給CreateWindowEx
的參數(例如窗口樣式)。但是,對於我上面描述的兩個選項,都沒有這樣的VCL屬性。所以你需要實現CreateParams
。
心靈告訴我在哪裏實施這一切? – user763539
在你的表格中。你必須重寫CreateParams。你知道嗎? –
@ David Heffernan - 不,戴夫...從來沒有那樣.... – user763539
- 1. 如何獲取不是主窗體的窗體的任務欄按鈕?
- 2. 如何防止隱藏窗體時任務欄按鈕消失
- 3. 將鍵與Windows窗體上的按鈕相關聯
- 4. 如何將提交按鈕與只有一個值相關聯
- 5. 設置窗體位置與父窗體按鈕相關
- 6. 如何創建沒有任何窗口的任務欄按鈕?
- 7. 將Excel用戶窗體顯示爲任務欄中的按鈕
- 8. Rails窗體與ajax和非ajax按鈕
- 9. 如何將標籤與一組單選按鈕相關聯?
- 10. 如何將按鈕事件與唯一控件相關聯?
- 11. 如何隱藏窗體窗體,但保留任務欄條目?
- 12. java jdialog任務欄按鈕
- 13. 如何將1個cookie與使用jquery的2個按鈕中的任意一個相關聯?
- 14. 如何選擇一個窗體標籤內的按鈕與JavaScript?
- 15. 如何安排任務與GUI編程
- 16. 如何將標籤元素與單選按鈕相關聯
- 17. 如何將iOS鍵盤的「go」按鈕與UIButton相關聯?
- 18. 如何將Enter鍵與aspx頁面上的按鈕相關聯?
- 19. Reactive Framework(Rx)如何與.NET 4中的任務相關聯?
- 20. 如何從另一個窗體中單擊一個窗體的按鈕?
- 21. href與窗體按鈕
- 22. 如何安排JBoss任務?
- 23. 與yii安排任務
- 24. 用窗口'X'按鈕關閉窗體
- 25. 主窗體在任務欄中未顯示
- 26. ASP.NET MVC一個窗體,兩個按鈕
- 27. 一個窗體有兩個按鈕
- 28. javascript如何區分一個窗體的另一個按鈕?
- 29. 從任務欄隱藏窗體2
- 30. 強制模式窗體在任務欄
你分配給Form2.Icon嗎? 'Form2.Icon:= Application.Icon' –
有但沒有顯示在任務欄中。 – user763539
我以爲你錯過了一個圖標,看起來像你缺少任務欄按鈕。 –