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

Traductions disponibles Traductions disponibles
Numéro d'article: 324584 - Voir les produits auxquels s'applique cet article
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.
Agrandir tout | Réduire tout

Sommaire

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.

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 Explicit
    
    Const LOGPIXELSX = 88
    Const LOGPIXELSY = 90
    Const TWIPSPERINCH = 1440
    
    Taille de la police
       cx As Long
       cy As Long
    End Type
    
    Declare Function GetDC Lib "user32" (ByVal hWnd As Long) As Long
    Declare Function GetDeviceCaps Lib "gdi32" (ByVal hDC As Long, _
       ByVal nIndex As Long) As Long
    Declare Function GetFocus Lib "user32" () As Long
    Declare Function GetTextExtentPoint Lib "gdi32" Alias _
       "GetTextExtentPointA" (ByVal hDC As Long, ByVal lpsz As String, _
       ByVal cbString As Long, lpSIZE As Size) As Long
    Declare 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) * TWIPSPERINCH
    End Sub
    
    Sub 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 If
    
    End Sub

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 KeyAscii
    End 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

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

Propriétés

Numéro d'article: 324584 - Dernière mise à jour: lundi 3 février 2014 - Version: 1.0
Les informations contenues dans cet article s'appliquent au(x) produit(s) suivant(s):
  • Microsoft Access 2002
Mots-clés : 
kbnosurvey kbarchive kbhowto kbhowtomaster kbdta KB324584
L'INFORMATION CONTENUE DANS CE DOCUMENT EST FOURNIE PAR MICROSOFT SANS GARANTIE D'AUCUNE SORTE, EXPLICITE OU IMPLICITE. L'UTILISATEUR ASSUME LE RISQUE DE L'UTILISATION DU CONTENU DE CE DOCUMENT. CE DOCUMENT NE PEUT ETRE REVENDU OU CEDE EN ECHANGE D'UN QUELCONQUE PROFIT.

Envoyer des commentaires

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com