DetailPage-MSS-KB

Base de connaissances

Numéro d'article: 181276 - Dernière mise à jour: jeudi 1 juillet 2004 - Version: 2.1

 

Résumé

À partir de Visual Basic 5.0, vous ne peut pas produire systématiquement WingDings ASCII étendu sur les versions DBCS (Double-Byte Character Set) de Windows 95, Windows 98, Windows Me, Windows NT 4.0 ou Windows 2000. Versions DBCS de Windows comprennent chinois, japonais et coréen.

Plus d'informations

Étendus ASCII WingDings sont celles le que 128 et 255 des valeurs ASCII. Ces WingDings ne peut pas être affichées à partir de pages de codes DBCS, car les plages d'octets de tête pour les jeux de caractères codés sur deux octets peuvent démarrer à 129. Un octet de tête est la première moitié de la représentation sous forme de deux octets utilisée pour décrire des caractères dans les jeux de caractères codés sur deux octets.

Jeux de caractères est parfois appelés charsets. Jeux de caractères font référence aux collections mêmes des caractères défini par les pages de code Windows, mais leurs numéros d'identification peuvent être exprimées en un seul octet. Une page de codes est utilisée pour associer une valeur numérique pour chaque caractère utilisé dans la langue. Par exemple, pour illustrer la relation entre les pages de code et charsets, la page de code pour le chinois est 950 et le jeu de caractères correspondant à cette page de code a une valeur de 136 (voir CHINESEBIG5_CHARSET dans étape 3 ci-dessous). En modifiant le jeu de caractères à l'aide de l'API CreateFontIndirect, vous pouvez afficher ces WingDings à l'aide de l'API TextOutA.

Il existe d'autres polices dont les caractères ASCII étendus peuvent être affichées via cette méthode.

L'exemple ci-dessous montre tous les WingDings de 32 et 255 sur DBCS Windows 95, Windows NT 4.0 et Windows 2000. Il utilise le CreateFontIndirect et TextOutA API. La méthode ci-dessous peut également être utilisée pour afficher des caractères ASCII étendus pour les autres polices. Pour modifier la police dans cet exemple, affectez le nom de la police lf.lfFaceName. Il peut également être nécessaire de modifier lf.lfCharSet. Les valeurs possibles pour lf.lfCharset sont répertoriées en tant que constantes dans le code ci-dessous :
  1. Créez un nouveau projet standard EXE dans Visual Basic 5.0. Form1 est créé par défaut.
  2. Dans le menu Projet, sélectionnez Ajouter un module. Module1 est créé par défaut.
  3. Placez le code suivant dans la section déclarations générales de Module1 :
          Type LOGFONT
             lfHeight As Long
             lfWidth As Long
             lfEscapement As Long
             lfOrientation As Long
             lfWeight As Long
             lfItalic As Byte
             lfUnderline As Byte
             lfStrikeOut As Byte
             lfCharSet As Byte
             lfOutPrecision As Byte
             lfClipPrecision As Byte
             lfQuality As Byte
             lfPitchAndFamily As Byte
             lfFaceName As String * 32
          End Type
    
          'Charset constants
          'Values for lf.lfCharSet:
          Public Const ANSI_CHARSET        = 0
          Public Const DEFAULT_CHARSET     = 1
          Public Const SYMBOL_CHARSET      = 2
          Public Const SHIFTJIS_CHARSET    = 128
          Public Const HANGUL_CHARSET      = 129
          Public Const GB2312_CHARSET      = 134
          Public Const CHINESEBIG5_CHARSET = 136
          Public Const GREEK_CHARSET       = 161
          Public Const TURKISH_CHARSET     = 162
          Public Const HEBREW_CHARSET      = 177
          Public Const ARABIC_CHARSET      = 178
          Public Const BALTIC_CHARSET      = 186
          Public Const RUSSIAN_CHARSET     = 204
          Public Const THAI_CHARSET        = 222
          Public Const EE_CHARSET          = 238
          Public Const OEM_CHARSET         = 255
    
          'Values to be used with GetSysColor:
          Public Const COLOR_BTNFACE = 15
          Public Const COLOR_ACTIVEBORDER = 10
          Public Const COLOR_ACTIVECAPTION = 2
          Public Const COLOR_ADJ_MAX = 100
          Public Const COLOR_ADJ_MIN = -100 'shorts
          Public Const COLOR_APPWORKSPACE = 12
          Public Const COLOR_BACKGROUND = 1
          Public Const COLOR_BTNHIGHLIGHT = 20
          Public Const COLOR_BTNSHADOW = 16
          Public Const COLOR_BTNTEXT = 18
          Public Const COLOR_CAPTIONTEXT = 9
          Public Const COLOR_GRAYTEXT = 17
          Public Const COLOR_HIGHLIGHT = 13
          Public Const COLOR_HIGHLIGHTTEXT = 14
          Public Const COLOR_INACTIVEBORDER = 11
          Public Const COLOR_INACTIVECAPTION = 3
          Public Const COLOR_INACTIVECAPTIONTEXT = 19
          Public Const COLOR_MENUTEXT = 7
          Public Const COLOR_SCROLLBAR = 0
          Public Const COLOR_WINDOW = 5
          Public Const COLOR_WINDOWFRAME = 6
          Public Const COLOR_WINDOWTEXT = 8
    
          Declare Function TextOut Lib "gdi32" Alias "TextOutA" (ByVal hdc As _
             Long, ByVal x As Long, ByVal y As Long, lpString As Any, _
             ByVal nCount As Long) As Long
          Declare Function DeleteObject Lib "gdi32" (ByVal hObject As Long) _
             As Long
          Declare Function CreateFontIndirect Lib "gdi32" Alias _
             "CreateFontIndirectA" (lpLogFont As LOGFONT) As Long
          Declare Function SelectObject Lib "gdi32" (ByVal hdc As Long, _
             ByVal hObject As Long) As Long
          Declare Function SetBkColor Lib "gdi32" (ByVal hdc As Long, _
             ByVal crColor As Long) As Long
          Declare Function GetBkMode Lib "gdi32" (ByVal hdc As Long) As Long
          Declare Function GetSysColor Lib "user32" (ByVal nIndex As Long) _
             As Long
    
    					
  4. Placez un bouton de commande sur Form1.
  5. Placez le code suivant dans l'événement click du contrôle CommandButton (Command1):
          Private Sub Command1_Click()
    
             Dim lf As LOGFONT
             Dim chars(257) As Byte
             Dim sysColor As Long
             Dim DispChar As Integer
             Dim NumDispchar As Integer
             Dim prevBkCol As Long
             Dim hFont As Long
             Dim StartASCII As Integer
             Dim StopASCII As Integer
             Dim StartRow As Integer
             Dim NumOfChars As Integer
             Dim i As Integer
             Dim j As Integer
             Dim EndRow As Integer
             Dim NewStart As Integer
             Dim tmp As Integer
             Dim xd As Long
             Dim xt As Long
             Dim xs As Long
    
             'These are the important settings: lfCharSet and lfFaceName
             lf.lfCharSet = SYMBOL_CHARSET
             lf.lfFaceName = "WingDings" & Chr$(0)
    
             lf.lfClipPrecision = 64
             lf.lfOutPrecision = 0
             lf.lfEscapement = 0
             lf.lfItalic = 0
             lf.lfWidth = 16
             lf.lfHeight = 32
             lf.lfOrientation = 0
    
             Form1.Caption = lf.lfFaceName
             Form1.Refresh
             sysColor = GetSysColor(COLOR_BTNFACE) 'Gets button system color
             prevBkCol = SetBkColor(Form1.hdc, sysColor) 'Set background color
             hFont = CreateFontIndirect(lf)
             xs = SelectObject(Form1.hdc, hFont)
    
             DispChar = 32 'Number of characters to display in a row
             StartASCII = 32 'Starting with character having this ASCII value
             StopASCII = 255 'Ending with this ASCII character
             StartRow = 1
    
             If StartASCII < 0 Then StartASCII = 32
             If StopASCII > 255 Then StopASCII = 255
             If StartASCII > StopASCII Then 'If StartASCII is larger than
                                            'StopASCII swap
                tmp = StartASCII
                StartASCII = StopASCII
                StopASCII = tmp
             End If
    
             NumOfChars = StopASCII - StartASCII + 1
    
             If Int(NumOfChars / DispChar) = (NumOfChars) / DispChar Then
                EndRow = Int(NumOfChars / DispChar)
             Else
                EndRow = Int(NumOfChars / DispChar) + 1
             End If
    
             For i = StartASCII To StopASCII
                chars(i) = i
             Next i
    
             'Display characters on the form in rows containing 32 characters
             For j = StartRow To EndRow
                NewStart = StartASCII + (j - 1) * DispChar
    
                If NumOfChars <  DispChar And NumOfChars > 0 Then
                   NumDispchar = NumOfChars
                Else
                   NumDispchar = DispChar
                End If
    
                xt = TextOut(Form1.hdc, 0, j * lf.lfHeight + 2, _
                   chars(NewStart), NumDispchar)
                NumOfChars = NumOfChars - NumDispchar
             Next j
    
             xd = DeleteObject(hFont)
             Form1.Caption = Form1.Caption & "   From " & _
                             StartASCII & " to " & StopASCII
    
          End Sub
    
    					
  6. Appuyez sur la touche F5 pour exécuter l'application, puis cliquez sur le bouton de commande. Notez que tous les WingDings ayant une valeur ASCII de 32 à 255 sont affichés.

