2015-02-08 85 views
1

我使用delphi XE2。在我的主窗體OnCreate過程中,我運行一些重要的元素,例如登錄過程等。我的問題是,當我顯示登錄表單(由OnCreate過程調用)時,我的應用程序在TaskBar上不可見 - 當主窗體變得可見時它就變得可見。問題是,當用戶通過其他應用程序覆蓋我的登錄表單時,在taskBar上沒有圖標時,他可能不知道我的應用程序已經運行並嘗試再次啓動它。他必須使用Ctrl + Tab來獲取我的應用程序登錄表單。強制應用程序在OnCreate過程中顯示TaskBar圖標

現在的問題...如何強制應用程序/操作系統在任務欄上顯示應用程序圖標時,OnCreate過程未完成?

問候 馬里奧

回答

8

您可以覆蓋登錄表單的CreateParams以包含WS_EX_APPWINDOW前樣式。

type 
    TLoginForm = class(TForm) 
    .. 

    protected 
    procedure CreateParams(var Params: TCreateParams); override; 
    ... 

    end; 

procedure TLoginForm.CreateParams(var Params: TCreateParams); 
begin 
    inherited; 
    Params.ExStyle := Params.ExStyle or WS_EX_APPWINDOW; 
end; 
+1

您的解決方案非常完美。謝謝! – 2015-02-09 11:13:57

0

創建並可以查看的主要形式的窗口時,任務欄按鈕被示出。那發生在OnCreate之後。簡單的解決方案是稍後顯示登錄表單。明顯的選擇是OnShow。確保你只在第一時間OnShow發生火災。

當然,這假定您希望主窗體在登錄窗體顯示時可見。如果沒有,那麼你需要確保登錄表單有一個任務欄按鈕。做到這一點,讓它無主。覆蓋CreateParams並將WndParent設置爲0。但是,如果你這樣做,你會得到一個與登錄表單標題相同標題的任務欄按鈕。當登錄表單關閉時,該任務欄按鈕將消失,並出現主窗體按鈕。你看起來可能並不滿意。

我想你可以試試Application.MainFormOnTaskbar設置爲False。做到這一點,應用程序窗口是任務欄按鈕後面的窗口。這可能是一個非常激烈的變化。我不能100%確定任務欄按鈕會顯示主窗體是否顯示,所以這可能是一個死路一條。

0

你可能要檢查我的這個答案:

Delphi Change main form while application is running

在這裏面我展示瞭如何實現登錄表單有點不同的形式給出(這在我的情況下,實際上是主要形式)然後工人形式(這是你現在作爲主要形式)。

我的方法的主要優點:

  • Becouse工人創建窗體後sucsessfull登錄它alows您根據特定用戶creditentials輕鬆dynamicaly創建自定義組件layour(不同級別的訪問)
  • 它讓您輕鬆地從當前用戶登錄而無需關閉整個應用程序。這是可行的,因爲工人形式不是應用程序的主要形式,因此可以在不導致應用程序終止的情況下隨時解散。登錄表單是應用程序的主要形式,只在某些用戶登錄時隱藏。
+0

您列出的所有優點都可以通過主窗體作爲實際主窗體輕鬆完成。我們也看不到你在這裏提出的建議。給我們一個簡介。它看起來像你提出的一樣,可以在其他答案中找到。但是,這裏的讀者會很高興知道。 – 2015-02-08 19:32:44

相關問題