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 :

SR232 CodeGear C++Builder2007


Sujet :

C++Builder

  1. #1
    Membre actif Avatar de 3logy
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2007
    Messages
    280
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Allemagne

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Août 2007
    Messages : 280
    Points : 222
    Points
    222
    Par défaut SR232 CodeGear C++Builder2007
    Salut tout le monde,

    Bon voila : J'ai reussi a programmer un PortCom avec une Interface graphique avec un Code chope sur le net et l'aide d'un ami.
    J'utilise CodeGear C++Builder.
    Mais je ne suis pas au bout de mes difficultes car j'ai encore 3 a 4 ptits problemes:

    1. J'ai cree un TMemo ou je recois les donnees envoyees par cet appareil de mesure via le port com. J'ai aussi eu a creer un StringGrid( tableau) toujours sur l'interface dont voici le code:

    void __fastcall TConnectionSR232App:: FormCreate(TObject *Sender)
    { int i;
    Serial = new TConnectSR232();
    Serial->ReturnMethod=ReturnMethod;
    AdjustDevicesNames(Serial->GetAvailableDevicesNames(true,false,NULL));
    AdjustInterface();
    //Receive_Memo->Clear();
    StringGrid1->Cells[0][0]="";
    //StringGrid1->Cells[0][1]= StringGrid1->Cells[0][0]+StringGrid1->Cells[1][0];
    StringGrid1->Cells[1][0]= "Date/Heure";
    StringGrid1->Cells[2][0]= "Lot.Nr";
    StringGrid1->Cells[3][0]= "Utilisateur";
    StringGrid1->Cells[4][0]= "Valeur 1";
    StringGrid1->Cells[5][0]= "Valeur 2";
    StringGrid1->Cells[6][0]= "Valeur 2 - Valeur 1";
    StringGrid1->Cells[7][0]= "Const";
    StringGrid1->Cells[8][0]= "Resultat*Const";
    StringGrid1->Cells[9][0]= "Observation";

    for (i = 1; i < StringGrid1->RowCount; i++) {
    StringGrid1->Cells[0][i]= IntToStr(i);
    }
    }
    Et voici le code du TMemo:

    void TConnectionSR232App::ReturnMethod(AnsiString NewData)
    {
    Receive_Memo->Text=Receive_Memo->Text+NewData;
    }

    Je veux rendre le Memo invisible(ca c facile) afin que des donnees recues precises(Date/Heure, Valeur 1, Valeur 2, Valeur 2- Valeur 1) s'affichent automatiquement dans le tableau.
    Ceci est l'une de mes difficultes...Quelqu'un a-t-il une idee?
    Merci

    P.S : Date et Heure doivent être celles du PC... et non celles recues de l'appareil.

  2. #2
    Membre éprouvé
    Avatar de bandit boy
    Profil pro
    Inscrit en
    Février 2006
    Messages
    916
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 916
    Points : 1 007
    Points
    1 007
    Par défaut
    Salut,

    Deux trois petites infos:
    - l'heure du PC n'est pas fiable à la ms près
    - il existe un composant TComport qui gère la communication série, sinon les API Windows font ca aussi, je ne connais pas le TConnectionSR232App.
    - De quel type sont tes informations ?

    Si tes information sont (comme je le pense) sous forme de texte, il te suffira de les extraires une par une pour les stocker dans le TStringList:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    void TConnectionSR232App::ReturnMethod(AnsiString NewData)
    { 
        static int ligne;                // ligne dans le tableau en static pour le garder
        ligne++;                         // en mémoire, incrémenté à chaque réception
        AnsiString Date = NewData.SubString(...); //extractions des infos
        AnsiString Lot   = NewData.SubString(...);
        AnsiString Utilis = NewData.SubString(...);
        ...
        StringGrid1->Cells[1][ligne]= Date;    //inscription dans le tableau
        StringGrid1->Cells[2][ligne]= Lot;
        StringGrid1->Cells[3][ligne]= Utilis;
        ....
    }
    à toi de voir comment sont séparés les information pour les déchiffrer. Utilise les commande lié aux variables AnsiString (.Pos(), .Delete(), .SubString() ...)
    Si tu veux d'autres infos, précise et on te renseignera.

    Bon courage

  3. #3
    Membre actif Avatar de 3logy
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2007
    Messages
    280
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Allemagne

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Août 2007
    Messages : 280
    Points : 222
    Points
    222
    Par défaut SR232
    Salut Bandit boy:

    t'a raison de pas connaitre le TConnectionSR232App puisque c un nom que j'ai donne moi mm....
    Je crois que ta methode fonctionnera, je me suis renseigner entre temps et les reponse recuiellies vont dans la mm direction que ce que tu proposes....Je le testerais demain...
    Bon ma question est la suivante...je suis bien conscient que l'heure du Pc n'est pas fiable...mais l'heure affiche sur l'appareil donne ne l'est pas aussi...on voudrais juste eviter des futures erreurs lies a la non mise a jour reguliere de l'heure afficher dans cet appareil.....

    Peut tu donc me montrer comment l'on fait pour afficher la date et l'heure de la machine dans le dit tableau?
    Merci

  4. #4
    Membre éprouvé
    Avatar de bandit boy
    Profil pro
    Inscrit en
    Février 2006
    Messages
    916
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 916
    Points : 1 007
    Points
    1 007
    Par défaut
    Salut, tu peux faire un truc dans le style:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    AnsiString s = DateTimeToStr(Now());
    //s est de la forme 28/08/07 09:50:06
    //la date et l'heure sont séparée par un espace
    Label1->Caption = s.SubString(1,s.Pos(" "));                      //récupère la date (avant l'espace)
    Label2->Caption = s.SubString(s.Pos(" ")+1,s.Length()-s.Pos(" "));//récupère l'heure (après l'espace)
    là j'ai mis dans des TLabel, mais c'est pareil pour les cases du StringGrid, tu remplace Label1 par StringGrid1->Cells[...][...].

  5. #5
    Membre actif Avatar de 3logy
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2007
    Messages
    280
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Allemagne

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Août 2007
    Messages : 280
    Points : 222
    Points
    222
    Par défaut
    Citation Envoyé par bandit boy Voir le message
    à toi de voir comment sont séparés les information pour les déchiffrer. Utilise les commande lié aux variables AnsiString (.Pos(), .Delete(), .SubString() ...)
    Si tu veux d'autres infos, précise et on te renseignera.

    Bon courage
    Salut Bandit;

    justement j'ai des problemes pour utiliser AnsiString Date = NewData.SubString(...);
    Si tu peux me dire exactement ce que ca fais, ce serais genial....

    Ah oui, je recois des donnees textes sous la forme:

    06.08.2007 13:34:00 1944812 Receive : <13><10>
    06.08.2007 13:34:00 1944859 Receive : <13><10>
    06.08.2007 13:34:00 1945125 Receive : DR/4000U S
    06.08.2007 13:34:00 1945562 Receive : ER.NR.: 0310U0005217 2.40<13><10>
    06.08.2007 13:34:01 1945968 Receive : 06-AUG-07 13:52:16 MULTI-WELLENLANGE<13><10>
    06.08.2007 13:34:01 1946250 Receive : Gruppe 0022 Probe 0001 <13><10>
    06.08.2007 13:34:01 1946375 Receive : -0.001 ABS<13><10>
    06.08.2007 13:34:01 1946500 Receive : A=K1A1+K2A2<13><10>
    06.08.2007 13:34:02 1946890 Receive : 277.0 nm -0.000 ABS K1: 1.0000<13><10>
    06.08.2007 13:34:02 1947281 Receive : 300.0 nm -0.000 ABS K2: 1.0000<13><10>
    06.08.2007 13:36:05 2070546 Receive : <13><10>
    06.08.2007 13:36:06 2070578 Receive : <13><10>
    et les donnees a recuperer sont:
    A1= 277.0 nm, A2= 300.0 nm et A. La constante K doit etre manuellement donnee par l'utilisateur <---- ceci etait mon prochain probleme : une case ou l'on entre une valeur, on accepte avec ok et cette valeur est ajoutee dans le tableau...

  6. #6
    Membre éprouvé
    Avatar de bandit boy
    Profil pro
    Inscrit en
    Février 2006
    Messages
    916
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 916
    Points : 1 007
    Points
    1 007
    Par défaut
    SubString permet d'extraire une chaine de l'AnsiString, par exemple:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    AnsiString data = "06.08.2007 13:34:00 1944812 Receive : <13><10>";
    AnsiString date = data.SubString(1,data.Pos(" "));
    date vaudra "06.08.2007". On extrait les caractères entre le premier (d'où le 1) et jusqu'à " ". La fonction demande un index de départ et un nombre de caractères.

    .Pos permet de renvoyer l'index du premier caractère(s) dans la chaine.

    La touche F1 permet d'afficher l'aide, les explications y seront surement plus claires que les miennes.

  7. #7
    Membre actif Avatar de 3logy
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2007
    Messages
    280
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Allemagne

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Août 2007
    Messages : 280
    Points : 222
    Points
    222
    Par défaut
    Le Probleme avec l'heure est resolue j'ai utilise ton code est un peu bastonne :
    ca donne ceci :

    void TConnectionSR232App::ReturnMethod(AnsiString NewData)

    {

    static int Ligne; // ligne dans le tableau en static pour le garder
    Ligne++; // en mémoire, incrémenté à chaque réception

    Receive_Memo->Text=Receive_Memo->Text+NewData;

    StringGrid1->Cells[1][StringGrid1->Row] = DateToStr(Now())+"/"+TimeToStr(Now());

    (....)
    }
    Bon premier pour les cases suivantes : j'ai 9 lignes que je recois comment aller seulement a la ligne 8 et 9 ensuite prendre les infos dont j'ai besoin?

    Dans le TMemo j'ai le malheur que les lignes recues se collent et c un chaos total....

  8. #8
    Membre éprouvé
    Avatar de bandit boy
    Profil pro
    Inscrit en
    Février 2006
    Messages
    916
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 916
    Points : 1 007
    Points
    1 007
    Par défaut
    La réponse se trouve sur ton autre post.

    Comment écrire une nouvelle ligne dans un TMemo, et comment accéder à n'importe qu'elle ligne de ce TMemo.

  9. #9
    Membre actif Avatar de 3logy
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2007
    Messages
    280
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Allemagne

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Août 2007
    Messages : 280
    Points : 222
    Points
    222
    Par défaut Suite
    Salut
    Voici le code obtenu et il fonctionne...Merci bandit

    void TConnectionSR232App::ReturnMethod(AnsiString NewData)
    {
    int i;

    Receive_Memo->Text = Receive_Memo->Text+NewData;

    AnsiString Ligne = Receive_Memo->Lines->Strings[6];
    StringGrid1->Cells[7][1] = Ligne.SubString(1,Ligne.Pos(" "));
    AnsiString Lignes = Receive_Memo->Lines->Strings[7];
    StringGrid1->Cells[8][1] = Lignes.SubString(1,Lignes.Pos(" "));
    StringGrid1->RowCount = row+1 ;
    StringGrid1->Cells[1][row] = DateToStr(Now())+"/"+TimeToStr(Now()); // Place dans la cellule 1 la date et l'heure
    row++;


    }
    PAr la suite lorsque je teste j'ai 5 lignes qui s'affichent au lieu d'une seule.

    Comment puis je faire à tel enseigne qu'apres les 7 lignes recues dans le TMemo et enregistrees dans une seule ligne du TGrid il passe automatiquement a la prochaine ligne du TGrid et enregistrees les prochaines donnees comme la premiere action.

    Merci

  10. #10
    Membre éprouvé
    Avatar de bandit boy
    Profil pro
    Inscrit en
    Février 2006
    Messages
    916
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 916
    Points : 1 007
    Points
    1 007
    Par défaut
    Salut,
    je n'ai pas très bien compris ta question.

    Si tu veux ajouter une ligne à ta grille, je sais que pour la StringGrid, il y a la propriété RowCount qui définit le nombre de ligne, il te suffit de l'incrémenter.

  11. #11
    Membre actif Avatar de 3logy
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2007
    Messages
    280
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Allemagne

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Août 2007
    Messages : 280
    Points : 222
    Points
    222
    Par défaut
    Citation Envoyé par bandit boy Voir le message
    Salut,
    je n'ai pas très bien compris ta question.

    Si tu veux ajouter une ligne à ta grille, je sais que pour la StringGrid, il y a la propriété RowCount qui définit le nombre de ligne, il te suffit de l'incrémenter.
    Okay ca marche... J'ai ensuite voulu additionner le contenu de ma cells[7][1] et de ma cells[8][1]; comme ceci:

    int Wert;
    int Wert2;
    int Erg;
    int Ligne = Receive_Memo->Lines->Count;
    Receive_Memo->Text = Receive_Memo->Text+NewData;
    for (int i = 0 ; i < Ligne ; i++)
    {
    AnsiString Ligne = Receive_Memo->Lines->Strings[7];
    StringGrid1->Cells[7][1] = Ligne.SubString(1,Ligne.Pos(" "));
    AnsiString Lignes = Receive_Memo->Lines->Strings[8];
    StringGrid1->Cells[8][1] = Lignes.SubString(1,Lignes.Pos(" "));
    StringGrid1->Cells[1][row] = DateToStr(Now())+"/"+TimeToStr(Now()); // Place dans la cellule 1 la date et l'heure
    StringGrid1->RowCount = row+1 ;
    Wert = StrToIntDef(StringGrid1->Cells[7][1], 0);
    Wert2 = StrToIntDef(StringGrid1->Cells[8][1], 0);
    Erg = Wert + Wert2;
    StringGrid1->Cells[10][1]= IntToStr(Erg);
    Je reussi à avoir les donnees dans mes cellules WERT1 et WERT2 respectives mais niveau resultat a la colonne Erg j'ai un zero!

    Quelqu'un sait il où la faute est?

  12. #12
    Membre éprouvé
    Avatar de bandit boy
    Profil pro
    Inscrit en
    Février 2006
    Messages
    916
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 916
    Points : 1 007
    Points
    1 007
    Par défaut
    La fonction StrToIntDef que tu utilises transforme une chaîne en entier, si la chaîne est un entier sous forme de texte, donc s'il y a un espace, un point ou n'importe quel autre caractère que 0 1 2 3 4 5 6 7 8 ou 9, la valeur renvoyé est celle en deuxième paramètre.

    Dans ton code, tu as mis 0:
    Wert = StrToIntDef(StringGrid1->Cells[7][1], 0);
    Wert2 = StrToIntDef(StringGrid1->Cells[8][1], 0);
    Quel est le texte exacte que tu lis dans les cellules?

  13. #13
    Membre actif Avatar de 3logy
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2007
    Messages
    280
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Allemagne

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Août 2007
    Messages : 280
    Points : 222
    Points
    222
    Par défaut
    Citation Envoyé par bandit boy Voir le message


    Quel est le texte exacte que tu lis dans les cellules?
    Voici:

    250.0 mn 0.001 ABS K1: 1.0000 #ligne 7
    300.0 mn -0.001 ABS K2: 1.0000 #ligne 8


    Actuellement je reussi avec la fonction ci-haut a avoir 250 dans ma cellule 7 et 300 dans ma cellule 8.

    Mais au niveau de l'operation arithmetique j'ai rien.

  14. #14
    Membre éprouvé
    Avatar de bandit boy
    Profil pro
    Inscrit en
    Février 2006
    Messages
    916
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 916
    Points : 1 007
    Points
    1 007
    Par défaut
    Désolé pour le retard,

    Attention important, tu as "300" (un entier) ou "300.0" (un nombre à virgule flottante) ce qui est totalement différent.
    Si tu utilises:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Wert = StrToInt(StringGrid1->Cells[7][1]);
    au lieu de:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Wert = StrToIntDef(StringGrid1->Cells[7][1], 0);
    Tu verras apparaître (c'est bien ce que je pense) un message d'erreur comme quoi la chaîne n'est pas un nombre entier.

    Veux tu récupérer un int ou un float?
    Si tu es sûr que ton nombre est un entier, utilise la fonction StrToInt, elle a l'avantage de prévenir d'un message d'erreur quand ca coince quelque part au lieu de passer sans erreur et de te donner un résultat faux.

  15. #15
    Membre actif Avatar de 3logy
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2007
    Messages
    280
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Allemagne

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Août 2007
    Messages : 280
    Points : 222
    Points
    222
    Par défaut
    Citation Envoyé par bandit boy Voir le message
    Désolé pour le retard,
    C pas grave

    Citation Envoyé par bandit boy Voir le message
    Veux tu récupérer un int ou un float?
    Ouppps t'a raison c des floats!!!!

    Je veux recuperer exactement les Float 250.0 et 300.0 et ensuite pouvoir additionner les valeurs se retrouvant dans les cellules.

  16. #16
    Membre éprouvé
    Avatar de bandit boy
    Profil pro
    Inscrit en
    Février 2006
    Messages
    916
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 916
    Points : 1 007
    Points
    1 007
    Par défaut
    Ok, pas de soucis, il faut alors utiliser la fonction:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    float nombre = StrToFloat(chaine);
    Attention, là tu te heurteras surement à un problème de compaptibilité. La virgule sera indiqué par '.' ou ','. Il faudra bien faire attention !!

    Deux solutions:
    - changer le séparateur décimal,
    - adapter ta chaîne au séparateur décimal.

    Tu peux changer le caractère par défaut avec:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DecimalSeparator = '.';
    ou ',' à toi de voir.

    Si tu veux l'adapter, tu sais maintenant comment accéder à un caractère d'une AnsiString et le changer.

    Je te mets aussi en garde sur le fait que d'autres programmes peuvent changer cette variable (excel par exemple). Il faudra surement faire le test ou le changement à chaque fois.

  17. #17
    Membre actif Avatar de 3logy
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2007
    Messages
    280
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Allemagne

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Août 2007
    Messages : 280
    Points : 222
    Points
    222
    Par défaut
    BOn voici le code ecrit:

    void TConnectionSR232App::ReturnMethod(AnsiString NewData)
    {
    float resume;
    AnsiString Wert1, Wert2;
    int Ligne = Receive_Memo->Lines->Count;
    Receive_Memo->Text = Receive_Memo->Text+NewData;

    StringGrid1->Cells[1][row] = DateToStr(Now())+"/"+TimeToStr(Now());

    for (int i = 0 ; i < Ligne ; i++)
    {
    DecimalSeparator = '.';


    AnsiString Ligne = Receive_Memo->Lines->Strings[7];

    Wert1 = Ligne.SubString(1,Ligne.Pos(" "));
    StringGrid1->Cells[7][1] = Wert1;

    Ligne = Receive_Memo->Lines->Strings[8];

    Wert2 = Ligne.SubString(1,Ligne.Pos(" "));
    StringGrid1->Cells[8][1] = Wert2;

    resume = StrToFloat(Wert2) - StrToFloat(Wert1) ;
    StringGrid1->Cells[9][1] = FloatToStr(resume);
    }

    }
    avec des erreurs :

    1. Dans mon Tmemo je ne recois plus qu'une partie de ligne
    2. Dans mes cellules ne s'affichent plus les nombres coe precedement!

    et par contre lorsque j'enleve les 2 dernieres lignes tout marche sauf que je ne peux effectuer d'operations arithmetiques.

    Je suis deboussole...

    Merci

  18. #18
    Rédacteur
    Avatar de dvsoft
    Homme Profil pro
    Architecte technique
    Inscrit en
    Août 2002
    Messages
    176
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2002
    Messages : 176
    Points : 622
    Points
    622
    Par défaut
    Bonjour,

    Ca serait sympa si tu pouvais éviter le langage SMS. Ton code n’est pas lisible non plus, là aussi essai de faire un effort, tu aurais surement de meilleures réponses à tes questions.

    Tu devrais prendre en considération la gestion des erreurs de conversion également avec :

    Try {
    }
    Catch(…) {
    }

    Tu as surement perdu pas mal de temps en écrivent toi-même les méthodes bas niveau de communication RS232. IL existe une excellente librairie en Opensource pour la gestion des communications séries.
    Regarde là : http://sourceforge.net/projects/tpapro/


    Bon Courage
    Alain

  19. #19
    Membre actif Avatar de 3logy
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2007
    Messages
    280
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Allemagne

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Août 2007
    Messages : 280
    Points : 222
    Points
    222
    Par défaut
    Citation Envoyé par dvsoft Voir le message
    Bonjour,

    Ca serait sympa si tu pouvais éviter le langage SMS. Ton code n’est pas lisible non plus, là aussi essai de faire un effort, tu aurais surement de meilleures réponses à tes questions.
    Okay merci, je tacherais d'eviter dans le futur le language sms.

    Tu devrais prendre en considération la gestion des erreurs de conversion également avec :

    Try {
    }
    Catch(…) {
    }

    Tu as surement perdu pas mal de temps en écrivent toi-même les méthodes bas niveau de communication RS232. IL existe une excellente librairie en Opensource pour la gestion des communications séries.
    Regarde là : http://sourceforge.net/projects/tpapro/


    Bon Courage
    Alain
    Oui c'est vrai que j'ai mis pas mal de temps la dessus! mais la communication marche, mon probleme se resume a pouvoir recuperer des donnees recues, effectuer des operations et les placer dans mon StringGrid....

    S'il te plait le Try{
    }
    Catch(...){
    }

    comment est ce que je peux l'utiliser dans mon cas pour convertir et soustraire sans erreurs...?

    Merci!


    P.S :

    pour utiliser : DecimalSeparator = '.';
    j'ai bien besoin de la bibliotheque SysUtils n'est pas?

  20. #20
    Membre actif Avatar de 3logy
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2007
    Messages
    280
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Allemagne

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Août 2007
    Messages : 280
    Points : 222
    Points
    222
    Par défaut Ca y Est!



    C'est bon!
    j'ai juste cree un bouton pour faire l'operation:

    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
    void __fastcall TConnectionSR232App::Button1Click(TObject *Sender)
    {
    
    		 float r1,r2,erg;
    		 AnsiString s1, s2;
    
    		DecimalSeparator = '.'; 
    		AnsiString Lignes = Receive_Memo->Lines->Strings[7];
    				s1 = Lignes.SubString(1,Lignes.Pos(" "));
    				
    
    				Lignes = Receive_Memo->Lines->Strings[8];
    				s2 = Lignes.SubString(1,Lignes.Pos(" "));
    				
    		r1 = StrToFloat(s1);
    		r2 = StrToFloat(s2);
    		erg = r1 + r2;
    		StringGrid1->Cells[9][1] = FloatToStrF(erg, ffFixed, 7, 2);
    
    
    }
    Merci Bandit Boy!
    Merci Developpez!
    Bon J'ai pas fini mon projet mais cette partie est bel et bien terminée...

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

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