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 968 fois - Téléchargée 853 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

Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
62
oui, ByRef est bien le mode par défaut. Mais il vaut mieux le préciser néanmoins, ça ne coute pas grand chose.
Messages postés
15
Date d'inscription
samedi 11 novembre 2000
Statut
Membre
Dernière intervention
3 mai 2007

Renfield, quand je vois ton "ByRef F As Form" : si je ne spécifie pas ByRef ni ByVal (comme j'ai fait), ma Form est automatiquement passée par adresse, étant donnée que je fait une modification sur celle-ci, non ?
Messages postés
15
Date d'inscription
samedi 11 novembre 2000
Statut
Membre
Dernière intervention
3 mai 2007

Merci Gobillot featuring Renfield !

J'avais pas pensé à ça en effet !
Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
62
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
Messages postés
3140
Date d'inscription
vendredi 14 mai 2004
Statut
Membre
Dernière intervention
11 mars 2019
25
et si le Scalemode est égal à 3
F.Width est en Twips
F.ScaleWidth est en Pixels

donc pas bon !
Afficher les 8 commentaires

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.