Références

"Développement International Software for Windows 95 et Windows NT» par Nadine Kano, publié par Microsoft Press, 1995

Les informations contenues dans cet article s'appliquent au(x) produit(s) suivant(s):
  • Microsoft Visual Basic 5.0 Édition initiation
  • Microsoft Visual Basic 5.0 Édition professionnelle
  • Microsoft Visual Basic 5.0 Édition Entreprise
Mots-clés : 
kbmt kbhowto KB181276 KbMtfr
Traduction automatiqueTraduction automatique
IMPORTANT : Cet article est issu du système de traduction automatique mis au point par Microsoft (http://support.microsoft.com/gp/mtdetails). Un certain nombre d’articles obtenus par traduction automatique sont en effet mis à votre disposition en complément des articles traduits en langue française par des traducteurs professionnels. Cela vous permet d’avoir accès, dans votre propre langue, à l’ensemble des articles de la base de connaissances rédigés originellement en langue anglaise. Les articles traduits automatiquement ne sont pas toujours parfaits et peuvent comporter des erreurs de vocabulaire, de syntaxe ou de grammaire (probablement semblables aux erreurs que ferait une personne étrangère s’exprimant dans votre langue !). Néanmoins, mis à part ces imperfections, ces articles devraient suffire à vous orienter et à vous aider à résoudre votre problème. Microsoft s’efforce aussi continuellement de faire évoluer son système de traduction automatique.
La version anglaise de cet article est la suivante: 181276  (http://support.microsoft.com/kb/181276/en-us/ )
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.
Article KB retiré.Exclusion de responsabilité concernant les contenus obsolètes dans la Base de connaissances
Cet article concerne des produits pour lesquels Microsoft n'offre plus de support. Il est par conséquent fourni « en l'état » et ne sera plus mis à jour.
Partager
Options de support supplémentaire
Forums du support Microsoft Community
Nous contacter directement
Trouver un partenaire Microsoft Certified Partner
Microsoft Store