COMMENT FAIRE : Limiter le nombre de caractères à la taille de la zone de texte dans Access 2002

Ancien nº de publication de cet article : F324584
Cet article a été archivé. Il est proposé « en l'état » et ne sera plus mis à jour.
Niveau avancé : exige une réelle expertise en termes de programmation, d'interopérabilité et d'environnement multi-utilisateur.

Cet article s'applique aux bases de données Microsoft Access (.mdb) et à un projet Microsoft Access (.adp).

Pour obtenir une version de cet article appliquée à Microsoft Access 2000, reportez-vous au document 198649.
Pour obtenir une version de cet article appliquée à Microsoft Access 97, reportez-vous au document 152475.

Contenu de cette tâche

Résumé
Cet article explique comment limiter la taille du texte que peut taper un utilisateur dans une zone de texte à la largeur de la zone de texte. Début de page

Comment créer la procédure LimitTextToControlWidth

Ce qui suit est une procédure Microsoft Visual Basic pour Applications (VBA) que vous pouvez utiliser pour limiter le texte que peut taper un utilisateur dans une zone de texte. La procédure est nommée LimitTextToControlWidth, et est appelée par l'événement KeyPress d'une zone de texte.

Cette procédure convient parfaitement aux développeurs qui veulent utiliser une police à espacement non-proportionnel pour imprimer du texte dans un emplacement fixe d'un formulaire pré-imprimé. La procédure LimitTextToControlWidth garantit qu'un utilisateur ne peut taper plus de texte que ne peut en contenir une zone définie du formulaire.

Plusieurs facteurs affectent la largeur du texte. Plus la taille de la police est élevée, moins vous pouvez taper de caractères. La police que vous sélectionnez affecte également la largeur des caractères du texte. Les caractères d'une police à espacement non-proportionnel, comme Arial ou Times New Roman, ont différentes largeurs. La lettre "i" est plus étroite que la lettre "X". Par ailleurs, la lettre "i" d'une police peut avoir une autre largeur dans une autre police. Par exemple, dans la police Arial, la lettre "i" est beaucoup plus étroite q ue dans la police Courier New.

