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 :

comment transtyper, ou faire avaler un TComPort en UnicodeString


Sujet :

C++Builder

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Août 2004
    Messages
    53
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2004
    Messages : 53
    Par défaut comment transtyper, ou faire avaler un TComPort en UnicodeString
    bonjour à tous, décidément, je ponds souvent sur ce forum...

    Je souhaite manipuler le registre windows pour stocker des variables pour mon application. Hors, mes paramètres sont du genre un peu particulier...

    J'ai écrit ce code :

    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
     
     
    	TRegistry *Reg = new TRegistry;
    	if (Reg->OpenKey("\\Software\\KVBSoft\\Promis",false))
    	{
    		try
    		{
    			ComPortMODEM->Port = Reg->ReadString("ComPortModem");
    			ComPortMODEM->BaudRate = Reg->ReadString("BaudRateModem");
    			ComPortMODEM->DataBits = Reg->ReadString("DataBitsModem");
    			ComPortMODEM->FlowControl = Reg->ReadString("FlowControlModem");
    			ComPortMODEM->Parity = Reg->ReadString("ParityModem");
    			ComPortMODEM->StopBits = Reg->ReadString("StopBitsModem");
     
    		}
    		catch (Exception &exception)
    		{
    			Application->ShowException(&exception);
    		}
    		catch(...)
    		{
    		}
    		ComPortMODEM->Connected = true ;
    	}
    	Reg->CloseKey();
    	delete Reg;
    et j'ai pleins d'erreur du genre

    [BCC32 Erreur] Form_Main.cpp(32): E2034 Impossible de convertir 'UnicodeString' en 'TBaudRate'

    j'ai essayé de transtyper dans tout les sens ,mais rien n'y fait :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ComPortMODEM->Port = (TComPort)Reg->ReadString("ComPortModem");
    erreur :

    [BCC32 Erreur] Form_Main.cpp(31): E2285 Impossible de trouver une correspondance pour 'TComPort::TComPort(UnicodeString)'

    là je suis bien bloqué... Vous avez une idée ?

    merci !

  2. #2
    Rédacteur
    Avatar de blondelle
    Homme Profil pro
    Inscrit en
    Mars 2006
    Messages
    2 738
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 738
    Par défaut
    Salut kressano
    Peut etre en utilisant WideString, WideChar, c_str()......

  3. #3
    Membre Expert

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    1 407
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 1 407
    Par défaut
    Salut !

    Il faudrait tester si TRegistry::ReadInteger sert à quelque chose !

    A plus !

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Août 2004
    Messages
    53
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2004
    Messages : 53
    Par défaut
    hello blondelle,

    j'ai déjà testé avec le constant char, mais ça bug quand même :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
     
    ComPortMODEM->Port = Reg->ReadString("ComPortModem").c_str() ;

    j'ai un link error dans un .OBJ .

    je teste WideString...

    Henderson :

    Comme le disait Jésus : ''Hein ?'' Romains 15-1 verset 2

    Le paramètre ComPort n'est pas integer à ma grande déception... mais je vais fouiller ta remarque...

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Août 2004
    Messages
    53
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2004
    Messages : 53
    Par défaut
    bon bah, pas plus d'avancé...

    soit je sais pas coder et j'utilise c_str n'importe comment, soit c'est pas adaptable. Grrrr !

    et je ne sais pas utiliser widestring.

  6. #6
    Membre Expert

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    1 407
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 1 407
    Par défaut
    Salut !

    ComPortMODEM->BaudRate ...
    ComPortMODEM->StopBits ...
    A mon avis ... c'est pas du texte !
    StopBits ... c'est 0, 1 ...

    A plus !

  7. #7
    Membre Expert

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    1 407
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 1 407
    Par défaut
    Salut !

    Par contre, s'il s'agit de valeurs stockées sous forme de texte, dans ce cas :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Machin->Truc = Reg->ReadString(blabla).ToInt();
    A plus !

  8. #8
    Membre averti
    Profil pro
    Inscrit en
    Août 2004
    Messages
    53
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2004
    Messages : 53
    Par défaut
    Effectivement, j'ai gratté dans tout les sens, et j'ai fait ceci :

    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
     
    void __fastcall TForm_Principale::FormClose(TObject *Sender,
    	  TCloseAction &Action)
    {
     
     
    	TRegistry *Reg = new TRegistry;
    	Reg->OpenKey("\\Software\\KVBSoft\\Promis",true);
    	Reg->WriteString("ComPortModem",ComPortMODEM->Port);
    	Reg->WriteInteger("BaudRateModem",ComPortMODEM->BaudRate);
    	Reg->WriteInteger("DataBitsModem",ComPortMODEM->DataBits);
    	//Reg->WriteString("FlowControlModem",ComPortMODEM->FlowControl);
    	//Reg->WriteString("ParityModem",ComPortMODEM->Parity);
    	Reg->WriteInteger("StopBitsModem",ComPortMODEM->StopBits);
    	Reg->CloseKey();
    	delete Reg;
     
    	ComPortMODEM->Connected = false ;
    	ComPortGPS->Connected = false ;
     
    }
    ça marche nickel pour ce bout de code.
    Au contraire des autres paramètres, le 'Port' n'est pas un entier, il est enregistré en String dans le registre et apparaît sous la forme COM1.
    Par contre, pour lire, j'ai modifié comme suit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
     
    //ComPortMODEM->Port =(TComPort)Reg->ReadString("ComPortModem") ;
    ComPortMODEM->BaudRate = Reg->ReadInteger("BaudRateModem");
    ComPortMODEM->DataBits = Reg->ReadInteger("DataBitsModem");
    //ComPortMODEM->FlowControl = Reg->ReadString("FlowControlModem");
    //ComPortMODEM->Parity = Reg->ReadString("ParityModem");
    //ComPortMODEM->StopBits = Reg->ReadString("StopBitsModem");
    //c_str()     WideString
    Je dé commante la ligne ComPortMODEM et j'ai une sale erreur genre 'pas de correspondance....

  9. #9
    Membre averti
    Profil pro
    Inscrit en
    Août 2004
    Messages
    53
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2004
    Messages : 53
    Par défaut
    Hé les copains, ça y est j'ai trouvé le bug !!!

    je suis allé visiter cette page :

    http://www.developpez.net/forums/d79...tring-tstring/

    J'ai relu le fil de long en large et en travers, j'ai rien capté. J'ai fait la soluce proposée, touche F9 défoncée, ça marche !!!

    hé hop ! résolu...

    Je me demande encore comment j'ai fait pour trouver ce topic, sachant que Google et le moteur de recherche n'a rien pû faire pour moi....


    Bref : voila le code complet pour ceux qui veulent....

    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
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
     
    // A la création de la fiche, on lit d'abord les infos pour le Modem puis pour le GPS
    void __fastcall TForm_Principale::FormCreate(TObject *Sender)
    {
    	TRegistry *Reg = new TRegistry;
    	// MODEM
    	if (Reg->OpenKey("\\Software\\KVBSoft\\Promis\\Modem",false))   // ouverture du registre
    	{
    		ComPortMODEM->Port = (Reg->ReadString("ComPortModem")) ;    // lecture du Port
    		ComPortMODEM->BaudRate = Reg->ReadInteger("BaudRateModem"); //            Baud
    		ComPortMODEM->DataBits = Reg->ReadInteger("DataBitsModem"); //            Bit de donnée
    	}
    	else
    	{                                     // si la clé n'existe pas, on affiche la boite de dialogue
    		ComPortMODEM->ShowSetupDialog (); // du port Com MODEM
    	}
    	Reg->CloseKey();                      // on ferme le registre
    	// GPS
    	if (Reg->OpenKey("\\Software\\KVBSoft\\Promis\\GPS",false)) // ouverture du registre
    	{
    		ComPortGPS->Port = (Reg->ReadString("ComPortGPS")) ;    // lecture du Port
    		ComPortGPS->BaudRate = Reg->ReadInteger("BaudRateGPS"); //            Baud
    		ComPortGPS->DataBits = Reg->ReadInteger("DataBitsGPS"); //            Bit de donnée
    	}
    	else
    	{                                     // si la clé n'existe pas, on affiche la boite de dialogue
    		ComPortGPS->ShowSetupDialog ();   // du port com GPS
    	}
    	Reg->CloseKey();                      // on ferme le registre
    	delete Reg;                           // et on détruit la variable dynamique
     
    	do
    	{
    		try
    		{
    			ComPortMODEM->Connected = true ;     // connection du modem
    		}
    		catch (Exception &exception)             // si erreur
    		{
    			MessageBox(NULL,"Le port Com est déjà pris.",NULL,MB_OK|MB_ICONSTOP);
    			ComPortMODEM->ShowSetupDialog ();
    		}
    	}
    	while (ComPortMODEM->Connected == false) ;
    	do
    	{
    		try
    		{
    			ComPortGPS->Connected = true ;       // connection du GPS
    		}
    		catch (Exception &exception)             // si erreur
    		{
    			MessageBox(NULL,"Le port Com est déjà pris.",NULL,MB_OK|MB_ICONSTOP);
    			ComPortGPS->ShowSetupDialog ();
    		}
    	}
    	while (ComPortGPS->Connected == false) ;
     
    	if (ComPortMODEM->Connected == true) { Image1->Visible = true; } // image pour débugger
    	if (ComPortMODEM->Connected == true) { Image2->Visible = true; } // image pour débugger
    }
    ya peut etre encore des erreurs alors laissez moi le temps de fignoler

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

Discussions similaires

  1. Comment créer ou faire créer une banniére ?
    Par ghyosmik dans le forum Publicité
    Réponses: 8
    Dernier message: 07/10/2010, 14h09
  2. Réponses: 2
    Dernier message: 23/02/2006, 15h51
  3. Comment puis je faire pour que'une page soir rechargees....
    Par pierrot10 dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 23/12/2005, 10h46
  4. comment on peut faire un service avec builder c++
    Par infoactif dans le forum C++Builder
    Réponses: 8
    Dernier message: 11/08/2005, 17h33
  5. Comment puis je faire cette effet...
    Par wikers dans le forum OpenGL
    Réponses: 5
    Dernier message: 12/06/2004, 20h40

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