Voici une facon simple d'adapter votre formulaire à n'importe quelle résolution.
Le principe est de redimentionner le form et chaque contrôle du form a la taille de l'écran, et de les replacer à leur bonne place.
Il faut créer un boutton CmdFermer et placer ce code dans un formulaire.
Source / Exemple :
Option Explicit
Private Declare Function StretchBlt Lib "gdi32.dll" ( _
ByVal hdc As Long, ByVal x As Long, ByVal y As Long, _
ByVal nWidth As Long, ByVal nHeight As Long, _
ByVal hSrcDC As Long, ByVal xSrc As Long, _
ByVal ySrc As Long, ByVal nSrcWidth As Long, _
ByVal nSrcHeight As Long, ByVal dwRop As Long) As Long
Private Const SRCCOPY = &HCC0020
Private Sub CmdFermer_Click()
End
End Sub
Private Sub Form_Load()
Dim ctl As Control
Dim HautStd As Integer
Dim LargStd As Integer
Dim OldWidthPic As Integer
Dim OldHeightPic As Integer
Dim EtatAutoRedraw As Boolean
HautStd = Me.Height
LargStd = Me.Width
Me.Move 0, 0, Screen.Width, Screen.Height
For Each ctl In Me.Controls
If TypeOf ctl Is Timer Then
ElseIf TypeOf ctl Is Line Then
With ctl
.X1 = ctl.X1 * Me.Width / LargStd
.X2 = ctl.X2 * Me.Width / LargStd
.Y1 = ctl.Y1 * Me.Height / HautStd
.Y2 = ctl.Y2 * Me.Height / HautStd
End With
ElseIf TypeOf ctl Is Shape Then
ctl.Move ctl.Left * Me.Width / LargStd, ctl.Top * Me.Height / HautStd, ctl.Width * Me.Width / LargStd, ctl.Height * Me.Height / HautStd
ElseIf TypeOf ctl Is ComboBox Then
ctl.Move ctl.Left * Me.Width / LargStd, ctl.Top * Me.Height / HautStd, ctl.Width * Me.Width / LargStd
ElseIf TypeOf ctl Is PictureBox Then
OldWidthPic = ctl.Width
OldHeightPic = ctl.Height
'On sauvegarde l'état de l'AutoRedraw et on le met à True
EtatAutoRedraw = ctl.AutoRedraw
ctl.AutoRedraw = True
'On redimensionne le controle PictureBox
ctl.Move ctl.Left * Me.Width / LargStd, ctl.Top * Me.Height / HautStd, ctl.Width * Me.Width / LargStd, ctl.Height * Me.Height / HautStd
'on redimensionne aussi l'image dans la picturebox
StretchBlt ctl.hdc, 0, 0, ctl.Width, ctl.Height, ctl.hdc, 0, 0, OldWidthPic, OldHeightPic, SRCCOPY
'On efface l'ancienne image qui reste incrustée sinon
ctl.Refresh
'On restaure l'état précédent
ctl.AutoRedraw = EtatAutoRedraw
'Prise en compte des controls non redimensionnables(CommonDialog et Timer)
ElseIf Not TypeOf ctl Is Timer Then 'Ajoutez "And Not TypeOf ctl Is CommonDialog" si vous utilisez des CommonDialogs
'Le contrôle est standard
ctl.Move ctl.Left * Me.Width / LargStd, ctl.Top * Me.Height / HautStd, ctl.Width * Me.Width / LargStd, ctl.Height * Me.Height / HautStd
ctl.FontSize = ctl.FontSize * Me.Width / 12000 'Plus le chiffre est grand plus les polices sont petites
End If
Next ctl
End Sub
Conclusion :
Hautstd et LargStd sont la taille de la form avant d'être adapter à la résolution de l'écran.
Vous pouvez ajouter autant de cas particulier que vous le voulez pour chaque contrôle spécifique...
A noter aussi qu'un select case ne marche pas avec TypeOf.
Astuces :
- Pour que les controles garde la même forme il faut que le form ait un ratio de 1.333 (800*600 par exemple)
- Pour avoir un vrai effet de plein écran vous pouvez mettre la propriété BorderStyle du form à None (penser à prévoir le boutton pour fermer l'application !)
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.