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

C++Builder Discussion :

Passage de C++ Builder 6 à RAD Studio 10.4 [Débutant]


Sujet :

C++Builder

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 22
    Points : 18
    Points
    18
    Par défaut Passage de C++ Builder 6 à RAD Studio 10.4
    Bonjour,

    Quelqu'un peut il me dire comment écrire en RAD Studio 10.4 ces quelques lignes qui marchaient très bien avec C++ Builder 6

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    char chn1[10];
     
     void __fastcall TForm1::Edit1Change(TObject *Sender)
    {
      int Size = Edit1->GetTextLen();
      Size++;
      char *Buffer = new char[Size];
      Edit1->GetTextBuf(Buffer,Size);
      strcpy(chn1,Buffer);
      delete Buffer;
    }
    Merci par avance

    Eric NOE

  2. #2
    Membre régulier
    Inscrit en
    Août 2010
    Messages
    123
    Détails du profil
    Informations forums :
    Inscription : Août 2010
    Messages : 123
    Points : 93
    Points
    93
    Par défaut
    Bonjour,

    à partir des versions XE, les chaines de caractères des composants sont de type UnicodeString au lieu de AnsiString...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    char chn1[10];
    void __fastcall TForm1::Edit1Change(TObject *Sender)
    {
      strcpy(chn1, AnsiString(Edit1->Text).c_str());
    }
    Cordialement

  3. #3
    Membre chevronné
    Avatar de Crayon
    Inscrit en
    Avril 2005
    Messages
    1 811
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Avril 2005
    Messages : 1 811
    Points : 2 189
    Points
    2 189
    Par défaut
    La réponse de PocoYote est fonctionnel, par contre je me question sur l'utilisation d'un array de char. Pourquoi ne pas utiliser String qui est normalement utilisé sous C++Builder ou std::string qui supporte UTF-8 et qui est standard en C++? Sinon, si ton texte peut contenir des caractères Unicode il te faudrait plutôt un array de wchar_t (wide-character). Aussi au lieu de strcpy utilise plutôt strncpy qui est plus sécuritaire.

  4. #4
    Membre chevronné
    Avatar de DjmSoftware
    Homme Profil pro
    Responsable de compte
    Inscrit en
    Mars 2002
    Messages
    1 044
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Responsable de compte
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 044
    Points : 2 187
    Points
    2 187
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par Crayon Voir le message
    La réponse de PocoYote est fonctionnel, par contre je me question sur l'utilisation d'un array de char. Pourquoi ne pas utiliser String qui est normalement utilisé sous C++Builder ou std::string qui supporte UTF-8 et qui standard en C++? Sinon, si ton texte peut contenir des caractères Unicode il te faudrait plutôt un array de wchar_t (wide-character). Aussi au lieu de strcpy utilise plutôt strncpy qui est plus sécuritaire.
    Parfitement d’accord avec les propos de Crayon,
    le code posté initialement est du C et non du C++ pourquoi utiliser de l'allocation statique via un tableau de caractère ou de l'allocation dynanique via new alors que C++ Builder propose des classes AnsiString,ou UnicodeString ou encore mieux l'utilisation de la STD.
    la classe AnsiString existait déja avec C++ Builder 1.

    ainsi ton code retravaillé

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    String BuffReseultat
     
     
     void __fastcall TForm1::Edit1Change(TObject *Sender)
    {
    BuffReseultat=Edit1->Text; // C'est tout
    }
    // l'èvenenement OnChange est appelé a chaque fois que la propriété texte est changée donc 1 caractère
    cdlt

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 22
    Points : 18
    Points
    18
    Par défaut OnChange
    Merci pour vos réponses,
    mais j'utilise l'événement "OnChange" car dans certains de mes projets j'ai besoin de contrôler chaque caractères saisis.
    comment écrire la même fonction en C++ ?
    Merci par avance
    Eric NOE

  6. #6
    Membre chevronné
    Avatar de DjmSoftware
    Homme Profil pro
    Responsable de compte
    Inscrit en
    Mars 2002
    Messages
    1 044
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Responsable de compte
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 044
    Points : 2 187
    Points
    2 187
    Billets dans le blog
    1
    Par défaut
    salut
    je crois qu’il y a une certaine confusion
    l'évenenment Onchange c’est du C++ creé a partir de la VCL qui est écrite en Delphi
    en utilisant le code que j'ai posté BuffReseultat sera une copie exacte de l'Edit box
    ton code de contrôle ou de traitement doit être appelé depuis le gestionnaire d'évenement

    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
     
     
    String BuffReseultat
     
     
    void __fastcall TForm1::Edit1Change(TObject *Sender)
    {
    BuffReseultat=Edit1->Text; // C'est tout
    // ton code de traitement sera placé ici
    // exemple 
    char* LastChar=BuffReseultat.AnsiLastChar();
    //  Tu peux tester Maintenenant LastChar et en fonction du résultat désiré agir ex conséquence
    //
     
     
    }
    cdlt

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 22
    Points : 18
    Points
    18
    Par défaut Suite essais
    Bonjour,
    j'ai essayé

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    char* LastChar=BuffResultat.AnsiLastChar();
    Message du compilateur :

    [bcc32c Erreur] Unit1.cpp(41): no member named 'AnsiLastChar' in 'System::UnicodeString'

  8. #8
    Membre chevronné
    Avatar de DjmSoftware
    Homme Profil pro
    Responsable de compte
    Inscrit en
    Mars 2002
    Messages
    1 044
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Responsable de compte
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 044
    Points : 2 187
    Points
    2 187
    Billets dans le blog
    1
    Par défaut
    Mille excuses,
    voici un petit code qui teste si dernier caractère tapé dans l'editBox est la lettre A alors il la remplace par un X

    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
    17
    18
     
     
    void __fastcall TForm122::Edit1Change(TObject *Sender) {
    	String BuffTmp;
    	BuffTmp = Edit1->Text;
    	if(BuffTmp!="") // teste si la chaîne contient des caractères
    	{
    		if (*BuffTmp.LastChar() == 'A') {
                                                                     //le dernier caractère de la chaine est un A 
    			int found = BuffTmp.Pos(*BuffTmp.LastChar());// On trouve sa position 
     			BuffTmp[found] = 'X';// remplacement du caratère A par un X
    			Edit1->Text = BuffTmp; // On réecrit la EditBox
    		}
    	}
     
     
     
    } // ---------------------------------------------------------------------------
    cdlt

  9. #9
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 22
    Points : 18
    Points
    18
    Par défaut Résolu
    Merci beaucoup pour ton aide
    Eric NOE

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

Discussions similaires

  1. Réponses: 5
    Dernier message: 29/04/2018, 13h38
  2. Réponses: 0
    Dernier message: 28/04/2014, 14h34
  3. Réponses: 8
    Dernier message: 17/10/2012, 12h43
  4. Réponses: 0
    Dernier message: 22/09/2010, 19h30
  5. Réponses: 1
    Dernier message: 27/01/2010, 10h16

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