Problème de réduction de fenêtre

Signaler
Messages postés
252
Date d'inscription
mardi 3 juin 2003
Statut
Membre
Dernière intervention
29 juin 2013
-
Messages postés
252
Date d'inscription
mardi 3 juin 2003
Statut
Membre
Dernière intervention
29 juin 2013
-
Bonjour à tous,
J'ai une appli qui démarre en mode fenêtre agrandie (vbMaximize).
Je voudrais mettre en place un dispositif qui réorganise la feuille lorsqu'elle passe en mode réduit (vbNormal).
Pour cela, j'essaye d'intercepter le Form_Resize:
Private Sub Form_Resize()
If Me.WindowState = vbMaximized Then
Affi.height = Screen.height - Affi.Top - 1950
End If
If Me.WindowState vbNormal And iws 1 Then
Affi.height = Screen.height - Affi.Top - 5000
End If
End Sub
Malheureusement, au démarrage, VB considère dans tous les cas que le WindowState est en position normale!
Mon appli démarre donc en fenêtre agrandie avec une disposition des objets correspondant au mode réduit.
J'ai essayé un tas de pointeurs pour lui faire ignorer la position de démarrage; mais en vain.
Y aurait-il un autre dispositif que WindowState pour intercepter un clic sur le bouton "Agrandir"?
Merci pour votre aide.
Jacques13

32 réponses


Bonjour,

Cela fait très longtemps que je ne n'ai pas "joué" avec VB6, mais, je regarderais quelque chose comme cela, d'un coup que cela fonctionnerait.

À la fin de ton application, ou même "à la mitaine", tu pourrais mettre dans le registre (avec SaveSettings, je pense) les paramètres de ta fenêtre.

Puis dans le Form_load, tu récupérerais les paramètres dans le registre (avec GetSettings, toujours je pense) et tu les appliquerais à ta fenêtre.
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
239
Bonjour,
J'ignore tout des raisons qui te motivent et répond donc uniquement (et les yeux fermés) à la question :
Y aurait-il un autre dispositif que WindowState pour intercepter un clic sur le bouton "Agrandir"?

on ne parle pas de "dispositif", mais d'évènement declenché.
Sous VB6 il s'agit de l'évènement Resize du Form.
Pour savoir quel est la modif resize apportée : on examine son nouvel WindowState. Si l'ancien a été mis en variable static ou en variable Générale : on compare avec le nouveau et on sait !
Où est donc le problème ?
________________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement vous dire ce qu'elle contient. Je n'interviendrai qu'en cas de nécessité de développ
Messages postés
252
Date d'inscription
mardi 3 juin 2003
Statut
Membre
Dernière intervention
29 juin 2013

Où est donc le problème ?

...il est qu'au démarrage, le Form_Resize considère que le WindowState est vbNormal et non vbMaximize.
Ce qui est, bien sûr, erroné.
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
239
De surcroit :
1) Qu'est donc Affi ? (tu n'en dis pas un mot !)
Je vais supposer que c'est le Form en cours ... et dans ce cas c'est Me.
Mais alors :
If Me.WindowState = vbMaximized Then
  me.height = Screen.height -me.Top - 1950
End If 

est aberrant ! on ne peut donner des dimensions à un form en mode maximized.
Pour le redimensionner, il faut d'abord le pasqser en mode normal !
If Me.WindowState = vbMaximized Then
  Me.WindowState = vbNormal
  Me.Height = Screen.Height - Me.Top - 1950
End If

2) la terminologie, en développement est un élément essentiel. On ne saurait donc écrire :
qui réorganise la feuille lorsqu'elle passe en mode réduit (vbNormal)

Le mode "réduit" est vbminimized, pas vbnormal, hein ...
Une broutille et je cherche "des poux sans sens" ? ===>> NON NON et encore NON !


________________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement vous dire ce qu'elle contient. Je n'interviendrai qu'en cas de nécessité de développ
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
239
...il est qu'au démarrage, le Form_Resize considère que le WindowState est vbNormal et non vbMaximize.
Ce qui est, bien sûr, erroné. 


