2016-01-13 47 views
2

我希望我的應用程序最小化到系統托盤,並且不會顯示在任務欄上。我跟着從thisthis答案的建議,並在項目源改變了MainFormOnTaskBar屬性:在Delphi中隱藏應用程序從任務欄不起作用

begin 
    Application.Initialize; 
    Application.CreateForm(TForm1, Form1); 
    Application.MainFormOnTaskBar := False; 
    Application.Run; 
end. 

接下來,我想這:

procedure TForm1.Button1Click(Sender: TObject); 
begin 
    Self.Hide; 
    WindowState := wsMinimized; 
    TrayIcon1.Visible := True; 
end; 

與此變體:

procedure TForm1.ApplicationEvents1Minimize(Sender: TObject); 
begin 
    Self.Hide; 
    WindowState := wsMinimized; 
    TrayIcon1.Visible := True; 
end; 

procedure TForm1.Button2Click(Sender: TObject); 
begin 
    Application.Minimize; 
end; 

但而托盤圖標正確顯示應用程序仍顯示在任務欄中。我究竟做錯了什麼?

+1

這是您在任務欄上看到的應用程序窗口。把它藏起來。 –

+0

大概ShowWindow會爲你做這項工作。我不認爲TApplication暴露了窗口句柄之外的任何東西。 –

回答

2

David建議我在任務欄中看到的不是我的主要形式,而是我的應用程序。根據他的建議,我隱瞞了使用ShowWindow

procedure TForm1.Button1Click(Sender: TObject); 
begin 
    Self.Hide; 
    WindowState := wsMinimized; 
    TrayIcon1.Visible := True; 

    ShowWindow(Application.Handle, SW_Hide); 
end; 

問題解決了。謝謝,大衛。

+0

當Application.MainFormOnTaskBar爲True時,Application.MainForm窗口控制任務欄按鈕(除其他外)。如果是False,則「應用程序」窗口控制任務欄按鈕。您應該努力將'MainFormOnTaskbar'設置爲True,這對於Vista +中正確的操作系統交互是非常必要的,將其設置爲False會在整個VCL中產生許多微妙的後果,因爲很多東西對MainFormOnTaskbar的依賴性是錯誤的。你不應該把它設置爲False才能完成你所要求的。 –

相關問題