Maintenir une fenêtre non modale au premier plan avec l'api setwindowpos en 2 lignes de code

Soyez le premier à donner votre avis sur cette source.

Snippet vu 29 155 fois - Téléchargée 30 fois

Contenu du snippet

Permet de maintenir une fenêtre non modale au premier plan quand elle perd le focus

Source / Exemple :


' déclaration des constantes et de l'aPI
Private Const SWP_NOSIZE = &H1
Private Const SWP_NOMOVE = &H2
Private Const HWND_TOPMOST = -1
Private Declare Function SetWindowPos Lib "user32" (ByVal hwnd As Long, ByVal hWndInsertAfter As Long, ByVal X As Long, ByVal Y As Long, ByVal cx As Long, ByVal cy As Long, ByVal wFlags As Long) As Long

Private Sub PremierPlan(F As Form)
 ' appel de la fontion 
Call SetWindowPos(F.hwnd, HWND_TOPMOST, 0&, 0&, 0&, 0&, (SWP_NOSIZE Or SWP_NOMOVE))
End Sub

Private Sub Form_Load()
 ' appel de la fontion au chargement de la feuille 
PremierPlan Me
End Sub

A voir également

Ajouter un commentaire Commentaires
Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
69
Je pense a un subclassing de la fenetre a mettre en topMostquand wParam true, ta fenetre est en train d'etre activée> SWP_TOPMOST
quand wParam true, une fenetre d'une autre application est en train d'etre activée> SWP_NOTOPMOST

cf.
http://www.vbfrance.com/codes/MODULE-SUBCLASSER_38442.aspx

Option Explicit

Implements ISubclasser
Private mtWindow As SubClassedWindow

Private Const SWP_NOSIZE = &H1
Private Const SWP_NOMOVE = &H2
Private Const HWND_TOPMOST = -1
Private Const HWND_NOTOPMOST = -2
Private Declare Function SetWindowPos Lib "user32" (ByVal hWnd As Long, ByVal hWndInsertAfter As Long, ByVal X As Long, ByVal Y As Long, ByVal cx As Long, ByVal cy As Long, ByVal wFlags As Long) As Long

Private Sub Form_Load()
SetWindowPos Me.hWnd, HWND_TOPMOST, 0&, 0&, 0&, 0&, SWP_NOSIZE Or SWP_NOMOVE
InitiateSubClassing mtWindow, Me, Me.hWnd, True, WM_ACTIVATEAPP
End Sub

Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer)
TerminateSubClassing mtWindow
End Sub

Private Function ISubclasser_WindowProc(ByVal hWnd As Long, ByVal uMsg As MessageConstants, ByVal wParam As Long, ByVal lParam As Long) As Long
If wParam Then
SetWindowPos Me.hWnd, HWND_TOPMOST, 0&, 0&, 0&, 0&, SWP_NOSIZE Or SWP_NOMOVE
Else
SetWindowPos Me.hWnd, HWND_NOTOPMOST, 0&, 0&, 0&, 0&, SWP_NOSIZE Or SWP_NOMOVE
End If
End Function
Messages postés
6
Date d'inscription
mercredi 25 décembre 2002
Statut
Membre
Dernière intervention
22 février 2012

2012...Il existe encore des gens qui développe sur VB6 (plus pour longtemps, je vous rassure!).
J'avais cherché comment laisser une feuille TOPMOST seulement d'une application et pas de toutes, et ceci sans être en VBmodal, pendant plusieurs mois en vain...HUELCE, je ne sais pas si tu vas lire ce message, mais dans tout les cas, je te dit un tres grand merci!
Messages postés
60
Date d'inscription
mardi 4 septembre 2001
Statut
Membre
Dernière intervention
19 janvier 2009

c'est bien cette source, juste ce qu'il me fallait.

Merci.
Messages postés
10
Date d'inscription
jeudi 18 septembre 2003
Statut
Membre
Dernière intervention
3 août 2007

C'est vrai que le code produit des effets très sympas, mais la feuille disparait quand par exemple windows media player est en plein écran, ce qui me gene pour un projet en cours...
Quelqu'un a une idée?
Messages postés
45
Date d'inscription
jeudi 22 avril 2004
Statut
Membre
Dernière intervention
28 juillet 2004
2
lol
voila 2 ans que j'ai posé ce commentaire, et d'un coup je recois dans mon courrier "Vous avez recu un commentaire CodesSources" ?

Ce code, je l'avais cherché TRES longtemps moi aussi, et j'avais trouvé cette solution hyper pratique je sais plus ou...

Tant mieux si elle sert encore !

En attendant, je désactive le suivi de cette conversation !
Adieu donc ;)
Afficher les 17 commentaires

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.