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

Langage Delphi Discussion :

Gérer une reception de données


Sujet :

Langage Delphi

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2015
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2015
    Messages : 34
    Points : 32
    Points
    32
    Par défaut Gérer une reception de données
    Bonjour (;
    Voilà dans mon projet de terminal (Classe intéractiv Porf/élèves) je dois faire un programme qui reçoit des données envoyé par 4 télécommandes et les affiché traité dans un fichier Excel !

    Grâce à déjà 2 sujets sur ce site j'ai déjà beaucoup avancé, merci encore!
    Je reviens vers vous puisque aujourd'hui j'ai un autre problème (:

    Voilà J'ai donc 4 télécomandes (1,2,3,4) qui on chaqu'une d'elles 4 boutton (a,b,c,d) Pour cela j'ai pondu 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
    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
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    if StrToInt(chaine2[2]) = Integer(1) then
        begin
     if StrToInt(chaine2[5]) = Integer(1) then
         begin
           Form1.Reponsej1 := 'A' ;
           Showmessage(chaine2[5])  ;
         End
        else if StrToInt(chaine2[5]) = Integer(2) then
              begin
                Form1.Reponsej1 := 'B' ;
                Showmessage(chaine2[5])  ;
              End
             else if StrToInt(chaine2[5]) = Integer(3) then
                 begin
                    Form1.Reponsej1 := 'C' ;
                    Showmessage(chaine2[5])  ;
                 End
                else if StrToInt(chaine2[5]) = Integer(4) then
                      begin
                        Form1.Reponsej1 := 'D' ;
                        Showmessage(chaine2[5])  ;
                      End
     end ;
     
     //-----------------------------------------------------------
     if StrToInt(chaine2[2]) = Integer(2) then
        begin
     if StrToInt(chaine2[5]) = Integer(1) then
         begin
           Form1.Reponsej2 := 'A' ;
           Showmessage(chaine2[5])  ;
         End
        else if StrToInt(chaine2[5]) = Integer(2) then
              begin
                Form1.Reponsej2 := 'B' ;
                Showmessage(chaine2[5])  ;
              End
             else if StrToInt(chaine2[5]) = Integer(3) then
                 begin
                    Form1.Reponsej2 := 'C' ;
                    Showmessage(chaine2[5])  ;
                 End
                else if StrToInt(chaine2[5]) = Integer(4) then
                      begin
                        Form1.Reponsej2 := 'D' ;
                        Showmessage(chaine2[5])  ;
                      End
    //--------------------------------------------------------------------------
     end ;
     
      if StrToInt(chaine2[2]) = Integer(3) then
        begin
     if StrToInt(chaine2[5]) = Integer(1) then
         begin
           Form1.Reponsej3 := 'A' ;
           Showmessage(chaine2[5])  ;
         End
        else if StrToInt(chaine2[5]) = Integer(2) then
              begin
                Form1.Reponsej3 := 'B' ;
                Showmessage(chaine2[5])  ;
              End
             else if StrToInt(chaine2[5]) = Integer(3) then
                 begin
                    Form1.Reponsej3 := 'C' ;
                    Showmessage(chaine2[5])  ;
                 End
                else if StrToInt(chaine2[5]) = Integer(4) then
                      begin
                        Form1.Reponsej3 := 'D' ;
                        Showmessage(chaine2[5])  ;
                      End
     end ;
     //-----------------------------------------------------------
      if StrToInt(chaine2[2]) = Integer(4) then
        begin
     if StrToInt(chaine2[5]) = Integer(1) then
         begin
           Form1.Reponsej4 := 'A' ;
           Showmessage(chaine2[5])  ;
         End
        else if StrToInt(chaine2[5]) = Integer(2) then
              begin
                Form1.Reponsej4 := 'B' ;
                Showmessage(chaine2[5])  ;
              End
             else if StrToInt(chaine2[5]) = Integer(3) then
                 begin
                    Form1.Reponsej4 := 'C' ;
                    Showmessage(chaine2[5])  ;
                 End
                else if StrToInt(chaine2[5]) = Integer(4) then
                      begin
                        Form1.Reponsej4 := 'D' ;
                        Showmessage(chaine2[5])  ;
                      End
    end
    end;
    Qui fonctionne très bien pour la première ligne de question. Mais sachant que mon programme fonctionne avec un timer et une progresse bar j'aimerais synchroniser l'arrivé des valeurs et chaque questions.
    Pour être plus précis, imaginons que le prof met son diaporama a l'écran et comme j'ai réglé dans mon programme, à chaque diapo passé, la progresse bar avance d'une case et suis le timer (qui lui est réglé par le prof a l'ouverture du programme).
    Donc pour enfin arrivé au problème. Je cherche à faire en sorte que les données reçus s'enregistre dans un tableau qui lui serras gérer en mode array deux dimension, mais pour lui dire à tel moment tu met les données reçus dans la case pour chaque élèves différent.

    Donc 4 élèves qui répondent à (disons 10) 10 questions d'un intervalle de 5 secondes avec 4 choix de boutons.

    J'hésite à vous envoyé mon programme puisqu'il est asser massique (: Une petite photo pour mieux comprendre.
    http://www.cjoint.com/15mi/EEwqjMVWIPN.htm

    Comme on le voit sur la photo, j'arrive à gérer parfaitement les 4 chaines de caractères, en les traitants et en les affichant dans la bonne case.

    Pour repréciser, je cherche à différencier la reception des données pour qu'une télécommandes puisse répondre à toutes les questions avec l'afficahge derrière sans problème.
    J'ai déjà fais le plus gros mais je ne sais pas comment faire pour lui dire a
    if PowerPointApp.slide(2) then...
    ou
    if ProgressBar1.position = 2 then...
    Mais au début de la deuxièmes diapo (des exemples que je viens de cités) ça crash. En gros il n'a pas encore reçus les données donc il bug... Mais je n’arrive pas à faire durée le temps de reçois des données pour que tout soit coordonnées.

    j’espère avoir été clair (: Merci d'avance pour vos réponses. Si vous voulez tout le programme je le partagerais (:

    Thomas.B

  2. #2
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 030
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 030
    Points : 40 928
    Points
    40 928
    Billets dans le blog
    62
    Par défaut
    Bonjour,

    s'il s'agissait de Delphi on commençerait par compacter le code grâce à l'instruction case et une petite fonction de façon à avoir plus de visibilité ?

    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
    function valeurreponse(valeur : word ) : string;
    begin
      case valeur of
        1 : result:='A';
        2 : result:='B';
        3 : result:='C';
        4 : result:='D';
     end;  
    end;
    begin
     ...
     Case Inttostr(Chaine2[2]) of
     1 : reponsej1:=valeurreponse(StrToInt(chaine2[5]));
     2 : reponsej2:=valeurreponse(StrToInt(chaine2[5]));
     3 : reponsej3:=valeurreponse(StrToInt(chaine2[5]));
     4 : reponsej4:=valeurreponse(StrToInt(chaine2[5]));
     end;
    ...
    // c'est encore largement améliorable

    mais j'ai l'impression que cet élève s'est planté de forum
    je dois faire un programme qui reçoit des données envoyées par 4 télécommandes et les afficher/traiter dans un fichier Excel !
    et qu'il s'agit de VBA
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2015
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2015
    Messages : 34
    Points : 32
    Points
    32
    Par défaut
    Salut (: Alors si je suis bien sur Delphi, mais le projet et divisé en 3. Je suis donc charger de la partie Homme/Machine grâce à Delphi.
    Merci pour l’amélioration j'en prend de la graine (:
    Je ne sais pas si vous avez compris ce que je cherche a faire.
    Je cherche à pouvoir différencier les données que je reçoit de la question 1 jusqu'à la dernière question.
    Donc les données que j'avais penser à différencier les données reçus suivant le diapo actif. Et enregistrées les données reçus dans un tableau array à deux dimension. Mais par exemple quand le gros pâté de code que j'ai mis au dessus je le répété a chaque diapo. Mais si je dis "if powerpointapp.slide = 2 then (gros pâté du dessus)" Pour différencier les données reçus. Avec cette technique, quand le diapo est à la 2 ème slide il plante parce qu'il n'a encore rien reçus, et j'aimerais mettre un temps de latence durant tout le temps de la diapo (qui est aléatoire) Donc comment on reçois les données je sais le faire (:

    Voilà j’espère avoir été plus claire (:

  4. #4
    Modérateur
    Avatar de tourlourou
    Homme Profil pro
    Biologiste ; Progr(amateur)
    Inscrit en
    Mars 2005
    Messages
    3 856
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Biologiste ; Progr(amateur)

    Informations forums :
    Inscription : Mars 2005
    Messages : 3 856
    Points : 11 290
    Points
    11 290
    Billets dans le blog
    6
    Par défaut
    Pour bien réfléchir au problème, il faudrait savoir :
    - comment arrivent les réponses des télécommandes,
    - si elles sont directement attribuables à un candidat (ports différents) ou le code de la télécommande (du candidat) est inclus dans une trame de réception commune,
    - qui gère le tempo : le programme ne peut deviner où en est la présentation, sauf s'il peut demander le n° de la diapo à powerpoint ou sait combien de temps dure chaque diapo (il connaît le rythme)...

    On ne peut mettre de ProgressBar pour une question que si on sait quand elle démarre et combien de temps elle dure.

    Il est conseillé de faire des fonctions qui décortiquent les trames (chaînes) si elles sont sur le même modèle, et d'agir en fonction.

    Ne pas oublier qu'un candidat peut pê appuyer 2 fois pendant la même question : doit-on bloquer la 2° réception, ou retenir cette correction ?

    etc.
    Delphi 5 Pro - Delphi 11.3 Alexandria Community Edition - CodeTyphon 6.90 sous Windows 10 ; CT 6.40 sous Ubuntu 18.04 (VM)
    . Ignorer la FAQ Delphi et les Cours et Tutoriels Delphi nuit gravement à notre code !

  5. #5
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 030
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 030
    Points : 40 928
    Points
    40 928
    Billets dans le blog
    62
    Par défaut
    Bonjour,
    comment arrivent les réponses des télécommandes,
    et surtout les télécommandes sont-elles "réinitialisables" ?
    Si on admet que c'est sur le principe des protocoles RS232 et que l'on obtient un flux de données le principe serait d'effacer les données reçues à l'affichage de la nouvelle diapo mais aussi effacer ce qui pourrait être en cours d'envoi (d'où ma question sur le "réinitialisable")
    ou le code de la télécommande (du candidat) est inclus
    je pense qu'il s'agit de ça , je le déduit du code "Case Inttostr(Chaine2[2]) of"
    la question alors serait ne serait-il pas judicieux de mettre dans la trame le numéro de la question
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

Discussions similaires

  1. [AC-2003] gérer une base de données avec des codes barres
    Par franklin59 dans le forum Modélisation
    Réponses: 1
    Dernier message: 09/12/2009, 15h21
  2. Réponses: 2
    Dernier message: 09/11/2009, 23h34
  3. [AC-2007] Comment gérer une liste de données trop importante ?
    Par cyrildad dans le forum Modélisation
    Réponses: 5
    Dernier message: 08/09/2009, 17h55
  4. Gérer une base de données sous netbeans 6.5
    Par hamzarb3 dans le forum NetBeans
    Réponses: 0
    Dernier message: 05/03/2009, 22h10
  5. gérer une base de donnée MySql via C++
    Par thiane dans le forum Bibliothèques
    Réponses: 9
    Dernier message: 19/05/2005, 16h19

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