Application toujours au dessus.

Résolu
Signaler
Messages postés
81
Date d'inscription
mardi 31 mai 2005
Statut
Membre
Dernière intervention
12 octobre 2007
-
Messages postés
81
Date d'inscription
mardi 31 mai 2005
Statut
Membre
Dernière intervention
12 octobre 2007
-
bonjour,
pour une de mes appli, je cherche à ce que les forms de celle-ci restent toujours au dessus de autres fenetres ouvertes dans windows.
pour cela j'ai essayer la fonction setzorder dans la procédure on paint de la forme mais cela fonctionne moyen. en effet dès que je clique sur une des forms de mon application la fonction setzorder ne semble plus fonctionner et mes fenetres sont cachées par exemple par IE. j'utilse aussi a la crétion de la form SetWindowPos(Handle ,HWND_TOPMOST,0,0,0,0, SWP_SHOWWINDOW);

Si vous avez une idée je suis preneur

6 réponses

Messages postés
81
Date d'inscription
mardi 31 mai 2005
Statut
Membre
Dernière intervention
12 octobre 2007
1
ben enfin j'ai trouvé le bon code, Manchester tu n'était pas loin, à savoir mettre dans la clause onpaint des forms créées dynamiquement (qui on la propriété formstyle:=fsStayOnTop) :

application.NormalizeAllTopMosts;
SetWindowPos(Handle, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE OR SWP_NOSIZE);

ca marche tout comme je veux.

En tout cas merci de votre aide.

Remarque 1: le gestionnaire de tâche peut écrire par dessus quand même.
Remarque 2: l'appli mange un poil plus de CPU, mais c'ets très peu quand même.
Messages postés
374
Date d'inscription
vendredi 20 octobre 2000
Statut
Modérateur
Dernière intervention
15 janvier 2021

Form1.Formstyle:=FsStayOnTop;

Bon Coding ....

ManChesTer.
Messages postés
81
Date d'inscription
mardi 31 mai 2005
Statut
Membre
Dernière intervention
12 octobre 2007
1
j'ai oublié de préciser(mea culpa) que les forms de l'appli que je voudrais voir au dessus des autres ne sont pas les forms principales, ce qui fait que dans mon cas FsStayOnTop ne marche pas.
Messages postés
374
Date d'inscription
vendredi 20 octobre 2000
Statut
Modérateur
Dernière intervention
15 janvier 2021

A tu essayer
Var TmHandle : Hwnd;

TmHandle:=GetTopWindow(GetDesktopWindow):
If TmHandle<>Handle then
SetWindowPos(Handle,TmHandle,left,top,width,height,SWP_SHOWWINDOW or SWP_FRAMECHANGED);

Bon Coding ....

ManChesTer.
Messages postés
81
Date d'inscription
mardi 31 mai 2005
Statut
Membre
Dernière intervention
12 octobre 2007
1
ben j'ai essayé de mettre ton code dans le on paint et à la creation, mais ca marche pas , aurais-je oublie quelque chose
Messages postés
3827
Date d'inscription
vendredi 23 juillet 2004
Statut
Modérateur
Dernière intervention
16 décembre 2021
46
Salut,
tu peux aussi essayer la fonction SetForegroundWindow de l'unité Windows :

function SetForegroundWindow(hWnd: HWND): BOOL;

SetForegroundWindow(Handle);

@+
Cirec