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 récupérer le contenu d'un Edit et l'envoyer sur le port USB ?


Sujet :

C++Builder

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    508
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Haute Vienne (Limousin)

    Informations forums :
    Inscription : Avril 2008
    Messages : 508
    Points : 100
    Points
    100
    Par défaut Comment récupérer le contenu d'un Edit et l'envoyer sur le port USB ?
    Bonjour,

    j'ai le contenu d'un Edit avec des valeurs en Héxa (ex: 105DEF) et j'aimerai mettre par exemple Trame[0] = '0x10', Trame[1] = '0x5D', Trame[2] = '0xEF' pour ensuite envoyer la trame sur un module en usb avec la fonction WriteFile.

    J'ai essayé comme ceci mais sans succès :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    unsigned char Trame[20];
     
    Trame[0] =  Form1->EditNum->Text.SubString(1,2);
    Le message d'erreur est :
    [BCC32 Erreur] U1.cpp(877): E2034 Impossible de convertir 'AnsiString' en 'unsigned char'
    Comment puis je résoudre mon problème ?

    Merci d'avance et à bientôt !

  2. #2
    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
    Commence par convertir ta chaine String de 2 caractères en char. Va lire ceci:
    http://cpp.developpez.com/faq/bcb/?p...ineapartirhexa

    Ton code devrait ressembler a qqchose comme ceci (je pense):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Trame[0] =  (char)HEX2ASCII(Form1->EditNum->Text.SubString(1,2));
    • Plus un ordinateur possède de RAM, plus vite il peut générer un message d'erreur. - Dave Barry
    • Je n'ai pas peur des ordinateurs. J'ai peur qu'ils viennent à nous manquer. - Isaac Asimov
    • Le code source est comme une belle femme, plus on le regarde, plus on trouve des défauts. - Crayon

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    508
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Haute Vienne (Limousin)

    Informations forums :
    Inscription : Avril 2008
    Messages : 508
    Points : 100
    Points
    100
    Par défaut
    Toujours une erreur :

    [BCC32 Erreur] UClient.cpp(877): E2031 Impossible de transtyper de 'AnsiString' en 'char'

  4. #4
    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
    Ajoute .c_str() pour transformer une AnsiString en char
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Trame[0] =  (char)HEX2ASCII(Form1->EditNum->Text.SubString(1,2)).c_str();
    • Plus un ordinateur possède de RAM, plus vite il peut générer un message d'erreur. - Dave Barry
    • Je n'ai pas peur des ordinateurs. J'ai peur qu'ils viennent à nous manquer. - Isaac Asimov
    • Le code source est comme une belle femme, plus on le regarde, plus on trouve des défauts. - Crayon

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    508
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Haute Vienne (Limousin)

    Informations forums :
    Inscription : Avril 2008
    Messages : 508
    Points : 100
    Points
    100
    Par défaut
    Bonjour,

    je l'ai fait mais j'ai toujours la même erreur !

    [BCC32 Erreur] UClient.cpp(877): E2031 Impossible de transtyper de 'AnsiString' en 'char'
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
     
    	unsigned char Trame [20];
     
     
     
    	Trame[0] =  (char) HEX2ASCII(Form1->EditNum->Text.SubString(1,2).c_str());

  6. #6
    Membre chevronné

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

    Informations forums :
    Inscription : Juin 2002
    Messages : 1 374
    Points : 1 759
    Points
    1 759
    Par défaut
    Salut !

    S'il s'agit de saisir une expression littérale (hexadécimale) pour ensuite la convertir :

    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
     
    //--
    // Pour les parmètres MSD et LSD : 
    // de '0' à '9' ou de 'A' à 'F' (maj ou min)
    //--
    Byte HexToByte(char MSD, char LSD)
    {
    int msd = MSD & 0x0F;
    if(MSD >= 'A') msd = msd + 0x09;
    msd = msd << 4;
     
    int lsd = LSD & 0x0F;
    if(LSD >= 'A') lsd = lsd + 0x09;
     
    return (Byte)(msd + lsd);
    }
    //--
    void __fastcall TForm1::SpeedButton1Click(TObject *Sender)
    {
    AnsiString N = Edit1->Text;
    trame[0] = HexToByte(N[1], N[2]);
    trame[1] = HexToByte(N[3], N[4]);
    trame[2] = HexToByte(N[5], N[6]);
    }
    //--
    A plus !

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    508
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Haute Vienne (Limousin)

    Informations forums :
    Inscription : Avril 2008
    Messages : 508
    Points : 100
    Points
    100
    Par défaut
    Merci henderson, je pense que c'est ce qu'il me faut !

    Par contre, ma connexion vers le port USB se fait dans un thread qui tourne à l'infini en lisant les informations qui s'affichent ensuite sur des graphes.

    Et j'aimerai que le code que je veux envoyer sur le port USB se fasse lorsque j'appuie sur un bouton situé sur ma Form principale !!!

    alors dans le thread, j'ai fait comme ceci mais ma trame s'envoie à chaque fois sans que j'appuie sur ce bouton :

    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
     
    if (Form1->JvImgBtnNomFlotteur->OnClick)
    {
    	int y;
     
    	unsigned char Trame [20];
     
    	AnsiString Num1 = Form1->Edit1->Text;
    	TabNom[Form1->JvgTabControlFlotteurs->TabIndex] = Form1->EditNom->Text;
     
     
    	TrameNom[0] = Form1->HexToByte(Num1[1], Num1[2]);
    	TrameNom[1] = Form1->HexToByte(Num1[3], Num1[4]);
    	TrameNom[2] = Form1->HexToByte(Num1[5], Num1[6]);
    	TrameNom[3] = 0x01;
     
    	for (y= 0; y < Form1->EditNom->Text.Length(); y++)
    	{
    		TrameNom[4+y] =TabNom[Form1->JvgTabControlFlotteurs->TabIndex].c_str()[y];
     
    	}
     
     
    	for(y=(Form1->Edit1->Text.Length()+4);y<14;y++)
    		Trame[y]=0;
     
    	Trame[14] = 0;
    	Trame[15] = 0;
    	Trame[16] = 0;
    	Trame[17] = 0;
    	Trame[18] = 0;
    	Trame[19] = 0;
     
    	DWORD dwBytesWritten;
     
    	WriteFile(hdl,
    		Trame,
    		20,
    		&dwBytesWritten,
    		NULL);
    }
    Comment puis je interrompre le thread pour envoyer la trame que quand j'appuie sur mon bouton d'envoi trame ou alors mettre mon code d'envoi dans l'exécution du bouton mais j'ai quelques soucis à faire le lien avec les différents paramètres du WriteFile !!!

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

Discussions similaires

  1. Réponses: 0
    Dernier message: 23/11/2010, 16h33
  2. Réponses: 2
    Dernier message: 30/05/2010, 03h36
  3. Comment récupérer le contenu de plusieurs fichiers textes ?
    Par calimero2611 dans le forum Langage
    Réponses: 9
    Dernier message: 19/02/2006, 15h45
  4. [SQL] comment récupérer le contenu de cases à cocher
    Par Viau dans le forum PHP & Base de données
    Réponses: 7
    Dernier message: 31/01/2006, 14h56
  5. [Balise XML] Comment récupérer le contenu entre 2 balise?
    Par ZoumZoumMan dans le forum C++Builder
    Réponses: 5
    Dernier message: 05/03/2004, 16h36

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