(vb6) redimmensionner la 'zone client' d'une form en pixels

Soyez le premier à donner votre avis sur cette source.

Vue 4 877 fois - Téléchargée 360 fois

Description

-----------------------------------------------------------
ATTENTION :
Cette source est inutile car une solution directe a été suggéré par klok et donné par Post'It, la voici :

MaForm.Width = (300 * Screen.TwipsPerPixelX) + (MaForm.Width - MaForm.ScaleWidth)
MaForm.Height = (300 * Screen.TwipsPerPixelY) + (MaForm.Height - MaForm.ScaleHeight)

Je laisse tout de même cette source, elle pourra peut-être être utile pour la théorie... (sik!)
-----------------------------------------------------------
La 'zone client' d'une form est la zone sans les bords ni la barre de titre, celle ou sont réellement disposer les contrôles.

J'ai réalisé les 2 fonctions 'MetFrmWidthPixels' et 'MetFrmHeightPixels' pour un projet d'éditeur de dialogue pour mirc. ( version 0.13 (en cours de dev) http://isoat.free.fr/Isoat Editeur de dialog mIRC.exe pour ceux que ca interesse)
Dans ces dialog mirc, les dimensions du dialog 'size -1 -1 300 300' (par exemple) représente une form dont la zone client est un carré de 300 pixels.

Je met ces fonctions ici, si elles peuvent aider quelqu'un, tant mieux.

Je dois remercier Mix78 pour sa précieuse source : GetClientHeight, sans laquelle j'aurai été bien coincé ! ( http://www.vbfrance.com/code.aspx?ID=5094 )

Source / Exemple :


Private Type RECT
        Left As Long
        Top As Long
        Right As Long
        Bottom As Long
End Type

'---------------------------------------------------------------------------------------
' APIs pour mesure de la 'zone client' d'une form
'---------------------------------------------------------------------------------------
Const Mutliplicateur = 15.005
Private Declare Function GetClientRect Lib "user32" (ByVal hwnd As Long, lpRect As RECT) As Long

'---------------------------------------------------------------------------------------
' Procedure : GetClientHeight
' Date      : 17/11/2002
' Auteur(s) : Mix78 (vbfrance.com)
'---------------------------------------------------------------------------------------
' Donne la hauteur (en twips) d'une form sans les bords ni la barre de titre
'---------------------------------------------------------------------------------------
Public Function GetClientHeight(Frm As Form)
    Dim MyRect As RECT
    GetClientRect Frm.hwnd, MyRect
    GetClientHeight = MyRect.Bottom * Mutliplicateur
End Function

'---------------------------------------------------------------------------------------
' Procedure : GetClientWidth
' Date      : 17/11/2002
' Auteur(s) : d'après 'GetClientHeight' Mix78 (vbfrance.com)
'---------------------------------------------------------------------------------------
' Donne la largeur (twips) d'une form sans les bords
'---------------------------------------------------------------------------------------
Public Function GetClientWidth(Frm As Form)
    Dim MyRect As RECT
    GetClientRect Frm.hwnd, MyRect
    GetClientWidth = MyRect.Right * Mutliplicateur
End Function

'---------------------------------------------------------------------------------------
' Procedure : MetFrmWidthPixels
' Date      : 16/06/2004 05:06
' Auteur(s) : Isoat - Brice C. Huelce
'---------------------------------------------------------------------------------------
' Redimmensionne la largeur de la 'zone client' d'une form en pixels
'---------------------------------------------------------------------------------------
Public Sub MetFrmWidthPixels(Frm As Form, IntPixels As Integer)
'-- On chope la largeur des bords de la form en pixels :
'largeur de la form - largeur de la 'zone client' de cette form
'qu'on passe en pixels grace à ScaleX
Dim TempSng As Single
TempSng = Frm.ScaleX(CSng(Frm.Width - GetClientWidth(Frm)), vbTwips, vbPixels)
'-- Redimmensionne la largeur de la form, en twips
'Nb de pixels voulus (IntPixels) + largeur des bords (TempSng)
Frm.Width = Frm.ScaleX(CSng(IntPixels) + TempSng, vbPixels, vbTwips)
End Sub

'---------------------------------------------------------------------------------------
' Procedure : MetFrmHeightPixels
' Date      : 16/06/2004 05:06
' Auteur(s) : Isoat - Brice C. Huelce
'---------------------------------------------------------------------------------------
' Redimmensionne la hauteur de la 'zone client' d'une form en pixels
'---------------------------------------------------------------------------------------
Public Sub MetFrmHeightPixels(Frm As Form, IntPixels As Integer)
'-- On chope la hauteur des bords + hauteur de la barre de titre de la form en pixels :
'hauteur de la form - hauteur de la 'zone client' de cette form
'qu'on passe en pixels grace à ScaleY
Dim TempSng As Single
TempSng = Frm.ScaleY(CSng(Frm.Height - GetClientHeight(Frm)), vbTwips, vbPixels)
'-- Redimmensionne la hauteur de la form, en twips
'Nb de pixels voulus (IntPixels) + hauteur des bords/barre de titre (TempSng)
Frm.Height = Frm.ScaleY(CSng(IntPixels) + TempSng, vbPixels, vbTwips)
End Sub

Codes Sources

A voir également

Ajouter un commentaire

Commentaires

Messages postés
119
Date d'inscription
mercredi 7 juillet 2004
Statut
Membre
Dernière intervention
9 avril 2008

enfin nockel votre code KLOKE HUELSE
sa mùa super aide
Messages postés
35
Date d'inscription
mercredi 19 décembre 2001
Statut
Membre
Dernière intervention
30 avril 2008

c'est vrai mon code est faux
je l'ai fais vite fait et je n'ai pu le tester
je l'ai mis sur deux lignes pour l'expliquer plus facilement mais
le resultat devient faux et le sens de screen.twipsperpixel... je l'oublie a chaque fois.

sinon il y a d'autre control qui inclus ces propriete comme le PictureBox
Messages postés
45
Date d'inscription
jeudi 22 avril 2004
Statut
Membre
Dernière intervention
28 juillet 2004
1
Cher klok, tu avait raison !
il est possible de redimensionner simplement avec les propriétés de base de la form, mais ton code était faux.

Post'It m'a fourni le code correct :

MaForm.Width = (300 * Screen.TwipsPerPixelX) + (MaForm.Width - MaForm.ScaleWidth)
MaForm.Height = (300 * Screen.TwipsPerPixelY) + (MaForm.Height - MaForm.ScaleHeight)

Merci à vous deux, cette source est donc maintenant inutile !
Messages postés
45
Date d'inscription
jeudi 22 avril 2004
Statut
Membre
Dernière intervention
28 juillet 2004
1
Bon j'ai testé ton code dans tous les sens, et j'ai bien compris ton idée.
En fait c'est plutôt :
Form1.Height = 300 * Screen.TwipsPerPixelY
Form1.Width = 300 * Screen.TwipsPerPixelX

Seulement voilà, VB redimensionne la feuille à 300 pixels mais avec les bords et la barre de titre compris dans les 300 pixels. Hors ce n'est pas ce que je veux.
Même avec scaleheight/scalewidth il s'obstine à inclure la barre de titre et les bords dans les mesures qu'on lui donne !

Voilà pourquoi pour mesurer uniquement la zone client il faut passer par cette api.
Je veux bien persister dans ta voie, et faire ca en 3 lignes et sans api, mais donne moi un code qui marche !
Messages postés
45
Date d'inscription
jeudi 22 avril 2004
Statut
Membre
Dernière intervention
28 juillet 2004
1
Mmm... je ne pense pas que cela marche, mais pour ne pas dire de conneries je vais faire un essai et mettrai le résusltat ici.

Pour toi, .height donne la hauteur entière de la feuille, et . scaleheight la hauteur de la zone client (feuille sans bords ni barre de titre). J'ai fait beaucoup d'essai avant d'avoir un résultat parfait grace à cette api, si c'était aussi facile je pense que je l'aurai vu.

Mais je vais essayé par aquis de consciense ;)
Afficher les 6 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.