我想使用系統托盤中顯示的圖標運行我的程序,但沒有從一開始就顯示mainform。如何隱藏mainform並仍然運行該程序?
編輯:
lMainForm := new MainForm;
lMainForm.ShowInTaskbar := true;
Application.Run(lMainForm);
沒有工作。一旦執行了Application.Run,mainform將與系統托盤中的圖標一起顯示。
我想使用系統托盤中顯示的圖標運行我的程序,但沒有從一開始就顯示mainform。如何隱藏mainform並仍然運行該程序?
編輯:
lMainForm := new MainForm;
lMainForm.ShowInTaskbar := true;
Application.Run(lMainForm);
沒有工作。一旦執行了Application.Run,mainform將與系統托盤中的圖標一起顯示。
你目前的問題是,您所呼叫的Application.Run
重載採取的主要形式作爲參數。這將顯示你不想要的主要形式。
相反,您應該調用其他Application.Run
重載之一。
例如,您可以撥打no parameter overload of Application.Run
。確保您已經創建並安裝了通知圖標。同時也創建,但不顯示你的主要形式。
當您準備好顯示主窗體時,響應通知圖標上的操作,請致電lMainForm.Show
。您還希望安排單擊表單上的關閉按鈕僅隱藏表單而不是關閉表單。我假設你想讓你的主窗體實例在後臺隱藏。
所以你的程序的頂層是這樣的:
//create and show the notify icon here
lMainForm := new MainForm;
lMainForm.ShowInTaskbar := true;
lMainForm.Visible := false;//I believe this is the default in any case
Application.Run;
你需要將項目添加到關閉應用程序的通知圖標菜單。如果您需要更多精細的控制應用程序生命週期,那麼你可能會更好使用接收的ApplicationContext
的Application.Run
overload
Application.Exit;
:以實現這一點。
由於我手邊沒有棱鏡,我已經用C#/ WinForms檢查過了,我希望它能轉移到棱鏡!
@大衛 - 它完美的作品。再次感謝你的幫助。 – ThN 2012-01-09 14:38:41
您是否嘗試過:
lMainForm.WindowState := System.Windows.Forms.FormWindowState.Minimized;
或
lMainForm.Hide(); // call on application start
最小化不好。您需要將Visible設置爲False才能將其從任務欄中取出。 – 2012-01-06 21:49:30
@ David,我將Visible設置爲false,並且mainform仍然顯示或顯示。我不想在任務欄中顯示或顯示mainform,但它的系統托盤中的圖標正在工作。順便說一句,你的頭像是非常有趣的哈哈。 – ThN 2012-01-06 21:54:03
你可以通過覆蓋SetVisibleCore()方法來實現。像這樣:
protected override void SetVisibleCore(bool value) {
if (!this.IsHandleCreated) {
CreateHandle();
value = false;
}
base.SetVisibleCore(value);
}
請注意Load事件不會觸發。請務必將您擁有的任何代碼移至構造函數(首選)或此重寫。
此代碼僅抑制窗口一次。您可以調用Show()或稍後設置Visible = true以使窗口正常顯示。您通常會在NotifyIcon的上下文菜單項的Click事件處理程序中執行此操作。
'系統托盤',你的意思是通知區?您需要爲該名稱(IIRC名稱)創建一個NotificationIcon項目,將其與「隱藏」窗體相關聯,併爲其提供一個上下文菜單/點擊處理程序,以允許您與該程序進行交互。 – 2012-01-06 21:53:21