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 :

Delphi vers C++ (Rad Studio) ! Où sont les VRAIS BONS Tutos ?


Sujet :

C++Builder

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

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : juillet 2006
    Messages : 12 269
    Points : 21 690
    Points
    21 690
    Par défaut Delphi vers C++ (Rad Studio) ! Où sont les VRAIS BONS Tutos ?
    Bonjour

    Je suis développeur Delphi 6 et 7, je passe dans 2 Mois à CodeGear C++ Rad Studio !
    Pour le moment, j'ai une XE sous la main, je fais mes 1er pas !

    J'ai regardé les Tutoriels un peu dépassé sur C++Builder 6, si vous avez quelques choses de plus actualisés en français si possible !

    J'ai des questions simplistes du genre
    Mieux vaut utiliser le type char ou Char
    Mieux vaut utiliser char*, Char*, String

    Typiquement avec XE, j'ai testé ce genre de chose en 1er :

    C++
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
      ShowMessage(Format("char : %d, Char %d",  ARRAYOFCONST((sizeof(char), sizeof(Char)))));
    C++ String c'est un Objet ????
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
      String ObjChaine = "!";
      ShowMessage(ObjChaine.sprintf(L"char : %d, Char %d, UniCodeChar %d", sizeof(char), sizeof(Char), sizeof(ObjChaine[1])));
    Delphi String c'est un Type non objet (c'est un pointeur déguisé)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
      var
      S: string;
    begin
      S := '!';
      ShowMessage(Format('AnsiChar : %d, Char %d, UniCodeChar %d',  [SizeOf(AnsiChar), SizeOf(Char),SizeOf(S[1])]));
    end;
    Rien que la fonction Format, j'ai pris l'habitude du sprintf de PHP

    Ma question, c'est qu'elle est la NORME avec ER RAD Studio C++ ?

    Merci de votre Attention !
    Vous allez me voir souvent !
    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

  2. #2
    Membre chevronné
    Avatar de DjmSoftware
    Homme Profil pro
    Responsable de compte
    Inscrit en
    mars 2002
    Messages
    978
    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 : 978
    Points : 2 054
    Points
    2 054
    Par défaut
    bonjour,
    Je travaille avec la version précédente de l'EDI a savoir 2010
    Je n'ai pas connaissance de <normes>
    j'utilise personellement les régles suivantes:
    VCL:
    on travaille avec des équi valences en c++ de la VCL
    par ex : la classe AnsiString pour des chaines de caractères (équivalent avec le Pchar de delphi).
    STL:
    ou alors on utilise la bibliotèque c++ <STL> qui offre encore beaucoup plus de possibilité
    C:
    Ou alors on peux utiliser des éléments venant du <c>

    par exemple dans ton exemple de boîte de dialogue , j'utilise directement les API de MS

    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
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
     
    void __fastcall TForm51::Button1Click(TObject *Sender)
    {
    MessageBox(0,
    		   "Message que l'on veux afficher\r\nVersion Ansi",
    		   "Titre de la boîte de dialogue",
    		   MB_OK);
     
    }
    //---------------------------------------------------------------------------
    void __fastcall TForm51::Button2Click(TObject *Sender)
    {
     MessageBoxW(0,
    			 L"Message que l'on veux afficher\r\nVersion Unicode",
    			 L"Titre de la boîte de dialogue ",
    			 MB_OK);
    }
    //---------------------------------------------------------------------------
    void __fastcall TForm51::Button3Click(TObject *Sender)
    {
       // en utilisant la classe UnicodeString
       UnicodeString titre("Titre de la boîte de dialogue");
       UnicodeString Messg("Message que l'on veux afficher\r\nVersion Unicode");
       MessageBoxW(0,
    			 Messg.c_str(),
    			 titre.c_str(),
    			 MB_OK);
    }
    //---------------------------------------------------------------------------
    void __fastcall TForm51::Button4Click(TObject *Sender)
    {
       // en utilisant la classe AnsiString
       AnsiString titre("Titre de la boîte de dialogue");
       AnsiString Messg("Message que l'on veux afficher\r\nVersion Ansi Avec icône Information");
       MessageBox(0,
    			 Messg.c_str(),
    			 titre.c_str(),
    			 MB_ICONINFORMATION|MB_OK);
    }
    //---------------------------------------------------------------------------
    Cordialement
    vous trouverez mes tutoriels à l'adresse suivante: http://djmsoftware.developpez.com/
    je vous en souhaite une excellente lecture ...

    A lire : Les règles du forum

  3. #3
    Membre expérimenté
    Avatar de sat83
    Homme Profil pro
    Développeur informatique
    Inscrit en
    mars 2004
    Messages
    1 040
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : mars 2004
    Messages : 1 040
    Points : 1 309
    Points
    1 309
    Par défaut
    Un lien qui te sera peut être utile:
    http://www.consist.it/bcb3C++BfD.htm
    Ce que l'on apprend par l'effort reste toujours ancré plus longtemps...

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

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : juillet 2006
    Messages : 12 269
    Points : 21 690
    Points
    21 690
    Par défaut
    Merci à vous deux !

    DjmSoftware, sur XE, DjmSoftware MessageBox pointe sur MessageBoxW, ce me suprend qu'en 2010 cela ne soit pas le cas !
    J'ai donc mis le A

    Merci sat83, je lirais ton lien, en anglais, faudra que je m'y habitue ! mon 3/20 au BAC en Anglais devra s'améliorer !

    je trouve impressionant c'est la diversité des mots clé pour des trucs basiques
    le plus propre ? ((Class*)Obj) ou le dynamic_cast ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    void __fastcall TBeginningForm::lblDelphiVersCPlusPlusDblClick(TObject *Sender)
    {
      // ShellExecuteW(Self.Handle, 'open', PChar(TLabel(Sender)->Caption), nil, nil, SW_SHOW);
      ShellExecuteW(this->Handle, L"open", dynamic_cast<TLabel*>(Sender)->Caption.c_str(), NULL, NULL, SW_SHOW);
      ShellExecuteW(this->Handle, L"open", ((TLabel*)Sender)->Caption.c_str(), NULL, NULL, SW_SHOW);
    }
    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

  5. #5
    Membre chevronné
    Avatar de DjmSoftware
    Homme Profil pro
    Responsable de compte
    Inscrit en
    mars 2002
    Messages
    978
    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 : 978
    Points : 2 054
    Points
    2 054
    Par défaut
    Bonjour
    DjmSoftware, sur XE, DjmSoftware MessageBox pointe sur MessageBoxW, ce me suprend qu'en 2010 cela ne soit pas le cas !
    J'ai donc mis le A
    C'est le compilateur qui effectue le choix, la version MessageBox utilise des caractères Ansi alors que MessageBoxW de l'unicode
    C++ Builder 2010 et c'est également le cas pour XE utilise par défaut l'unicode
    par contre il est possible pour des besoins de compatibilité avec d'anciennes applications d'utiliser de l'ANSI.

    cordialement
    vous trouverez mes tutoriels à l'adresse suivante: http://djmsoftware.developpez.com/
    je vous en souhaite une excellente lecture ...

    A lire : Les règles du forum

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

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : juillet 2006
    Messages : 12 269
    Points : 21 690
    Points
    21 690
    Par défaut
    Effectivement, j'ai vu qu'il y avait une directive de compilation UNICODE, en Delphi, on est définitivement UniCode même lors du Passage d'un Projet D7 vers DXE, cette directive ne peut être modifiée !

    Comme j'ai créé de nouveau projet sous C++XE, ils sont par défaut Unicode !
    Cela ne doit pas être le cas de ton projet où tu m'as écrit tes exemples !

    En Delphi, on ne peut pas choisir entre char (AnsiChar) et wchar_t (WideChar) comme en C++, c'est interessant, surtout que l'ajout du L dans les chaines d'un projet existant, c'est juste la croix et la bannière !
    Ce Choix possible est fort sympatique !

    La cause de cet interdit c'est que que String en Delphi, c'est un Tableau que l'on transtype en PChar (sans aucune sécurité), moins élégant que String.c_str, mais surement plus performant !

    En fait, le choix du type String, char*... doit se faire selon la lib que l'on utilise, même si l'on pourrait utiliser que String et les méthodes de conversion, mais autant de ne pas faire de C++ dans ce cas

    Bon dès que j'ai bien assimilé ça et les bases de l'héritage et du polymorphisme, je m'attaque à un petit fil rouge, je vais refaire la couche de persistance que j'ai développé en Delphi pour mon précédent employeur ce qui va me faire travailler l'objet, les listes, les DataSet, la RTTI et j'en passe !
    Et si je suis courageux, je développe mon propre format de stockage pour bosser les fichiers (je suis habitué au Stream ou BlockRead\BlockWrite de Delphi)
    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

Discussions similaires

  1. Réponses: 46
    Dernier message: 28/08/2015, 18h43
  2. Delphi XE2 sans RAD Studio
    Par Roland Chastain dans le forum EDI
    Réponses: 6
    Dernier message: 23/10/2012, 20h16
  3. Réponses: 18
    Dernier message: 22/06/2010, 01h57
  4. Delphi vers C# (VS Studio 2008)
    Par toricelli2000 dans le forum Débuter
    Réponses: 6
    Dernier message: 08/07/2009, 13h58
  5. RAD Studio 2007 et les générics
    Par adaneels dans le forum Delphi .NET
    Réponses: 2
    Dernier message: 13/12/2007, 17h05

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