Ajuster taille form par rapport à un MSFlexGrid [Résolu]

cs_Yoooop 4 Messages postés vendredi 4 mars 2011Date d'inscription 28 juin 2011 Dernière intervention - 4 mars 2011 à 21:29 - Dernière réponse : cs_Yoooop 4 Messages postés vendredi 4 mars 2011Date d'inscription 28 juin 2011 Dernière intervention
- 6 mars 2011 à 23:07
Bonjour à toutes et tous,

J'essaye de réaliser apparemment quelque chose de simple mais je n'y arrive pas.

J'essaye tout simplement d'ajuster la taille d'une form (secondaire) par rapport à celle d'un control MSFlexGrid.

J'ai tenté ça:

MaForm.Height = Grille.Height
MaForm.Width = Grille.Width

Mais bien sur, la form ne prend pas les dimensions exactes du MSFlexGrid :(

Je suppose qu'il y a une histoire de pixel ou de twip ou quelque chose du même genre qui fait que les "mesures" ne sont pas les mêmes....

Un petit coup de main svp ? :)

Merci d'avance pour toute l'aide que vous pourrez m'apporter !

Yoooop
Afficher la suite 

Votre réponse

7 réponses

Meilleure réponse
cs_cheyenne 693 Messages postés samedi 18 mai 2002Date d'inscription 17 avril 2017 Dernière intervention - 6 mars 2011 à 22:19
3
Merci
Re,

Finalement tu peux te passer de l'API pour déterminer la largeur des bordures latérales ainsi que la hauteur de la barre de titre + la bordure inférieure.
Une simple soustraction entre Height et ScaleHeight et Width et ScaleWidth suffit.

With Grille
   .Appearance = flexFlat
   .Left 0: .Top 0
End With

With Me
   .ScaleMode = vbTwips
   .Height = Grille.Height + (.Height - .ScaleHeight) - 30
   .Width = Grille.Width + (.Width - .ScaleWidth)
End With

Pour optimiser j'ai déduit 30 sur la hauteur (soit 2 pixels) afin d'éviter d'avoir en bas le fond de la grille (du moins avec mon essai).
En ne mettant pas la grille en 3D tu as ainsi un cadre noir tout autour. A toi de voir.
Si tu veux ta grille en 3D il va falloir modifier largeur et hauteur afin de ne pas rogner les cellules.

Cheyenne

Merci cs_cheyenne 3

codes-sources a aidé 87955 internautes ce mois-ci

Commenter la réponse de cs_cheyenne
cs_cheyenne 693 Messages postés samedi 18 mai 2002Date d'inscription 17 avril 2017 Dernière intervention - 5 mars 2011 à 12:13
0
Merci
Bonjour,

Il faut d'abord que ta grille soit positionnée à Top 0 et Left 0 et que le ScaleMode de ta Form soit en Twips.

Sinon avec un ScaleMode en Pixels :
With Me
   .Top 0: .Left 0
   .Height = Grille.Height * Screen.TwipsPerPixelY
   .Width = Grille.Width * Screen.TwipsPerPixelX
End With

Cheyenne
Commenter la réponse de cs_cheyenne
cs_Yoooop 4 Messages postés vendredi 4 mars 2011Date d'inscription 28 juin 2011 Dernière intervention - 5 mars 2011 à 22:49
0
Merci
Bonjour,

Tout d'abord merci pour cette réponse.

Malheureusement cela ne fonctionne pas (j'avais déjà essayé cette solution) et ça me fait une fenêtre gigantesque :(

J'ai bien mis la form qui accueille le contrôle MSFlexGrid en ScaleMode Twip et ensuite fais:

MaForm.Height = MaForm.Grille.Height * Screen.TwipsPerPixelY
MaForm.Width = MaForm.Grille.Width * Screen.TwipsPerPixelX

(où je le rappelle, MaForm est une fenêtre secondaire).

Une idée sur ce qui ne va pas ?

Encore un grand merci de prendre du temps pour m'aider :)

Yoooop
Commenter la réponse de cs_Yoooop
cs_cheyenne 693 Messages postés samedi 18 mai 2002Date d'inscription 17 avril 2017 Dernière intervention - 6 mars 2011 à 12:00
0
Merci
Bonjour,

En fait tu dis être en Twips, il est donc inutile de multiplier par Screen.TwipsPerPixelX et Y, d'où le "gigantisme" de ta fenêtre... !

ScaleMode en Twips
With Grille: .Top 0: .Left 0: End With
With Me
   .ScaleMode = vbTwips
   .Height = Grille.Height
   .Width = Grille.Width
End With

ScaleMode en Pixels
With Grille: .Top 0: .Left 0: End With
With Me
   .ScaleMode = vbPixels
   .Height = Grille.Height * Screen.TwipsPerPixelY
   .Width = Grille.Width * Screen.TwipsPerPixelX
End With


Cheyenne
Commenter la réponse de cs_cheyenne
cs_Yoooop 4 Messages postés vendredi 4 mars 2011Date d'inscription 28 juin 2011 Dernière intervention - 6 mars 2011 à 20:04
0
Merci
Merci Cheyenne de te pencher sur mon problème !

Mais tu vas surement dire que je le fais exprès mais cela ne fonctionne toujours pas :(

En fait ça va quand même mieux mais il ne prend pas les dimensions exactes de ma MSFlexGrid.

Pourtant sur ma form je suis donc bien en ScaleMode Twips et j'ai utilisé ton code:

[i].Height = Grille.Height
.Width = Grille.Width/i

La form rogne (empiète) sur le MSFlexGrid: sur la longueur il mange "4 - 5 millimètres" (sur la droite) et sur la hauteur, il mange 1 ou 1.5 centimètres (sur le bas).

Peut-être y a t-il un coeff à prendre en compte ?

En tout cas merci pour le temps que tu consacres à me répondre :)

Yoooop
Commenter la réponse de cs_Yoooop
cs_cheyenne 693 Messages postés samedi 18 mai 2002Date d'inscription 17 avril 2017 Dernière intervention - 6 mars 2011 à 20:40
0
Merci
Bonsoir Yoooop,

Ah, je vois !
Il faut tenir compte de l'épaisseur des bordures de la fenêtre ainsi que de la barre de titre. Tu les obtiens avec l'API GetSystemMetrics.

Je m'occupe de cela dès que faire se peut. Tu auras une réponse en fin de soirée ou au plus tard demain midi.

A bientôt,

Cheyenne
Commenter la réponse de cs_cheyenne
cs_Yoooop 4 Messages postés vendredi 4 mars 2011Date d'inscription 28 juin 2011 Dernière intervention - 6 mars 2011 à 23:07
0
Merci
Excellent ça fonctionne parfaitement ! (j'étais déjà parti sur l'API GetSystemMetrics).

Un grand MERCI à toi Cheyenne !

Maintenant j'ai une belle form qui englobe bien mon MSFlexGrid (non non il n'y a rien de sexy là-dedans :).

Passe une bonne soirée et encore merci pour le coup de main !

Yoooop
Commenter la réponse de cs_Yoooop

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.