1. #1
    seb92400
    Invité(e)

    Par défaut [IHM] Gérer la résolution des formulaires

    Hello,

    Voici un code à placer dans un module... Il permet de détecter la résolution actuelle de l'écran et de redimensionner en fonction de la résolution de développement.

    Ca existait déjà, les petits + sont :
    + Gestion des contrôles spéciaux : Onglets, boutons radios, listes, sections...
    + Lisibilité améliorée des polices (par un léger agrandissement à prendre en compte lors de la création)
    + Gestion des résolutions plus élevées, mais aussi plus petites
    + Gestion des contrôles ActiveX (Comme le calendrier. Attention toutefois, les polices de celui-ci étant intégrées, il arrive que pour certaines résolutions, le texte de la date disparaisse s'il est trop petit, comme le Calendrier, par exemple. mais c'est à prendre à compte lors de la conception)...

    Voici le code. Je suis ouvert à toutes les remarques et à tous les bugs PS : Comme c'est la première que je poste ici, soyez indulgent, hein ???

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
    215
    216
    217
    218
    219
    220
    221
    222
    223
    224
    225
    226
    227
    228
    229
    230
    231
    232
    233
    234
    235
    236
    237
    238
    239
    240
    241
    242
    243
    244
    245
    246
    247
    248
    249
    250
    251
    252
    253
    254
    255
    256
    257
    258
    259
    260
    261
    262
    263
    264
    265
    266
    267
    268
    269
    270
    271
    272
    273
    274
    275
    276
    277
    278
    279
    280
    281
    282
    283
    284
    285
    286
    287
    288
    289
    290
    291
    292
    293
    294
    295
    296
    297
    298
    299
    300
    301
    302
    303
    304
    305
    306
    307
    308
    309
    310
    311
    312
    313
    314
    315
    316
    317
    318
    319
    320
    321
    322
    323
    324
    325
    326
    327
    328
    329
    330
    331
    332
    333
    334
    335
    336
    337
    338
    339
    340
    341
    342
    343
    344
    345
    346
    347
    348
    349
    350
    351
    352
    353
    Option Compare Database
    Option Explicit
    '
    Private Declare Function GetDeviceCaps Lib "gdi32" (ByVal hdc As Long, ByVal nIndex As Long) As Long
    Private Declare Function GetDC Lib "user32" (ByVal hwnd As Long) As Long
    Private Declare Function ReleaseDC Lib "user32" (ByVal hwnd As Long, ByVal hdc As Long) As Long
     
    Private Const HORZRES As Long = 8
    Private Const VERTRES As Long = 10
    Private Const HWND_DESKTOP = 0
     
    Private Const ResolutionInitialeX = 1024
    Private Const ResolutionInitialeY = 768
     
    Private FactRedimX As Double
    Private FactRedimY As Double
     
    Private CoordsFD(0 To 255, 0 To 255) As Long
    '
    '
    '###################################'
    '                                   '
    '          CODE RESOLUTION          '
    '                                   '
    '###################################'
    Private Sub ResolutionActuelle()
    On Error GoTo Erreur
     
        Dim hdc As Long
        Dim ResolutionActuelleX As Long
        Dim ResolutionActuelleY As Long
        Dim RatioX As Double
        Dim RatioY As Double
     
        'Donne la résolution actuelle en pixels...
        hdc = GetDC(HWND_DESKTOP)
        ResolutionActuelleX = GetDeviceCaps(hdc, HORZRES)
        ResolutionActuelleY = GetDeviceCaps(hdc, VERTRES)
        ReleaseDC HWND_DESKTOP, hdc
     
        'Facteur de redimensionnement...
        FactRedimX = ResolutionActuelleX / ResolutionInitialeX
        FactRedimY = ResolutionActuelleY / ResolutionInitialeY
     
        'Ratio permettant d'agrandir légèrement les contrôles et les formulaires pour un facteur
        'inférieur ou égale à 1 (exemple : Initiale 1024 x 768, Actuelle 800 x 600)
        'afin de rendre certaines polices ou certains contrôles lisibles...
        'Il est IMPORTANT de vérifier constamment qu'un formulaire agrandi ne dépasse pas de la zone écran !!!
        RatioX = FactRedimX / FactRedimY
        RatioY = FactRedimY / FactRedimX
        If (ResolutionActuelleX <> ResolutionInitialeX) Or (ResolutionActuelleY <> ResolutionActuelleY) Then
            If RatioX <= 1 Then FactRedimX = FactRedimX * 1.1
            If RatioY <= 1 Then FactRedimY = FactRedimY * 1.05
        End If
     
    Sortie:
        Exit Sub
     
    Erreur:
        MsgBoxPlusErreur "modResolution", "ResolutionActuelle", CStr(Err.Number), Err.Description
        Err.Clear
        Resume Sortie
     
    End Sub
    '
    '
    '
    '##################################################'
    '                                                  '
    '          CODE REDIMENSIONNEMENT GENERAL          '
    '                                                  '
    '##################################################'
    Public Sub proResolution(ByRef frmRedim As Form)
    On Error GoTo Erreur_proResolution
     
        Dim LargeurFormulaire As Long
        Dim HauteurFormulaire As Long
     
        Dim numControle As Integer
        Dim typeControle As Variant
     
        'Os : Objets spéciaux...
        Dim Os As Boolean 'Passe à Oui si des Os sont détectés (sauf pour OsSection, toujours présents)...
        Dim OsCompteur As Integer
     
        Dim OsSection(0 To 20) As Integer 'Nombre de sections possibles dans le formulaire (!), 21 est déjà pas mal ;-)...
     
        Dim OsNom(0 To 255) As String 'Nombre d'Os possible par formulaire (chaîne)...
        Dim OsCoords(0 To 255, 1 To 6) As Double 'Coordonnéees des Os...
     
        Dim OsColonnes(0 To 255) As String 'Largeur des colonnes pour les listes (chaînes)...
        Dim OsCarColonnes(0 To 255) As Long 'Nombre de caractères pour la chaîne OsColonnes...
        Dim OsPositionCar As Integer 'Position du caractère ";" dans la chaîne OsColonnes...
        Dim OsNombreColonnes As Integer 'Nombre de colonnes à redimensionner...
        Dim OsDimensionColonne(0 To 255) As String 'Dimensions de chaque colonne des listes...
        Dim OsRedimColonnes As String 'Redimensionnement des colonnes...
     
        Dim FactRedimPolice As Double
     
    'Calcul des facteurs de redimensionnement, "enregistrement" des hauteurs des sections,
    'et initialisation de la variable Os...
        ResolutionActuelle
        LargeurFormulaire = frmRedim.InsideWidth
        For OsCompteur = 0 To 20
            OsSection(OsCompteur) = frmRedim.Section(OsCompteur).Height
        Next
        Os = False
     
    'Surdimensionnement (x2) du formulaire afin d'éviter l'erreur 2100 lors du redimensionnement des onglets...
        'Largeur...
        frmRedim.InsideWidth = LargeurFormulaire * 2
        'Hauteur...
        HauteurFormulaire = 0
        For OsCompteur = 0 To 20
            HauteurFormulaire = HauteurFormulaire + OsSection(OsCompteur)
            frmRedim.Section(OsCompteur).Height = OsSection(OsCompteur) * 2
        Next
        frmRedim.InsideHeight = HauteurFormulaire * 2
     
    'Lecture des contrôles du formulaire à la recherche des Os !! (normalement 206 dans le corps humain)...
        For numControle = 0 To (frmRedim.Controls.Count - 1)
            typeControle = frmRedim.Controls(numControle).ControlType
            Select Case typeControle
                Case acOptionGroup, acPage
                    Os = True
                    With frmRedim.Controls(numControle)
                        OsNom(numControle) = .Name
                        OsCoords(numControle, 1) = .Left
                        OsCoords(numControle, 2) = .Top
                        OsCoords(numControle, 3) = .Width
                        OsCoords(numControle, 4) = .Height
                    End With
                Case acTabCtl
                    Os = True
                    With frmRedim.Controls(numControle)
                        OsNom(numControle) = .Name
                        OsCoords(numControle, 1) = .Left
                        OsCoords(numControle, 2) = .Top
                        OsCoords(numControle, 3) = .Width
                        OsCoords(numControle, 4) = .Height
                            '1 à 4 : Left, Top, Width, Height de tous les contrôles Os...
                        OsCoords(numControle, 5) = .TabFixedWidth
                        OsCoords(numControle, 6) = .TabFixedHeight
                            '5 à 6 : Largeur et hauteur des étiquettes des contrôles Os onglets...
                    End With
                Case acComboBox, acListBox
                    Os = True
                    With frmRedim.Controls(numControle)
                        OsNom(numControle) = .Name
                        OsColonnes(numControle) = .ColumnWidths
                        OsCarColonnes(numControle) = Len(.ColumnWidths)
                    End With
            End Select
        Next
     
    'Redimensionnement des contrôles...
        'Placement de tous les contrôles, sauf les onglets et les pages d'onglets...
        For numControle = 0 To (frmRedim.Controls.Count - 1)
            typeControle = frmRedim.Controls(numControle).ControlType
            Select Case typeControle
                Case acTabCtl, acPage
                Case Else
                frmRedim.Controls(numControle).Move Left:=frmRedim.Controls(numControle).Left * FactRedimX, _
                                                    Top:=frmRedim.Controls(numControle).Top * FactRedimY
            End Select
        Next
     
        'Redimensionnement des contrôles...
        For numControle = 0 To (frmRedim.Controls.Count - 1)
            typeControle = frmRedim.Controls(numControle).ControlType
            Select Case typeControle
                Case acOptionGroup, acPage 'Os
                    If Os = True Then
                        frmRedim.Controls(numControle).Move Left:=OsCoords(numControle, 1) * FactRedimX, _
                                                            Top:=OsCoords(numControle, 2) * FactRedimY, _
                                                            Width:=OsCoords(numControle, 3) * FactRedimX, _
                                                            Height:=OsCoords(numControle, 4) * FactRedimY
                    End If
                Case acTabCtl 'Os
                    If Os = True Then
                        frmRedim.Controls(numControle).TabFixedWidth = OsCoords(numControle, 5) * FactRedimX
                        frmRedim.Controls(numControle).TabFixedHeight = OsCoords(numControle, 6) * FactRedimY
                        frmRedim.Controls(numControle).Move Left:=OsCoords(numControle, 1) * FactRedimX, _
                                                            Top:=OsCoords(numControle, 2) * FactRedimY, _
                                                            Width:=OsCoords(numControle, 3) * FactRedimX, _
                                                            Height:=OsCoords(numControle, 4) * FactRedimY
                    End If
                Case acComboBox, acListBox 'Os
                    If Os = True Then
                        frmRedim.Controls(numControle).Move Left:=frmRedim.Controls(numControle).Left, _
                                                            Top:=frmRedim.Controls(numControle).Top, _
                                                            Width:=frmRedim.Controls(numControle).Width * FactRedimX, _
                                                            Height:=frmRedim.Controls(numControle).Height * FactRedimY
                        'Si des dimensions ont été renseignées à la création des listes...
                        If OsCarColonnes(numControle) > 0 Then
                            OsNombreColonnes = 1
                            'Test de la variable dimensions à la recherche des ";"...
                            For OsCompteur = 1 To OsCarColonnes(numControle)
                                OsPositionCar = InStr(OsCompteur, OsColonnes(numControle), ";", vbTextCompare)
                                If OsPositionCar <> 0 Then
                                    OsNombreColonnes = OsNombreColonnes + 1
                                    OsCompteur = OsPositionCar + 1
                                End If
                            Next
                        OsRedimColonnes = ""
                        'Redimensionne chaque colonne...
                        For OsCompteur = 0 To OsNombreColonnes - 1
                            OsDimensionColonne(OsCompteur) = Split(OsColonnes(numControle), ";")(OsCompteur)
                            'Si colonne non renseignée (sauf la dernière), elle est égale à zéro...
                            If Len(OsDimensionColonne(OsCompteur)) = 0 Then OsDimensionColonne(OsCompteur) = "0"
                            OsDimensionColonne(OsCompteur) = CDbl(OsDimensionColonne(OsCompteur)) * FactRedimX
                            OsRedimColonnes = OsRedimColonnes & OsDimensionColonne(OsCompteur) & ";"
                        Next
                        frmRedim.Controls(numControle).ColumnWidths = Left(OsRedimColonnes, Len(OsRedimColonnes) - 1)
                                                                      'Enlève le dernier ";"...
                        End If
                    End If
                Case acOptionButton, acCheckBox 'Contrôles non redimensionnables...
                    'La longueur ("virtuelle") est redimensionnée afin d'éviter au texte d'être trop collé...
                    frmRedim.Controls(numControle).Move Left:=frmRedim.Controls(numControle).Left, _
                                                        Top:=frmRedim.Controls(numControle).Top, _
                                                        Width:=frmRedim.Controls(numControle).Width * FactRedimX, _
                                                        Height:=frmRedim.Controls(numControle).Height
                Case Else 'Tous les autres contrôles...
                    frmRedim.Controls(numControle).Move Left:=frmRedim.Controls(numControle).Left, _
                                                        Top:=frmRedim.Controls(numControle).Top, _
                                                        Width:=frmRedim.Controls(numControle).Width * FactRedimX, _
                                                        Height:=frmRedim.Controls(numControle).Height * FactRedimY
            End Select
        Next
     
       'Redimensionnement des polices...
        FactRedimPolice = (IIf(FactRedimX > FactRedimY, FactRedimY, FactRedimX))
        For numControle = 0 To (frmRedim.Controls.Count - 1)
            typeControle = frmRedim.Controls(numControle).ControlType
            Select Case typeControle
                Case acOptionGroup, acPage, acRectangle, acLine, acCheckBox, acOptionButton, acImage, acCustomControl, _
                    acSubform, acPageBreak, acBoundObjectFrame, acObjectFrame
                    'Contrôles n'ayant pas de police...
                Case Else
                    frmRedim.Controls(numControle).FontSize = frmRedim.Controls(numControle).FontSize * FactRedimPolice
            End Select
        Next
     
    'Redimensionnement final du formulaire après redimensionnement des contrôles...
        'Largeur...
        frmRedim.InsideWidth = LargeurFormulaire * FactRedimX
        'Hauteur...
        HauteurFormulaire = 0
        For OsCompteur = 0 To 20
            HauteurFormulaire = HauteurFormulaire + OsSection(OsCompteur)
            frmRedim.Section(OsCompteur).Height = OsSection(OsCompteur) * FactRedimY
        Next
        frmRedim.InsideHeight = HauteurFormulaire * FactRedimY
     
    Sortie_proResolution:
        Exit Sub
     
    Erreur_proResolution:
        If Err.Number = 2462 Or Err.Number = 438 Or Err.Number = 2100 Then
            '2462 : Section inexistante, 438 : Propriété non gérée (polices), 2100 : Dépassement de capacité...
            Err.Clear
            Resume Next
        Else
            MsgBoxPlusErreur "modResolution", "proResolution", CStr(Err.Number), Err.Description
            Err.Clear
            Resume Sortie_proResolution
        End If
     
    End Sub
    '
    '
    '
    '#############################################################'
    '                                                             '
    '          CODE REDIMENSIONNEMENT FEUILLE DE DONNEES          '
    '                                                             '
    '#############################################################'
    Public Sub proResolutionFD(ByRef frmRedim As Form)
    On Error GoTo Erreur_proResolutionFD
     
        Dim numControle As Integer
     
        For numControle = 0 To frmRedim.Controls.Count - 1
            Select Case frmRedim.Controls(numControle).ControlType
                Case 109 '109 : Contrôle colonne...
                    CoordsFD(frmRedim.Count, numControle) = frmRedim.Controls(numControle).ColumnWidth
                    frmRedim.Controls(numControle).ColumnWidth = frmRedim.Controls(numControle).ColumnWidth * FactRedimX
                End Select
        Next
     
    Sortie_proResolutionFD:
        Exit Sub
     
    Erreur_proResolutionFD:
        If Err.Number = 438 Then '438 : Propriété non gérée (colonnes)...
            Err.Clear
            Resume Next
        Else
            MsgBoxPlusErreur "modResolution", "proResolutionFD", CStr(Err.Number), Err.Description
            Err.Clear
            Resume Sortie_proResolutionFD
        End If
     
    End Sub
    '
    '
    '
    Public Sub proResolutionFD_Exit(ByRef frmRedim As Form)
    On Error GoTo Erreur_proResolutionFD_Exit
     
        Dim numControle As Integer
     
        For numControle = 0 To frmRedim.Controls.Count - 1
            Select Case frmRedim.Controls(numControle).ControlType
                Case 109 '109 : Contrôle colonne...
                    frmRedim.Controls(numControle).ColumnWidth = CoordsFD(frmRedim.Count, numControle)
                End Select
        Next
     
    Sortie_proResolutionFD_Exit:
        Exit Sub
     
    Erreur_proResolutionFD_Exit:
        If Err.Number = 438 Then '438 : Propriété non gérée (colonnes)...
            Err.Clear
            Resume Next
        Else
            MsgBoxPlusErreur "modResolution", "proResolutionFD_Exit", CStr(Err.Number), Err.Description
            Err.Clear
            Resume Sortie_proResolutionFD_Exit
        End If
     
    End Sub
    '
    '
    '
    '###############################'
    '                               '
    '          UTILISATION          '
    '                               '
    '###############################'
    '
    'Ecrire 'proResolution Me' dans la procédure VBA Form_Open du formulaire à redimensionner...
    '
    'Ecrire 'proResolutionFD Me' dans la procédure VBA Form_Open du formulaire feuille de données...
    '
    'Ecrire 'proResolutionFD_Exit Me.NomDuContrôleSousFormulaire.Form' dans la procédure VAB Form_Close
    'du formulaire à redimensionner (celui contenant le(s) sous-formulaire(s) en feuille de données).
    'A écrire autant de fois qu'il y a de sous-formulaires en feuille de données...
    '
    'Attention à bien dimensionner les colonnes au départ, sans aucun redimensionnement, et à prévoir une
    'marge car l'ascenseur s'élargit lorsqu'on descend en résolution...
    Le 20.07.2007 : Prise en charge des onglets et des boutons radios

    Test effectués (Access 2003 et XP) : Boutons radios, cases à cocher, onglets avec plusieurs pages (contenant elles mêmes d'autres objets spéciaux), images, Calendrier ActiveX, et puis les contrôles standards : Boutons, listes, étiquettes...

    Bogues constatés : Problème de redimensionnement des sections, colonnes des listes non redimensionnées...

    Améliorations à venir :
    + Gestion de la largeur des colonnes des listes. Les listes se mettent aux bonnes dimensions, mais pas les colonnes. Elles restent fixent par rapport aux cm entrès lors de la conception...
    + Prise en charge complète des sections...

    Le 21.07.2007 : Prise en charge des listes et des sections, simplification du code

    Test effectués (Access 2003 et XP) : Tous les tests précédents ainsi que des tests avec différentes sections et différentes listes (fixes, déroulantes)

    Le 26.07.2007 : Essai prise en charge des formulaires "feuille de données" + quelques 'tites modifs du code...

    Nouveaux essais (Access 2003 et XP) : Concluants pour le 1er redimensionnement, mais les colonnes ne reprennent pas leurs dimensions originales...

    Le 27.07.2007 : Prise en charge des formulaires "feuille de données"

    Nouveaux essais concluants ! Petit bug constaté : Lorsqu'on change de résolution, il faut ouvrir deux fois le formulaire. La première fois, les colonnes sont invisibles, pourtant unr boite de message me certifie que celles-ci sont de largeur > 0... Je ne sais pas d'où ça vient...
    Ceci dit, je pense qu'il faudrait pousser plus loin la recherche et affecter à chaque colonne, non pas une dimension, mais un pourcentage en fonction de la largeur (moins la largeur de l'ascenseur...).................

    Tests à venir : Essais avec le RunTime...

    Merci à tous pour vos conseils... et merci d'avance si vous souhaitez jeter un oeil à ce code et effectuer différents tests...
    Dernière modification par seb92400 ; 27/07/2007 à 22h33.

  2. #2
    Rédacteur/Modérateur

    Avatar de Philippe JOCHMANS
    Homme Profil pro
    Développeur informatique
    Inscrit en
    mai 2005
    Messages
    19 594
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Communication - Médias

    Informations forums :
    Inscription : mai 2005
    Messages : 19 594
    Points : 47 630
    Points
    47 630

    Par défaut

    Bonjour

    Il faudrait essayer de tester evec des composants non standard qui sont souvent utiliser sous Access (DtPicker, Calendrier, et...)

    Starec
    Détaillez vos questions, sinon vous aurez des réponses erronées et vous irez tout droit dans le et lisez les règles sinon
    Vous pouvez consulter mes articles sur Access et PowerPoint et n'oubliez pas de consulter les FAQs MS Office

  3. #3
    seb92400
    Invité(e)

    Par défaut

    Ok, je note...

    Edit:
    Pour le calendrier ActiveX, aucun problème... Il se redimensionne, j'ai juste corrigé au niveau du redimensionnement de la police (ce contrôle n'en ayant pas).

    Je n'ai jamais utilisé le "dtPicker" par contre... je le trouve où ?

  4. #4
    seb92400
    Invité(e)

    Par défaut

    Hello,

    Je viens d'apporter quelques corrections à mon code de départ, notamment la gestion des onglets... J'ai également mis quelques annotations en plus...

    PS : J'ai préféré corriger le code du début de mon premier messge afin qu'il n'y ait pas trop de codes ou trop de versions dans ce message... Si j'ai mal fait, n'hésitez pas à me corriger !!

    Bonne journée à tous ! (euh... sous la pluie ici............)

  5. #5
    Membre habitué
    Profil pro
    Inscrit en
    septembre 2005
    Messages
    310
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France

    Informations forums :
    Inscription : septembre 2005
    Messages : 310
    Points : 140
    Points
    140

    Par défaut

    Bonjour à tous !

    Ce sujet a l'air super intéressant !

    J'ai donc tester le code, je suis sous Access 97.
    Sur un Form_open j'ai donc indiqué proResolution Me et là j'ai une erreur à l'ouverture du formulaire :
    "Erreur de compilation, sub ou fonction non définie" sur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Else
            MsgBoxPlusErreur "modResolution", "proResolution", CStr(Err.Number), Err.Description
            Err.Clear
            Resume Sortie_proResolution
        End If
    Par avance merci :-)

  6. #6
    seb92400
    Invité(e)

    Par défaut

    Hello,

    Oui, tout à fait, et c'est normal !!!

    C'est une gestion d'erreur perso ! Remplace ce morceau de code par :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    MsgBox Err.Number & " : " & Err.Description
    Err.Clear
    Resume Sortie_proResolution
    Voilà...

    Attenton à une chose : Je ne sais pas si c'est compatible avec des versions antérieures à Access 2003...
    Dernière modification par seb92400 ; 21/08/2007 à 14h58.

  7. #7
    Membre habitué
    Profil pro
    Inscrit en
    septembre 2005
    Messages
    310
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France

    Informations forums :
    Inscription : septembre 2005
    Messages : 310
    Points : 140
    Points
    140

    Par défaut

    Merciiiiiiiiiiii :-)

    Sauf que now j'ai une erreur Erreu de compilation, Etiquette non définie sur Resume Sortie_proResolution alors que j'ai bien plus loin
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Sortie_proResolution:
        Exit Sub
    Par avance merci ;-)
    @+

  8. #8
    seb92400
    Invité(e)

    Par défaut

    Hello,

    Je ne connais pas Access 97. Mais comme de toute façon, il n'y a pas de code dans la section "sortie", tu n'as qu'à remplacer Resume Sortie_proresolution par Exit Sub.

    Comme ça, pas besoin de faire un retour sur une section qui ne sert qu'à quitter la procédure...

  9. #9
    seb92400
    Invité(e)

    Par défaut

    Hello,

    Voilà... Je viens d'apporter une nouvelle modif à mon code... Cette fois-ci, les onglets, les listes, les contrôles, les sections, etc... sont normalement pris en compte... Si l'envie vous dit de tester tout ça... Je suis preneur des bogues à corriger !!!

    Bon week-end à toutes et tous !!!

  10. #10
    Rédacteur/Modérateur
    Avatar de Domi2
    Homme Profil pro
    Gestionnaire
    Inscrit en
    juin 2006
    Messages
    7 194
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Suisse

    Informations professionnelles :
    Activité : Gestionnaire
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : juin 2006
    Messages : 7 194
    Points : 16 055
    Points
    16 055

    Par défaut

    Bonjour Noawsen,

    Premières constatations.

    Access XP, Windows XP pro. Pas de bugs, compile parfaitement.

    Un formulaire développé en 800 x 600 (j'ai donc changé les constantes) affiché en 1024 x 768).

    Ce formulaire est affiché sans barre d'état, mais avec une barre de menus personnalisée. Dimension "limite", puisqu'il fait 21cm de largeur, sur 13.5 de hauteur, sans bordure. Propriété auto centrer à Oui

    L'affichage n'est pas tout à fait correct dans la mesure où il est mal positionné en haut à gauche (à vue d'oeil, je dirai 2cm trop à droite et 1.5cm trop bas). J'ai donc les barres de défilement verticale et horizontale, alors qu'il devrait occuper uniquement la quasi-totalité de l'écran.

    Ton ratio de redimmensionnement est peut-être un "poil" trop généreux... Mais c'est peut-être aussi un peu trompeur. Comme il est trop grand, la propriété Auto centrer ne fait peut-être pas correctement son boulot !

    Un contrôle un peu particulier, un treeview, se redimmensionne parfaitement.

    Pour le reste de ce que je vois... Chapeau... C'est plus que prometteur...

    Domi2
    Vous avez des montres, nous avons le temps ! (citation attribuée à L.-S. Senghor)

    Ici, on ne perd pas de temps ! On en passe...


    Access : créer des codes-barres 128 en VBA
    Access : les commandes intégrées des menus

    Ce message (ou un autre) vous a aidé ? Votez pour lui avec

  11. #11
    seb92400
    Invité(e)

    Par défaut

    Hello,

    L'affichage n'est pas tout à fait correct dans la mesure où il est mal positionné en haut à gauche (à vue d'oeil, je dirai 2cm trop à droite et 1.5cm trop bas). J'ai donc les barres de défilement verticale et horizontale, alors qu'il devrait occuper uniquement la quasi-totalité de l'écran.
    Effectivement... Perso, j'utilise une procédure de centrage que je place après le "proResolution Me"... et que j'ai appelé... "proCentrer Me" !! (Elle est dans les sources, il me semble... je ne crois pas l'avoir retouchée...)

    Ton ratio de redimmensionnement est peut-être un "poil" trop généreux... Mais c'est peut-être aussi un peu trompeur. Comme il est trop grand, la propriété Auto centrer ne fait peut-être pas correctement son boulot !
    Pour le facteur de redimensionnement, vu que tu pars d'une petite résolution et que tu montes, il n'est normalement pas nécessaire... Je l'ai prévu au cas où ce soit l'inverse (développé en 1024x768 et passé en 800x600). Je devrais peut-être changer la condition pour n'utiliser le facteur qu'en cas de résolution inférieure (pourtant, c'est bizarre, il me semble l'avoir déjà fait, et je suis revenu dessus)... A tester...
    Ce ratio est donc là pour rendre les polices visibles quand on descend en résolution... A tester pour le diminuer au maximum...

    Un contrôle un peu particulier, un treeview, se redimmensionne parfaitement.
    Super J'avais pas testé !

    Pour le reste de ce que je vois... Chapeau... C'est plus que prometteur...

    Merci de ton aide, c'est très sympa !!! Je vais mijoter tout cela ce dimanche... J'aurais l'esprit plus frais lundi... et peut-être un peu moins mal à la gorge (dfyzefy ygfey fzyeff de temps !!!)

    Bon week-end !!! Enfin... bon dimanche...
    Dernière modification par seb92400 ; 21/07/2007 à 19h56.

  12. #12
    Rédacteur/Modérateur
    Avatar de Domi2
    Homme Profil pro
    Gestionnaire
    Inscrit en
    juin 2006
    Messages
    7 194
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Suisse

    Informations professionnelles :
    Activité : Gestionnaire
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : juin 2006
    Messages : 7 194
    Points : 16 055
    Points
    16 055

    Par défaut

    Cordial et matinal bonjour,

    Effectivement... Perso, j'utilise une procédure de centrage que je place après le "proResolution Me"...
    J'aurais pu y penser, d'autant qu'elle était déjà dans l'application test que j'utilise (désactivée)

    Ca fonctionne "pil-poil"... Donc pas de problème de redimmensionnement...

    J'ai bien regardé les contôles (étiquette et texte) où les textes étaient "limites". Ils sont à peine plus "courts" et ne sortent donc pas des contrôles, c'est ok.

    Les zones de listes, les boutons, les contrôles images, le treeview, ça à l'air ok.

    Les onglets, ça a l'air parfait.

    Par contre, pour le groupe d'options, j'observe un léger décalage (voir photo).

    Les sous-formulaires en mode continu, ça à l'air tout bon. En mode feuille de données, reste la largeur des colonnes.

    Et un contrôle un peu particulier, les cases à cocher. J'ai de la peine à dire si elles se redimmensionnent. Je dirais non !

    Edit :

    Après vérification, elle ne semblent pas redimmensionnable et c'est pris en compte dans ton code... Ca passe par ailleurs très bien à l'oeil, pas de soucis donc !

    Je vais essayer de faire le test inverse (1024x768 ==> 800x600), mais c'est sans garantie aujourd'hui.

    A mon avis, tu es bientôt bon pour la postérité

    Domi2
    Vous avez des montres, nous avons le temps ! (citation attribuée à L.-S. Senghor)

    Ici, on ne perd pas de temps ! On en passe...


    Access : créer des codes-barres 128 en VBA
    Access : les commandes intégrées des menus

    Ce message (ou un autre) vous a aidé ? Votez pour lui avec

  13. #13
    seb92400
    Invité(e)

    Par défaut

    Hello !!!

    Par contre, pour le groupe d'options, j'observe un léger décalage (voir photo).
    A mon avis, cela vient du fait que je redimensionne la longueur "virtuelle" des contrôles non redimensionnables (cases à coher et boutons radios). J'ai prévu ce redimensionnement afin d'éviter au label associé d'être trop collé lorsqu'on descend en résolution... Encore une fois, je peux metre une condition (si résolution en X actuelle inférieure à la résolution initiale en X)...

    Après vérification, elle ne semblent pas redimmensionnable (cases à cocher) et c'est pris en compte dans ton code...
    En fait, j'ai remarqué que les cases à cocher et les boutons radios ne se redimensionnent pas... (leur emplacement se redimensionne, ce que j'appelle le redimensionnement virtuel, mauis pas le contrôle en lui même). Je crois que ceci ne concerne que les boutons radios et les cases à cocher.

    Je vais essayer de faire le test inverse (1024x768 ==> 800x600)
    J'attends tes commentaires et ensuite, je procéderai à quelques modifs... Il me reste également à intégrer dans le code quelques contrôles comme les sauts de pages, par exemple...

    Les sous-formulaires en mode continu, ça à l'air tout bon. En mode feuille de données, reste la largeur des colonnes.
    Arf... un grain de sable !!! Je vais voir ce que je trouve comme info la dessus... je n'ai pas encore testé les formulaire en mode feuille de données...

    A mon avis, tu es bientôt bon pour la postérité
    Si je peux éviter les paparazzis...

  14. #14
    Rédacteur/Modérateur

    Avatar de Philippe JOCHMANS
    Homme Profil pro
    Développeur informatique
    Inscrit en
    mai 2005
    Messages
    19 594
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Communication - Médias

    Informations forums :
    Inscription : mai 2005
    Messages : 19 594
    Points : 47 630
    Points
    47 630

    Par défaut

    Bonjour

    Pour info pour la largeur des colonnes en mode feuille de données il faut utiliser : ColumnWidth et pour la hauteur RowHeight (s'applique à toutes les lignes).

    Starec
    Détaillez vos questions, sinon vous aurez des réponses erronées et vous irez tout droit dans le et lisez les règles sinon
    Vous pouvez consulter mes articles sur Access et PowerPoint et n'oubliez pas de consulter les FAQs MS Office

  15. #15
    seb92400
    Invité(e)

    Par défaut

    Hi,

    Merci... Bien noté !!!

  16. #16
    Rédacteur/Modérateur
    Avatar de Domi2
    Homme Profil pro
    Gestionnaire
    Inscrit en
    juin 2006
    Messages
    7 194
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Suisse

    Informations professionnelles :
    Activité : Gestionnaire
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : juin 2006
    Messages : 7 194
    Points : 16 055
    Points
    16 055

    Par défaut

    Bonjour,

    Test 1024 x 768 ==> 800 x 600.

    Ca ne commence pas trop bien. J'utilise de nouveau un formulaire "limite" de 26.8 cm de largeur et de 18 cm de hauteur (sans la barre d'état).

    Il ne rentre pas dans la fenêtre... De pas grand chose, mais il ne rentre pas.

    J'ai bien utilisé la fonction de centrage et fait également le test avec un MoveSize.

    Domi2
    Vous avez des montres, nous avons le temps ! (citation attribuée à L.-S. Senghor)

    Ici, on ne perd pas de temps ! On en passe...


    Access : créer des codes-barres 128 en VBA
    Access : les commandes intégrées des menus

    Ce message (ou un autre) vous a aidé ? Votez pour lui avec

  17. #17
    seb92400
    Invité(e)

    Par défaut

    Hello,

    En fait, il y a plusieurs problèmes intrinsèques à la conception lorsqu'on descend en résolution...

    Par rapport au code écrit, soit on supprime le ration de redimensionnement et dans ce cas, on aura exactement la même taille quelle que soit la résolution(mais on risque d'avoir un problème au niveau des polices et des tailles de contrôles : Soit les polices sont illisibles, soit elles sortent du cadre), soit on fait des formulaires un peu plus petit afin de prendre en compte le redimensionnement par arpport au ration, ce que je préconise dans mon code...
    Malheureusement, Access ne prenant pas en charge le redimensionnement, j'ai fait le choix de faire des formulaires plus petits qui ne dépasseront pas de l'écran... Une solution possible sans utiliser de facteur d'agrandissement est d'utiliser des polices dont la taille est supérieure à 10. En résolution plus petite, elles devraient rester lisibles...

    Dans tous les cas, c'est donc un choix qui reste à faire à la conception... Je n'ai pas d'autre solution sous la main...

  18. #18
    seb92400
    Invité(e)

    Par défaut

    Bonsoir...

    Voici un nouveau bout de code... Et la, j'aurais besoin de toute l'aide disponible pour un 'tit problème que je ne comprends pas...

    La largeur des colonnes se redimensionne bien à la lecture du formulaire... Elle se redimensionne également à la fermeture, car si j'affiche leur largeur dans une MsgBox, je vois bien qu'elle s redimensionne... Mais le problème, c'est que la nouvelle largeur (celle d'origine, donc) ne s'enregistre pas... Ce qui fait qu'à la deuxième ouverture, les colonnes se redimensionnent en fonction du premier redimensionnement et donc s'élargissent encore + et + et ++++; jusqu'à un dépassement de capacité...

    J'ai pasé un bout de temps dessus, mais je ne comprends pas... La solution serait éventuellement de programmer les largeurs des colonnes dans le Form_Load ou Form_View du formulaire feuille de données... Comme ça, plus besoin de redimensionner à la fermeture, mais j'aurais préféré qqch de plus automatisé...

    Je n'ai pas encore testé avec plusieurs sous-forms en feuille de données, mais la aussi, je me demande si ça ne va pas poser quelques problèmes... Je vais voir tout ça...

    A bientôt...

  19. #19
    seb92400
    Invité(e)

    Par défaut

    Voilà... Je continue mon monologue !!!

    Je viens de mettre le code qui permet de redimensionner également les colonnes des formulaires feuille de données (avec un 'tit bug que je ne comprends pas, tout est écrit dans le 1er message)...

    Ce n'est pas parfait, je pense qu'il faudrait écrire une 'tite fonction placée dans le Form_Open des formulaires feuille de données afin de gérer la largeur des colonnes en pourcentage... Ou mieux, d'écrire la largeur des colonnes en vba (une ligne pour chaque colonne)..... Mais, bon, ça à déjà le mérite d'être efficace à 95%... ........ Ouai, ouai, ouai... j'en vois déjà qui disent :"Mouiiiii, et les 5% ??? "

    Bref, je vous laisse juger, essayer, critiquer, m'insulter, et même me bannir de ce forum !!!!


  20. #20
    Membre à l'essai
    Inscrit en
    avril 2005
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : avril 2005
    Messages : 25
    Points : 16
    Points
    16

    Par défaut

    salut noawsen,
    et donc il est où le code final et parfait je le vois pas tu peux pe le joindre ici pour l'utiliser stp?

Discussions similaires

  1. [XL-2007] Résolution des formulaires d'une application
    Par miska dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 03/02/2010, 19h39
  2. Réponses: 1
    Dernier message: 24/07/2006, 17h28
  3. gérer l'ordre des tabulations dans un formulaire
    Par amigauss dans le forum Formulaires
    Réponses: 11
    Dernier message: 17/01/2006, 10h43
  4. Classe pour développer des formulaire et gérer la BdD ?
    Par sami_c dans le forum PHP & MySQL
    Réponses: 2
    Dernier message: 23/11/2005, 11h29

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo