5 votes

Comment afficher les caractères Unicode en VB6 ?

Duplicata possible :
Quelle est la meilleure option pour afficher du texte Unicode (hébreu, etc.) en VB6 ?

Quelle est la manière correcte d'afficher le caractère unicode 9646 (RECTANGLE VERTICAL NOIR) dans VB6 ?

Quand j'essaie ChrW(9646) il affiche ? .

7voto

bonCodigo Points 8682

Voici un tutoriel à explorer. Jetez un coup d'œil à cet article pour le rectangle vertical noir .

En supposant qu'Unicode est activé, envoyez la chaîne suivante à une fenêtre à afficher :

Wchar_t mStr[] = {9646,0,0};

Référence . Cet extrait de code et cette référence sont plus conformes au C++. Vous pouvez activer ou désactiver l'UNICODE dans Visual C++ en suivant les étapes suivantes :

  1. Ouvrez votre projet dans VS2008/2010 ;

  2. Cliquez à droite sur le projet dans l'explorateur de solutions et cliquez sur Propriétés ;

  3. Sélectionnez Configuration Properties-> General , sélectionnez Character Set et changer le current value à Use Multi-Byte Character Set . (s'éteignant)


Bon article sur le sujet Affichage de l'UNICODE en VB .

Lorsque vous travaillez avec un textbox contrôle dans un Form , ajoutez le Microsoft Forms 2.0 Object Library comme une bibliothèque de référence. Ce composant fournit des contrôles supportés par Unicode Il s'agit de zones de texte, d'étiquettes, de boutons de commande, de boîtes de liste, de boîtes combo, de cases à cocher, de boutons radio, de boutons à bascule, d'images, de bandes de tabulation et de contrôles de pages multiples.

Pour travailler avec VB6 et afficher des caractères non US-ANSI, il faut comprendre trois choses principales :

  • En interne, VB6 stocke les chaînes de caractères en Unicode.
  • Lors de l'affichage d'une chaîne de caractères, le contrôles de zones de texte et d'étiquettes VB6 standard effectuer une conversion implicite (et interne) d'Unicode à ANSI.
  • En contrôles de zones de texte et d'étiquettes VB6 standard afficher les octets ANSI selon un codage de caractères que vous pouvez spécifier.

Après le Unicode-to-ANSI VB6 tente ensuite d'afficher les données des caractères en fonction de l'adresse du contrôle. Font.Charset qui, si elle n'est pas modifiée, est égale au jeu de caractères ANSI. La modification de la propriété Font.Charset change la façon dont VB6 interprète les octets "ANSI". En d'autres termes, vous demandez à VB6 de traiter les octets comme un autre codage de caractères au lieu de "ANSI".

Par exemple, imaginez que vous essayez d'afficher une Unicode Japanese sur un English ordinateur : Vous réglez le Font.Charset = 128 (pour le japonais), mais votre chaîne Unicode s'affiche avec tous les caractères de point d'interrogation. C'est parce que VB6 essaie d'abord de convertir votre chaîne Unicode japonaise en ANSI, qui est Windows-1252 pour les ordinateurs anglais. Les caractères japonais ne sont pas représentables dans Windows-1252. Chaque caractère échoue à la conversion et est remplacé par un point d'interrogation. Par exemple, sélectionner le script japonais dans les paramètres de propriété du contrôle TextBox revient à définir le Font.Charset au moment de l'exécution.

En Jukka a dit Font joue un rôle essentiel en montrant les UNICODEs compte tenu de la disponibilité des caractères dans une police. Comme l'a dit Hans, glyph Une police non supportée produit un rectangle. Vous devez donc vous assurer que la Font que vous choisissez est capable de le rendu des glyphes . Par exemple MS Sans Serif La police ne s'affiche pas ƒ (LATIN SMALL LETTER F WITH HOOK, la valeur Unicode sur 2 octets est 0x0192), donc vous verrez un boîte rectangulaire solide et mince à sa place. Cependant, sous Windows, il existe très peu de polices disposant d'un répertoire de caractères suffisamment large pour représenter le chinois

Dans le code suivant, le nom de la police () est défini pendant l'exécution avec le CharSet de la police.

Propriétés du jeu de caractères :

134     Simplified Chinese, gb2312 - Mainland China(PRC) and Singapore
136     Traditional Chinese, big5 - Taiwan and Hong Kong

Code :

Sub changeToUniCodes()
Dim strTxt2 As String    

UserForm1.TextBox2.Font.Charset = 134    '--CHINESESIMPLIFIED_CHARSET
UserForm1.TextBox2.Font.Name = ChrW(&H5B8B) + ChrW(&H4F53) '--  SimSun font

UserForm1.TextBox2.Text = ChrW(37446)
strTxt2 = UserForm1.TextBox2.Text
'notice that ChrW(9246) produces a different character in Chinese
UserForm1.TextBox2.Text = strTxt2 & " " & ChrW(9246)
End Sub

Sortie en VBE IDE : Vous pouvez aussi l'essayer en VB6.

enter image description here

Après avoir écrit tout ce qui précède, j'ai remarqué ceci MSDN article. Au moins, c'est une confirmation VB :D

1voto

Bob77 Points 8749

Ce dont vous avez besoin, c'est d'utiliser des contrôles "compatibles Unicode". VB6 n'en propose que quelques-uns, mais dans Vista et les versions ultérieures ou XP (Tablet Edition uniquement, à moins que vous n'utilisiez la version non redistribuée de cette bibliothèque), le contrôle InkEdit peut le faire.

InkEdit1.Text = ChrW$(9646)

Notez le $ qui indique une fonction retournant une chaîne de caractères au lieu d'une variante avec une chaîne de caractères intégrée.

Un contrôle InkEdit est en fait un RichTextBox amélioré qui prend en charge la saisie à l'encre ainsi que la frappe sur les systèmes à encre. Il s'agit également d'un contrôle Unicode, qui prend en charge les propriétés Unicode telles que .Text .

Les contrôles standard MSHFlexGrid, DataGrid et quelques autres sont également compatibles avec Unicode.

Véase http://www.alanwood.net/unicode/geometric_shapes.html pour des personnages comme celui en question. Vous pouvez essentiellement ignorer le bla-bla sur ANSI, Charset, etc. C'est pertinent mais non applicable ici.

9646 25AE BLACK VERTICAL RECTANGLE

0voto

Jukka K. Korpela Points 71599

La raison pour laquelle il affiche un point d'interrogation est que le caractère n'est pas présent dans la police utilisée. Vous devez régler la police sur celui qui soutient le RECTANGLE VERTICAL NOIR comme Arial Unicode MS ou Lucida Sans Unicode.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X