Bonjour,
J'ai été confronté plusieurs fois à ce problème et avant d'utiliser une nouvelle fois des rustines en tous genre pour le contourner j'aimerais savoir s'il n'existe pas une solution plus efficace et définitive.
Il est possible en Delphi de passer une fenêtre en StayOnTop en définissant sa propriété FormStyle à fsStayOnTop. Selon les cas, l'effet obtenu est différent :
J'ai besoin dans mon cas d'appeler des fenêtres StayOnTop depuis une fenêtre modale, sans pour autant que ces fenêtres restent constamment devant les autres applications. En gros, un appel dans la situation 3 qui aurait le comportement 2.1. Si la fenêtre principale de l'application est passée en StayOnTop, elle restera au premier plan même lorsque l'application n'est plus l'application active. Il s'agit donc d'un StayOnTop par rapport aux autres application. Cette fonctionnalité n'est pas celle qui m'intéresse.
2. Si au sein de l'application une fenêtre autre que la fenêtre principale est passée en StayOnTop, cette fenêtre restera au premier plan de l'application et seulement de l'application, ce qui est exactement le comportement que je recherche.
3. Dernier cas, et c'est là que je rencontre un problème, si cette fenêtre StayOnTop est créée depuis une fenêtre ShowModal de l'application, celle-ci sera bien affichée en premier plan de l'application mais restera également visible devant toutes les autres applications, quelque soit l'application active !
(Le fichier joint donne une exemple des comportement 2 et 3)
J'ai fouillé un peu du coté des procédures RestoreTopMosts et NormalizeTopMosts de TApplication en parallèle avec l'utilisation du message windows WM_ACTIVATEAPP (qui signale l'activation ou la désactivation de l'application) mais sans succès. Je me suis également intéressé à ce sujet qui décrit un problème inverse (merci à l'auteur pour la solution proposée) mais qui ne m'apporte pas vraiment de solution, d'autant plus qu'il est totalement exclu d'impliquer des mises à jour de windows.
Quelqu'un a-t-il déjà été confronté à ce problème ? Avez-vous des solutions/pistes à explorer pour le résoudre ?
Merci
Partager