2017-06-21 2 views
-1

Je développe une application Delphi qui est une petite fenêtre utilitaire. L'idée est qu'il reste toujours au-dessus de toutes les autres fenêtres fournissant des informations à l'utilisateur et lui permettant d'appuyer sur un bouton. Je ne veux pas montrer l'icône de l'application dans la barre des tâches car c'est un petit utilitaire qui ne devrait pas gêner l'utilisateur et je veux aussi que l'utilisateur puisse le placer sur la barre des tâches s'il le souhaite.Comment masquer une application dans la barre des tâches et la garder à tout moment à portée de la main

je l'ai déjà eu à montrer pas l'icône de la barre des tâches en utilisant les éléments suivants de this question:

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

Et je l'ai aussi trouvé this other question qui porte sur la forme étant au-dessus la barre des tâches en plein écran application:

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

Ce que je n'ai pas pu faire est d'épouser les deux.

Répondre

0

Il est impossible que la fenêtre d'une application tierce soit toujours la fenêtre la plus "haute" au-dessus des composants Windows. Par les composants Windows, je me réfère à la barre des tâches et au Gestionnaire des tâches (avec l'option Toujours activé cochée), par exemple.

Comme expliqué here, here et here, il n'y a pas d'API documentée pour définir une fenêtre de la fenêtre la plus supérieure dans l'ordre Z et des composants Windows qui font qui semblent utiliser une API privée spéciale pour le faire. Une manière (quoique pas très élégante) d'empêcher la fenêtre de l'application d'être cachée derrière la barre des tâches est de régler une minuterie qui l'amène vers le haut en utilisant SetWindowPos(Handle, HWND_TOPMOST, 0, 0, 0, 0, SWP_NoMove or SWP_NoSize); ou SetForegroundWindow.