Remarque : le code suivant utilise la fonction API (Application Programming Interface) GetTextExtentPoint. Vous pouvez appeler cette fonction API uniquement à partir du contrôle qui a le focus sur un formulaire Access.

  1. Créez un nouveau module, puis tapez les éléments suivants dans la section Déclarations :
    Option ExplicitConst LOGPIXELSX = 88Const LOGPIXELSY = 90Const TWIPSPERINCH = 1440Taille de la police   cx As Long   cy As LongEnd TypeDeclare Function GetDC Lib "user32" (ByVal hWnd As Long) As LongDeclare Function GetDeviceCaps Lib "gdi32" (ByVal hDC As Long, _   ByVal nIndex As Long) As LongDeclare Function GetFocus Lib "user32" () As LongDeclare Function GetTextExtentPoint Lib "gdi32" Alias _   "GetTextExtentPointA" (ByVal hDC As Long, ByVal lpsz As String, _   ByVal cbString As Long, lpSIZE As Size) As LongDeclare Function ReleaseDC Lib "user32" (ByVal hWnd As Long, _   ByVal hDC As Long) As Long
  2. Tapez les procédures suivantes :
    Sub ConvertPixelsToTwips(X As Long, Y As Long)   Dim hDC As Long, hWnd As Long, RetVal As Long   Dim XPIXELSPERINCH As Long, YPIXELSPERINCH As Long   '' Extraire le nombre de pixels courant par pouce, qui    '' dépend de la résolution.   hDC = GetDC(0)   XPIXELSPERINCH = GetDeviceCaps(hDC, LOGPIXELSX)   YPIXELSPERINCH = GetDeviceCaps(hDC, LOGPIXELSY)   RetVal = ReleaseDC(0, hDC)   '' Calculez et renvoyez les mesures en twips.   X = (X / XPIXELSPERINCH) * TWIPSPERINCH   Y = (Y / YPIXELSPERINCH) * TWIPSPERINCHEnd SubSub LimitTextToControlWidth(KeyAscii As Integer)   Dim AC As Control   Dim Txt As String   Dim TxtWidth As Long, SpaceWidth As Long   Dim hWnd As Long, hDC As Long   Dim lpSIZE As Size   Dim RetVal As Long   '' Quitter si un caractère non imprimable est tapé.   If KeyAscii < 32 Then Exit Sub   '' Enregistrer le contrôle actif.   Set AC = Screen.ActiveControl   '' Obtenir le texte de contrôle.   Txt = AC.Text & ""   '' Ajouter le caractère tapé dans le texte.   If KeyAscii > 32 Then      Txt = Left(Txt, AC.SelStart)      Txt = Txt & Chr$(KeyAscii)      Txt = Txt & Mid(Txt, AC.SelStart + 1 + AC.SelLength)   End If   hWnd = GetFocus()   hDC = GetDC(hWnd)   '' Calculer la largeur du texte.   RetVal = GetTextExtentPoint(hDC, Txt, Len(Txt), lpSIZE)   ConvertPixelsToTwips lpSIZE.cx, lpSIZE.cy   TxtWidth = lpSIZE.cx   '' Calculer la largeur d'un espace.   RetVal = GetTextExtentPoint(hDC, " ", 1, lpSIZE)   ConvertPixelsToTwips lpSIZE.cx, lpSIZE.cy   SpaceWidth = lpSIZE.cx   '' Y a-t-il des espaces à droite à prendre en compte ?   If AC.SelStart + 1 > Len(Txt) Then      '' Ajouter un nombre d'espaces * SpaceWidth à la longueur de la chaîne      TxtWidth = TxtWidth + ((AC.SelStart + 1 - Len(Txt)) *  _         SpaceWidth)   End If   If TxtWidth + (SpaceWidth / 2) > AC.Width Then      Beep      KeyAscii = 0   End IfEnd Sub
Début de page

Comment utiliser la procédure LimitTextToControlWidth

  1. Créez un nouveau formulaire qui ne soit pas basé sur une table ou une requête, puis définissez les propriétés suivantes :
       Formulaire : Test1   -----------------   Légende : TestForm   Zone de texte   ---------------   Nom : Un   Gauche : 1"   Haut : .5"   Largeur : 1"   Hauteur : 0.2"   FontName: Arial   FontSize: 12   Zone de texte   ---------------   Nom : Deux   Gauche : 1"   Haut : 1"   Largeur : 1"   Hauteur : 0.1667"   FontName: Arial   FontSize: 8   Zone de texte   ---------------   Nom : Trois   Gauche : 1"   Haut : 1.5"   Largeur : 1"   Hauteur : 0.3743"   FontName: Arial   FontSize: 24
  2. Appelez la procédure LimitTextToControlWidth à partir de l'événement KeyPress de chaque zone de texte répertoriée dans l'étape 1. Par exemple :
    Sub One_KeyPress(KeyAscii As Integer)    LimitTextToControlWidth KeyAsciiEnd Sub
  3. Affichez le formulaire, puis essayez de taper le texte suivant dans chaque zone de texte :
    This is a test of the emergency broadcast system
    Notez que les résultats apparaissent comme suit :
       Zone de texte     Texte autorisé à taper   -----------------------------------   Un          This is a test   Deux          This is a test of th   Trois        This i
Début de page
Références
Pour plus d'informations sur les méthodes utilisées pour mesurer l'espacement des caractères et des lignes, cliquez sur le numéro d'article ci-dessous afin d'afficher le document correspondant de la base de connaissances Microsoft :
76388 Relations entre pouces, picas, points, pas et twips
Début de page
inf acc2002
Propriétés

ID d'article : 324584 - Dernière mise à jour : 02/03/2014 18:08:14 - Révision : 1.0

Microsoft Access 2002

  • kbnosurvey kbarchive kbhowto kbhowtomaster kbdta KB324584
Commentaires