Figeage de l'affichage forms [Résolu]

Signaler
-
 Saiylar -
Bonjour,

Une petit subtilité de VB6 que je ne comprends pas (encore ^^")

J'ai deux Form (F1 et F2). Dans F1 je met un bouton avec ce code :
Private Sub Command1_Click()
Form2.Show
End Sub


Dans F2 je met un autre bouton avec ce code :
Private Sub Command1_Click()
MsgBox "coucou"
End Sub


Mon problème c'est que si je met la propriété ShowInTaskbar = False pour F2, quand la msgbox apparaît à l'écran, F1 passe au premier plan (ce que je ne veux pas).

D'ou ma question, est ce qu'il est possible de figer l'ordre d'affichage des forms ? (F2 toujours devant F1, voir F1 non sélectionnable si F2 ouverte.... ??)

Merci d'avance ;)

9 réponses

Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
217
Mais si tu tiens tellement à donner la priorité aux choses futiles, voilà :

Dans Form1 :
Private Sub Command1_Click()
  Form2.Show
End Sub

dans Form2 :
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 Form_Activate()
     SetWindowPos Me.hWnd, -1, 0, 0, 0, 0, &H10 Or &H40 Or &H2 Or &H1
End Sub

Private Sub Command1_Click()
 MsgBox "voilà !"
End Sub


________________________
Réponse exacte ? => "REPONSE ACCEPTEE" facilitera les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement répéter son contenu. Je n'interviendrai que si nécessité de la compléter.
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
217
Bonjour,
Intéresse-toi donc à la méthode Zorder (ton aide VB6 sur ce mot).


________________________
Réponse exacte ? => "REPONSE ACCEPTEE" facilitera les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement répéter son contenu. Je n'interviendrai que si nécessité de la compléter.
Bonjour,
Intéresse-toi donc à la méthode Zorder (ton aide VB6 sur ce mot).


J'ai suivi ton conseil et cela ne résoud pas mon problème :/ F1 passe toujours devant F2. J'ai écris ça comme ça :

F1 :
Private Sub Command1_Click()
Form2.Show
Me.ZOrder 1
End Sub

Private Sub Form_Load()
Me.ZOrder 0
End Sub


F2 :
Private Sub Command1_Click()
MsgBox "coucou"
End Sub

Private Sub Form_Load()
Me.ZOrder (0)
End Sub


Même si je combine avec le .enable pour empêcher le changement de fenêtre, si je réduis l'application puis je l'agrandis, je retombe sur le F1 (alors que je voudrais F2 ) ...
Edit: j'ai retiré les "()" autour du 0 pour le F2 (étourderie) mais ca ne change rien .... Je peux juste mettre au premier et second plan par rapport aux autres programmes et la ce n'ai pas mon soucis :/
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
217
Ben mon pauvre ...
1) C'est bien évidemment aprés le Form2.show
que tu dois lui donner le 1er plan. Pas avant !
2) que vient faire le Me.zorder(0) dans form1 ?????
Question de seul bon sens :
dans form1 :
Private Sub Command1_Click()
  Form2.Show
  Form2.ZOrder
End Sub

et ça n'est que là, que l'on touche au Zorder (pas dans Form2) !



________________________
Réponse exacte ? => "REPONSE ACCEPTEE" facilitera les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement répéter son contenu. Je n'interviendrai que si nécessité de la compléter.
1) C'est bien évidemment aprés le Form2.show 
que tu dois lui donner le 1er plan. Pas avant ! 
2) que vient faire le Me.zorder(0) dans form1 ?????  


Si je ne me trompe pas :
Object.ZOrder 0 -> Objet au premier plan
Object.ZOrder 1 -> Objet en arrière plan

A partir de ça, quand je lance le programme je mettais le F1 au premier plan (peut être inutile vu qu'il n'y a que lui mais bon ...) puis quand je clique sur mon bouton, j'ouvre F2 et passe F1 en arrière plan

J'ai bien mis F2.ZOrder après le F2.show vu que je fais F2.show avec la command1 du F1 et F2.ZOrder avec le Form.load du F2 ... (ou alors y a un truc auquel j'ai pas pensé)

Private Sub Command1_Click()
  Form2.Show
  Form2.ZOrder
End Sub


Et sinon, ça ne change rien à mon problème. Quand la textbox s'affiche, j'ai toujours F1 qui reviens devant F2 ...
Et sinon, ça ne change rien à mon problème. Quand la textbox s'affiche, j'ai toujours F1 qui reviens devant F2 ...


Il est trop tot pour poster je crois ... quand je dis textbox, je voulais dire MsgBox ^^
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
217
Il est normal que les zorders soient modifiés durant (et uniquement durant) l'affichage de la msgbox (qui prend forcément le 1er plan et "bouleverse" tous les zorders)
Dès réponse donnée, l'ordre sera toutefois rétabli !

Si, maintenant, tu tiens à avoir toujours la F2 en premier plan de F1, y compris pendant l'affichage de la msgbox, rien ne t'empeche de carrément cacher (Hide) F1 avant la msgbox et de le remontrer ensuite (après réponse)

Dans F2, donc :
Private Sub Command1_Click()
  F1.Hide
  toto = MsgBox("coucou", vbApplicationModal)
  F1.Show
  Me.ZOrder
end sub


On pourrait également passer par une fonction de l'Api de Windows, mais tout cela me semble un peu démesuré pour une "nécessité" contestable.
________________________
Réponse exacte ? => "REPONSE ACCEPTEE" facilitera les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement répéter son contenu. Je n'interviendrai que si nécessité de la compléter.
Mais si tu tiens tellement à donner la priorité aux choses futiles


On peut dire que tu as le don pour dire les choses ...

Mais sinon, je pense que je vais me rabattre sur le masquage des forms qui devraient être en arrière plan. Ce n'est pas ce que je voulais mais je n'ai pas envie que cela vienne une usine a gaz.

Merci pour ton aide :)