IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage Delphi Discussion :

Caractères unicode dans TListBox ?


Sujet :

Langage Delphi

  1. #1
    Membre régulier

    Homme Profil pro
    Direction financière et formateur en gestion et contrôle de gestion
    Inscrit en
    Mai 2003
    Messages
    185
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Direction financière et formateur en gestion et contrôle de gestion
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2003
    Messages : 185
    Points : 119
    Points
    119
    Par défaut Caractères unicode dans TListBox ?
    Bonjour à tous,

    Je me suis dit que je pouvais mettre un chr(xxx) dans une ligne d'une ListBox pour faire joli () et lors de la compil, et bien pas de chr(xxx) joli mais un truc moche.
    en fait, j'ai mis une ligne dans ma listBox avec chr(16) ou chr(17) pour une flêche ou même chr(176) mais à l'utilisation j'ai une espèce de case vide moche pour tous ces caractères.

    Pourtant, j'ai lu un article qui dit que depuis 2009 Delphi est à l'Unicode et donc inutile de s'embarrasser avec des composants tiers ...

    Aurais je loupé quelque chose ? et quoi ?
    (L'idée est de rester avec les composants de la VCL sans composants tiers)

    Merci de votre aide
    Delphi 10.4.1 - Lazarus
    Utilisation de la VCL

  2. #2
    Expert éminent sénior
    Avatar de Paul TOTH
    Homme Profil pro
    Freelance
    Inscrit en
    Novembre 2002
    Messages
    8 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Points : 28 445
    Points
    28 445
    Par défaut
    tu as sans doute raté le fait que 16, 17 et 176 ne sont pas des caractères unicodes

    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
     
      ListBox1.Items.Add(#16);
      ListBox1.Items.Add(#17);
      ListBox1.Items.Add(#176);
     
      ListBox1.Items.Add('►');
      ListBox1.Items.Add('◄');
      ListBox1.Items.Add('░');
     
      ListBox1.Items.Add(Ord(ListBox1.Items[3][1]).ToString);
      ListBox1.Items.Add(Ord(ListBox1.Items[4][1]).ToString);
      ListBox1.Items.Add(Ord(ListBox1.Items[5][1]).ToString);
     
      ListBox1.Items.Add(#9658);
      ListBox1.Items.Add(#9668);
      ListBox1.Items.Add(#9617);
    Note que tu peux utiliser Alt+16 pour afficher ► directement dans ton code source (qui est compatible Unicode), et que ce sera bien le caractère 9658, à la sauvegarde il te proposera de passer en UTF8 et tu pourras constater que ton fichier contiendra

    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
     
      ListBox1.Items.Add(#16);
      ListBox1.Items.Add(#17);
      ListBox1.Items.Add(#176);
     
      ListBox1.Items.Add('â–º'); // version UTF8 de 9658
      ListBox1.Items.Add('â—„');
      ListBox1.Items.Add('â–‘');
     
      ListBox1.Items.Add(Ord(ListBox1.Items[3][1]).ToString);
      ListBox1.Items.Add(Ord(ListBox1.Items[4][1]).ToString);
      ListBox1.Items.Add(Ord(ListBox1.Items[5][1]).ToString);
     
      ListBox1.Items.Add(#9658);
      ListBox1.Items.Add(#9668);
      ListBox1.Items.Add(#9617);
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

  3. #3
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 043
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 043
    Points : 40 957
    Points
    40 957
    Billets dans le blog
    62
    Par défaut
    Oui, depuis D2009 c'est de l'Unicode

    La première question qui me vient à l'esprit en lisant la demande c'est : Quand est-ce que ce chr est utilisé ? Certainement au runtime.

    Toutefois voilà déjà une astuce au Design Time, utiliser la table des caractères de windows, sélectionner le caractère voulu (attention à la fonte utilisée pour la listbox, par défaut Tahoma je crois) et simplement copier le caractère pour l'insérer dans le texte.

    Nom : Capture.PNG
Affichages : 111
Taille : 2,2 Ko
    ici la première ligne est écrite avec l'astuce DesignTime
    les deux autres au runtime
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    procedure TForm23.Button1Click(Sender: TObject);
    begin
    ListBox1.items.Add('une flèche par # '#8594);
    ListBox1.items.Add('une flèche par Char(dec) '+Char(8594));
    end;
    le seul problème c'est que le programme de la table des caratères affiche le code Unicode U+2192 (donc de l'hexadecimal) et que pour char comme pour # il s'agit de la valeur décimale
    mais cela peut s'écrire aussi
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ListBox1.items.Add('une flèche par char(hexa) '+Char($2192));
    cela étant une restriction, je n epense pas que l'on puisse combiner deux fontes (par exemple pour ajouter des webdings)
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  4. #4
    Expert éminent sénior
    Avatar de Paul TOTH
    Homme Profil pro
    Freelance
    Inscrit en
    Novembre 2002
    Messages
    8 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Points : 28 445
    Points
    28 445
    Par défaut
    tu peux aussi écrire #$2192
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

  5. #5
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 459
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 459
    Points : 24 873
    Points
    24 873
    Par défaut
    Si tu souhaites avoir les constantes caractères en clair '►' '◄' et '░' dans ton programme sans devoir passer tout le fichier source en UTF8 ni devoir utilise les codes UNICODE, tu peux isoler cela dans une unité

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    unit SpecialChars;
     
    interface
     
    const
      SC_FLECHE_DROITE = '►';
      SC_FLECHE_GAUCHE ='◄';
      SC_TRUC_POINTILLE = '░';
     
    implementation
     
    end;

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
      ListBox1.Items.Add('une flèche droite : ' + SC_FLECHE_DROITE );
      ListBox1.Items.Add('une flèche gauche : ' + SC_FLECHE_GAUCHE );
      ListBox1.Items.Add('un truc pointillé : ' + SC_TRUC_POINTILLE );


    Récemment, j'ai du géré une constante de caractère de ponctuation chinois
    Ayant isolé tout le code concerné dans une unité dédié, celle-ci est la seule en UTF8 avec BOM du projet, cela ne pose pas problème
    En général, je préfère vraiment isolé cela, c'est assez rare dans nos contrées d'avoir des caractères hors Windows1252 et que juste l'unité qui contient quelques caractères spéciaux soit en UTF8, cela a un impact par exemple sur GIT dans l'historique.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
      function CheckFirstAndLastChar(var ACellRef, ACell: TLangString): Boolean;
      type
        TLastCharType = (lcSpace, lcPoint, lcQuestion, lcColon, lcAsterisk);
      const
        ALPHABET_BEGIN_CHARS: array[lcSpace..lcSpace] of Char = (' ');
        ALPHABET_BEGIN_CHARS_COMPATIBLE: array[lcSpace..lcSpace] of string = ('*'); // amusant cela affiche une étoile sur le forum alors qu'en delphi c'est un espace insécable.
        ALPHABET_BEGIN_CHARS_LEVEL: array[lcSpace..lcSpace] of TAnalysisLevel = (alWarning);
        ALPHABET_LAST_CHARS: array[TLastCharType] of Char = (' ', '.', '?', ':', '*');
        ALPHABET_LAST_CHARS_COMPATIBLE: array[TLastCharType] of string = ('*', '。', '?', ':', '');
        ALPHABET_LAST_CHARS_LEVEL: array[TLastCharType] of TAnalysisLevel = (alWarning, alHint, alHint, alHint, alHint);
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  6. #6
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 043
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 043
    Points : 40 957
    Points
    40 957
    Billets dans le blog
    62
    Par défaut
    Citation Envoyé par Paul TOTH Voir le message
    tu peux aussi écrire #$2192
    Ah, je ne connaissais pas celle-là. Merci une bonne journée
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  7. #7
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 459
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 459
    Points : 24 873
    Points
    24 873
    Par défaut
    SergioMaster, cela m'étonne que ne soit jamais tombé sur un #$D#$A lors d'un débogage avec une chaine contenant un CRLF (sLineBreak)
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  8. #8
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 043
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 043
    Points : 40 957
    Points
    40 957
    Billets dans le blog
    62
    Par défaut
    Ben, non où alors je n'y avais vraiment jamais prêté attention.
    A minima c'est donc une bonne piqure de rappel
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  9. #9
    Membre régulier

    Homme Profil pro
    Direction financière et formateur en gestion et contrôle de gestion
    Inscrit en
    Mai 2003
    Messages
    185
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Direction financière et formateur en gestion et contrôle de gestion
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2003
    Messages : 185
    Points : 119
    Points
    119
    Par défaut
    Bon, tout bête ... le soucis était la police de caractère utilisée nativement par la ListBox : MS Sans Serif
    J'ai mis mes caractères dans la dfm et en changeant de fonte, ils sont apparus!
    En tout les cas, j'ai appris plein de chose dans les échanges, merci à tous.
    Delphi 10.4.1 - Lazarus
    Utilisation de la VCL

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Un caractère Unicode dans un char* ?
    Par Ekinoks dans le forum C
    Réponses: 4
    Dernier message: 13/08/2008, 01h10
  2. Chaines de caractères Unicode dans VB 6
    Par mandel2 dans le forum VB 6 et antérieur
    Réponses: 1
    Dernier message: 11/01/2008, 12h25
  3. Réponses: 5
    Dernier message: 23/05/2007, 17h48
  4. Affichage caractères unicodes dans la console
    Par boss_gama dans le forum C++
    Réponses: 18
    Dernier message: 05/03/2007, 18h27
  5. Caractères unicodes dans le titre d'une JFrame
    Par dazz_x dans le forum Agents de placement/Fenêtres
    Réponses: 4
    Dernier message: 19/04/2006, 15h29

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