je m'inscris en faux ! Je viens de tester et renvoit bien 2 (= vbmaximized) si créé en mode maximized !
________________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement vous dire ce qu'elle contient. Je n'interviendrai qu'en cas de nécessité de développ
Messages postés
252
Date d'inscription
mardi 3 juin 2003
Statut
Membre
Dernière intervention
29 juin 2013

Affi est un contrôle PictureBox.
Je ne voudrais pas jouer sur les mots; dans le contexte présent, j'appelle mode réduit un affichage de ma forme principale avec un aspect réduit de moitié environ (et non icônisé).
Je suis étonné du résultat obtenu sur ta machine... chez moi le Rezize renvoit bien vbNormal!
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
239
Déjà :
si Affi n'est pas le Form lui-même :
1) il est malheureux que tu ne le dises que maintenant !
2) il ne subit pas l'évènement Resize du Form
3) bien plus "grave" : je ne vois dans ton code rien qui tienne compte des échelles en mode création !
Tu ferais probablement mieux de nous parler des tenants et aboutissants autrement que comme tu t'y es pris. Des mots simples, en langage naturel, feront l'affaire.
_____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement vous dire ce qu'elle contient. Je n'interviendrai qu'en cas de nécessité de développ
Messages postés
252
Date d'inscription
mardi 3 juin 2003
Statut
Membre
Dernière intervention
29 juin 2013

Les 2 lignes de code contenant "Affi" n'ont aucun intérêt pour la question présente.
Il faudrait se recentrer sur le véritable problème qui est: comment contourner le fait qu'au démarrage le WindowState soit systématiquement analysé à la valeur 0 alors qu'il peut être en réalité à 0, 1 ou 2.
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
239
- et iws, c'est quoi, également ? Tu nous le dis quand ?
- on redimensionne enfin un contrôle d'un Form, non par rapport à l'écran, mais par rapport au Form qui le contient et on le fait en fonction des échelles choisies en mode création.

________________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement vous dire ce qu'elle contient. Je n'interviendrai qu'en cas de nécessité de développ
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
239
Les 2 lignes de code contenant "Affi" n'ont aucun intérêt pour la question présente.
Il faudrait se recentrer sur le véritable problème qui est: comment contourner le fait qu'au démarrage le WindowState soit systématiquement analysé à la valeur 0 alors qu'il peut être en réalité à 0, 1 ou 2.


Je t'ai déjà répondu sur ce point ! Aucun problème chez moi ! En ce qui concerne le Form, bien sûr.
Tu m'as alors répondu
Je suis étonné du résultat obtenu sur ta machine

Que veux-tu que je te dise d'autre ? . J'ai créé un form en mode maximized, y est mis ce code tout bête (pour ne ma passer à la lettre c):
Private Sub Form_Resize()
  MsgBox Me.WindowState
End Sub

et j'ai bien eu 2 d'affiché !
Serais-je fou ? ou myope ? ou ma machine ?
________________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement vous dire ce qu'elle contient. Je n'interviendrai qu'en cas de nécessité de développ
Messages postés
252
Date d'inscription
mardi 3 juin 2003
Statut
Membre
Dernière intervention
29 juin 2013

La variable iws est une valeur de contrôle que j'avais introduite pour tester la 1ère activation du Form_Resize. J'ai eu tort de le laisser subsister dans l'exemple fourni.
De toute façon, je ne demande pas une analyse du bout de code présenté mais bien plutôt:
comment contourner le fait qu'au démarrage le WindowState soit systématiquement analysé à la valeur 0 alors qu'il peut être en réalité à 0, 1 ou 2.
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
239
De toute façon, je ne demande pas une analyse du bout de code présenté mais bien plutôt:

comment contourner le fait qu'au démarrage le WindowState soit systématiquement analysé à la valeur 0 alors qu'il peut être en réalité à 0, 1 ou 2.

et je crois t'avoir répondu (et après test) non ?
Maintenant : si pas chez toi, c'est que chez toi, tu as encotrre autre chose dont tu ne nous as pas parlé et que l'on ne peut deviner.

