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 :

Compréhension d'un message d'erreur sur les WideChar


Sujet :

Langage Delphi

  1. #1
    Nouveau membre du Club
    Inscrit en
    Mai 2004
    Messages
    60
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 60
    Points : 38
    Points
    38
    Par défaut Compréhension d'un message d'erreur sur les WideChar
    Bonjour
    Sur certains de mes composants "maison" le passage en Delphi 2009 me donne les avertissements suivants :

    W1050 WideChar réduit en byte char dans les expressions d'ensemble. Envisagez d'utiliser la fonction 'CharInSet' dans l'unité 'SysUtils'.

    Cet avertissement s'applique a toutes les lignes de ce type :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If R[N]in['.',','] Then
    A noter que R est une variable définie en tant que String et N une variable définie en tant qu'Integer

    Si quelqu'un a une idée...

    Merci d'avance

  2. #2
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 548
    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 548
    Points : 25 118
    Points
    25 118
    Par défaut
    En fait "['.',',']" va générer un TSysCharSet, manque de bol, c'est limité à 256 valeurs, donc à du ANSI, ... je n'avais pas pensé que D2009 poserait problème avec le "in", très interessant, remplace par

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If CharInSet(R[N], ['.',',']) then
    Attention, tu compare toujours R[N] qui un UniCodeChar avec un AnsiChar, c'est juste que tu n'as plus de warning du compilateur !
    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

  3. #3
    Nouveau membre du Club
    Inscrit en
    Mai 2004
    Messages
    60
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 60
    Points : 38
    Points
    38
    Par défaut
    Je viens d'essayer et ca marche merci beaucoup

    Comment je peux faire alors pour faire la comparaison en Unicode ? Car ce qui m'interesse c'est de pouvoir tout passer en Unicode...

  4. #4
    Membre chevronné

    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    1 519
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 1 519
    Points : 2 153
    Points
    2 153
    Billets dans le blog
    1
    Par défaut
    Tout à fait, c'est dans le livre blanc de Marco Cantù consultable sur le site de CodeGear (en anglais).

    Dans une construction IN, le compilateur assume que tu es en train de porter de l'ancien code vers 2009 et donc les caractères dans le set sont considéré comme des caractères Ansi.

    Pour la comparaison c'est pareil qu'avant, tout fonctionne déjà en mode unicode.
    La FAQ - les Tutoriels - Le guide du développeur Delphi devant un problème

    Pas de sollicitations techniques par MP -

  5. #5
    Nouveau membre du Club
    Inscrit en
    Mai 2004
    Messages
    60
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 60
    Points : 38
    Points
    38
    Par défaut
    Donc si je vous suis bien, après avoir modifié mon code pour utiliser CharInSet la comparaison ce fera en unicode ?

  6. #6
    Membre chevronné

    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    1 519
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 1 519
    Points : 2 153
    Points
    2 153
    Billets dans le blog
    1
    Par défaut
    Je ne suis pas sûr (je n'ai pas Delphi 2009) néanmoins un test est assez facile à faire, mettez un é dans le set (si c'est possible ), un é dans la chaîne à tester et regardez si ça fonctionne bien.
    La FAQ - les Tutoriels - Le guide du développeur Delphi devant un problème

    Pas de sollicitations techniques par MP -

  7. #7
    Nouveau membre du Club
    Inscrit en
    Mai 2004
    Messages
    60
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 60
    Points : 38
    Points
    38
    Par défaut
    j'ai fait un test très simple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if CharInSet(key,['é','a']) then ShowMEssage('Trouvé');
    Et dans mon TEdit j'ai saisi différents caractères dont le 'é' et il me le trouve

    Merci pour votre aide

  8. #8
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 548
    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 548
    Points : 25 118
    Points
    25 118
    Par défaut
    é est un ANSI et key est tout simplement transformé de UniCode vers ANSI !
    Heureusement que cela fonctionne !

    un caractère non Latin-1\window 1252 serait plus pertinent que é comme 'я' de Koяn
    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

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 12/03/2009, 11h07
  2. Les messages d'erreur sur un Login
    Par zooffy dans le forum ASP.NET
    Réponses: 12
    Dernier message: 18/01/2008, 13h55
  3. message d'erreurs sur copie de fichier
    Par screeminelle dans le forum C++
    Réponses: 9
    Dernier message: 01/11/2005, 14h21
  4. [CR10] Pquoi absence du message d'erreur sur les Nulls ?
    Par speed034 dans le forum SAP Crystal Reports
    Réponses: 2
    Dernier message: 30/11/2004, 15h30
  5. [Message d'erreur] gérer les message d'erreurs
    Par heid dans le forum Langage
    Réponses: 2
    Dernier message: 12/10/2004, 14h57

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