2017-06-21 9 views
-1

小さなユーティリティウィンドウであるDelphiアプリケーションを開発しています。アイデアは、ユーザーに情報を提供し、ボタンを押すことを可能にする他のすべてのウィンドウの上に常にとどまるということです。アプリケーションのアイコンをタスクバーに表示したくないのは、それがユーザーのためではないはずの小さなユーティリティであり、ユーザーが望むならタスクバーに置くことができるようにしたいからです。タスクバーからアプリケーションを非表示にして、ウィンドウを常に上に維持する方法

は、私はすでに使用して、タスクバーのアイコンを表示しないようにそれを持って、次のthis questionから:

procedure TForm1.CreateParams(var Params: TCreateParams); 
begin 
    inherited; 
    Params.ExStyle := Params.ExStyle and not WS_EX_APPWINDOW; 
    Params.WndParent := Application.Handle; 
end; 

そして私はまた、フォームがフル画面でタスクバー上にあることと関係しているthis other questionを見つけましたアプリケーション:

procedure TForm1.CreateParams(var Params: TCreateParams); 
begin 
    inherited; 
    Params.Style := WS_POPUP or WS_VISIBLE; //will overlay taskbar 
end; 

私ができなかったことは、2人と結婚することです。

答えて

0

サードパーティのアプリケーションのウィンドウが常にWindowsコンポーネントの上の「最も一番上の」ウィンドウになる方法はありません。 Windowsコンポーネントでは、タスクバーとタスクマネージャ(Always on topオプションをオフにした状態)を参照しています。

としてはhereherehereを説明し、そうするために、特別なプライベートAPIを使用するように見えるZの順と行うWindowsコンポーネントの中で最も最上位のウィンドウとしてウィンドウを設定するための文書化されたAPIはありません。

アプリケーションウィンドウがタスクバーの背後に隠れてしまうのを防ぐ方法は、SetWindowPos(Handle, HWND_TOPMOST, 0, 0, 0, 0, SWP_NoMove or SWP_NoSize);またはSetForegroundWindowを使用して先頭に移動するタイマーを設定することです(それほどエレガントではありませんが)。

関連する問題