Tu as un bout de code qui te prouve ce que je t'ai dit. Si tu veux en vérifier un résultat non "pollué" par d'autres facteurs ignorés, mets-le donc dans l'évènement resize du formulaire d'ouverture d'un projet tout nef et sans rien d'autre de ton cru ... et constate !

Tu m'excuseras, hein, mais je te laisse maintenant là car je n'ai pas l'intention de jouer aux devinettes !


________________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement vous dire ce qu'elle contient. Je n'interviendrai qu'en cas de nécessité de développ

Bonsoir,

Je ne comprend pas pourquoi tu t'obstines à tester si WindowState = 1 ou 2 ou quoi que ce soit.
Tu n'as qu'à, dans ton événement resize, indiquer aux largeurs et hauteurs ainsi que positions gauche ou droite de tous tes contrôles, de se régler sur un pourcentage (calculé dans le load) de la hauteur et de la largeur de la feuille.
Ce pourcentage étant toujours le même. En vb6, n'y a-t-il pas une méthode qui fait ceci automatiquement ?
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
239
Bonjour, banana32,
Non : sous VB6, il faut le gérer.
Sous VB6, il faut de surcroît penser aux échelles présentes (scalemode), alors que je crois avoir compris que sous VB.Net, une seule échelle : en pixels
Mais j'ai malheureusement l'impression de plus en plus nette qu'a commencé un drôle de dialogue de sourds que je ne tiens pas à éterniser.


________________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement vous dire ce qu'elle contient. Je n'interviendrai qu'en cas de nécessité de développ

un drôle de dialogue de sourds

Les Jacques sont têtus
Messages postés
252
Date d'inscription
mardi 3 juin 2003
Statut
Membre
Dernière intervention
29 juin 2013

Banana32, ta solution pourrait être intéressante s'il y avait seulement 1 ou 2 contrôles à repositionner.

Ucfoutu, extrait de la doc VB6:
Avant qu'une feuille apparaisse, la propriété WindowState a toujours la valeur 0 (Normal), quelle que soit sa valeur initiale.

s'il y avait seulement 1 ou 2 contrôles à repositionner
Il est impossible d'énumérer tes contrôles par code, de tester s'ils possèdent des propriétés height et width, de les redimmensionner et ceci dans une boucle ?
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
239
Tu vois, banana32 ? quand je te parlais de dialogue de sourds, hein !
Pour ton info, javques13, l'évènement resize intervient après le Load et avant l'activate. Et c'est ultra-facile à tester.
Et tu lis ceci, dans l'aide VB6 (pas la "doc", mais l'aide, autrement dit MSDN) :
Evènement Resize
Occurs when an object is first displayed

picétou et bonne nuit et bonne chance et mon code le confirme et je t'abandonne net là.
________________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement vous dire ce qu'elle contient. Je n'interviendrai qu'en cas de nécessité de développ
Messages postés
252
Date d'inscription
mardi 3 juin 2003
Statut
Membre
Dernière intervention
29 juin 2013

Ucfoutu, autant j'apprécie que tu consacres de ton temps à me donner un coup de main et je t'en remercie sincérement, autant je suis exaspéré par le ton professoral, méprisant et cassant que tu utilises.
Passe également une bonne nuit et merci pour tes conseils.
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
239
cassant ? Non
Méprisant ? Non
Lassé ? sans aucun doute !
Et dire que je t'ai tout donné en main pour tester ! En vain !
Tu es venu ici pour quoi ? Juste pour discuter et faire discuter sur ce que tu affirmes et qui est inexact ? Désolé, mais maintenant : oui, je vais être "cassant" ===>> débrouille-toi avec tes convictions, tes non-tests et tes discutailles : Clair, maintenant ?
Désolé, ami, mais celle-là, tu l(as méritée, hein !
Quant à mon ton professionnel ! ... Tu attends lequel, de "ton" ? Celui de l'incompétence ? Celui générant la perte de temps ? Explique donc un peu ... ça m'intéresse grandement !

________________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement vous dire ce qu'elle contient. Je n'interviendrai qu'en cas de nécessité de développ