FORM TOPMOST RELATIF

Messages postés
85
Date d'inscription
mardi 6 janvier 2004
Statut
Membre
Dernière intervention
7 mai 2007
- - Dernière réponse : Renfield
Messages postés
17280
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
21 juillet 2019
- 7 janv. 2004 à 17:03
SIMON LEBON:
Je cherche un moyen de presenter une form placée toujours au premier plan par rapport a une autre form.

Je connais l'api SetwindowsPos avec topmost, mais je veux que ma forme ne sois pas visible au premier plan si j'active une autre aplication.

Par exemple la form 'Rechercher' de Word reste au dessus de l'ecran, mais disparait si on ouvre un autre programme.
Est-ce que quelqu'un peut m'aider
Afficher la suite 

4 réponses

Messages postés
50
Date d'inscription
jeudi 26 décembre 2002
Statut
Membre
Dernière intervention
12 janvier 2004
0
Merci
La solution la plus simple que je connaisse est de placer un timer sur la form ...interval = 100 par exemple

Private Sub Timer1_Timer()
ZOrder
End Sub

ça replace constamment la form au premier plan ... sans gêner les autres applications ...

@+
Messages postés
17280
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
21 juillet 2019
57
0
Merci
Cette fenetre est dite modale !

tant qu'elle n'a pas été masquée, les autres fenêtres ne réagissent pas. (Comme quand tu utilises un MsgBox)

pour cela, fais simplement :

Form2.Show VbModal


By Renfield

[mailto:thomas_reynald@msn.com thomas_reynald@msn.com]

Aucune touche n'a ete blessee lors de la saisie de ce texte.......... ;)
Messages postés
85
Date d'inscription
mardi 6 janvier 2004
Statut
Membre
Dernière intervention
7 mai 2007
0
Merci
SIMON LEBON
Désolé les gars, mais ça ne marche pas.

L'idée du timer est bonne, mais la form au premier plan prend aussi le focus.

Quand à .shw vbmodal, il empeche tout simplement que la form en dessous devient active.

SVP, regarder Word et sa fenetre de recherche de mot. La fenetre de recherche est toujours visible au premier plan mais n'empeche pas la fenetre principal de prendre le focus.
Messages postés
17280
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
21 juillet 2019
57
0
Merci
SetWindowPos est bien la solution a utiliser, couplée avec un Timer.

Il ne faut pas utilise TOPMOST mais spécifier l'ordre des fenetres entre elles
ici j 'ai un Timer (interval raisonnable !) dans Form2, et dans Form1, je fais Form2.show.....

Const SWP_NOSIZE = &H1
Const SWP_NOMOVE = &H2
Const SWP_NOACTIVATE = &H10
Const SWP_SHOWWINDOW = &H40
Private Declare Sub 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)

Private Sub Timer1_Timer()
    SetWindowPos Form1.hWnd, Me.hWnd, 0, 0, 0, 0, SWP_NOACTIVATE Or SWP_SHOWWINDOW Or SWP_NOMOVE Or SWP_NOSIZE
End Sub


By Renfield

[mailto:thomas_reynald@msn.com thomas_reynald@msn.com]

Aucune touche n'a ete blessee lors de la saisie de ce texte.......... ;)