Dimension de l'intérieur d'une fenêtre - régler la taille d'une fenêtre en fonction de l'espace réellement utilisable par le

Soyez le premier à donner votre avis sur cette source.

Vue 19 700 fois - Téléchargée 830 fois

Description

Pour ceux qui n'ont jamais rencontré ce problème, essayez de mettre une petite image en haut à gauche de votre form, et faites me.height=image1.height et me.width=image1.width : vous verrez que les bordures de la fenêtre ne se superposeront pas exactement aux bordures de votre image car me.height et me.width ne renvoient pas les dimensions de l'intérieur de la fenêtre mais de l'extérieur de la fenêtre (incluant barre de titre et bordures).

Le but de ma source est le suivant : J'ai vu récemment plusieurs codes qui permettent d'ajuster une fenêtre à un contrôle en contournant ce problème de la taille des bordures (bordures de quelques pixels sur les cotés et le bas, et barre de titre en haut). Or, ces sources utilisent des API ou diverses fonctions plus ou moins complexes.

Mais moi, depuis toujours, j'utilise une petite procedure toute simple pour redimensionner une form à la dimension intérieure voulue, donc, devant ces sources plus complexes, je me pose la question suivante : Est-ce que ma façon de faire est "propre" ???
Si non, quel est l'intérêt d'utiliser des API plutôt que cette méthode ???
Si oui, voilà pour ceux qui le cherchaient une façon plus simple de le faire :)

Source / Exemple :


Private Sub Ajuster_Click()

Set_Int_Dims Me, Image1.Width, Image1.Height

End Sub

Private Sub Set_Int_Dims(F As Form, Width As Integer, Height As Integer)

Dim BordureX As Integer
Dim BordureY As Integer

If F.WindowState = vbNormal Then 'si la fenetre n'est pas maximisée ou minimisée
    
    'en faisant la différence entre les dimensions extérieures et intérieures
    'de la form, j'obtiens la taille des bordures entourant ma form
    BordureX = F.Width - F.ScaleWidth
    BordureY = F.Height - F.ScaleHeight

    'la taille extérieure de ma form doit donc etre égale à la dimension intérieure
    'choisie + les bordures
    F.Width = Width + BordureX
    F.Height = Height + BordureY

End If

End Sub

Codes Sources

A voir également

Ajouter un commentaire

Commentaires

_120_
Messages postés
15
Date d'inscription
samedi 11 novembre 2000
Statut
Membre
Dernière intervention
3 mai 2007
-
Vous êtes des dizaines a regarder ma source et personne met de commentaire !

:'-(
cs_EBArtSoft
Messages postés
4531
Date d'inscription
dimanche 29 septembre 2002
Statut
Modérateur
Dernière intervention
22 avril 2019
5 -
Private Sub Ajuster_Click()
SetDim Me, Image1
End Sub

Private Sub SetDim(F As Form, O As Object)
On Error Resume Next
F.Width = O.Width + (F.Width - F.ScaleWidth)
F.Height = O.Height + (F.Height - F.ScaleHeight)
End Sub

@+
_120_
Messages postés
15
Date d'inscription
samedi 11 novembre 2000
Statut
Membre
Dernière intervention
3 mai 2007
-
oui mais non ;-)

Parce que imagine que tu ais une form de ce style :

___________________________
|text1______________________|
_____________
| command1 |
|_____________|

Si tu veux que la fenetre prenne pile les dimensions nécéssaires, il faut pouvoir donner text1.width en parametre pour la largeur et command1.top+command1.height pour la hauteur
Gobillot
Messages postés
3140
Date d'inscription
vendredi 14 mai 2004
Statut
Membre
Dernière intervention
31 mars 2015
17 -
et si le Scalemode est égal à 3
F.Width est en Twips
F.ScaleWidth est en Pixels

donc pas bon !
Renfield
Messages postés
17280
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
21 juillet 2019
57 -
très bonne remarque, Gobillot.
pour la forme :


Private Sub Set_Int_Dims(ByRef F As Form, ByVal TargetWidth As Single, ByVal TargetHeight As Single)
Dim BordureX As Single
Dim BordureY As Single
With F
If .WindowState = vbNormal Then 'si la fenetre n'est pas maximisée ou minimisée
'en faisant la différence entre les dimensions extérieures et intérieures
'de la form, j'obtiens la taille des bordures entourant ma form
BordureX = .Width - .ScaleX(.ScaleWidth, .ScaleMode, vbTwips)
BordureY = .Height - .ScaleY(.ScaleHeight, .ScaleMode, vbTwips)

'la taille extérieure de ma form doit donc etre égale à la dimension intérieure
'choisie + les bordures
TargetWidth = .ScaleX(TargetWidth, .ScaleMode, vbTwips)
TargetHeight = .ScaleY(TargetHeight, .ScaleMode, vbTwips)

.Move .Left, .Top, TargetWidth + BordureX, TargetHeight + BordureY
End If
End With
End Sub

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.