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

Lazarus Pascal Discussion :

Affichage du temps sur l'abscisse de TChart [Lazarus]


Sujet :

Lazarus Pascal

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 44
    Par défaut Affichage du temps sur l'abscisse de TChart
    bonjour à tous !

    J'ai besoin d'afficher sur un TChart des données qui arrivent en "temps réel"
    bien sûr TChart le fait, mais le format des labels sur l'axe des abscisses ne permet pas d'afficher un temps (variable TTime sous format "hh:nn").
    je sais que sur delphi on peut le faire mais je n'ai pas trouvé l'équivalent sous Lazarus.

  2. #2
    Membre émérite
    Avatar de ChPr
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    2 120
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 79
    Localisation : France, Val d'Oise (Île de France)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 2 120
    Par défaut
    Avec TChart, on peut afficher ce que l'on veut en abscisse et en ordonnée ... pour autant qu'on mette un peu les mains dans le cambouis . Il faut donc modifier quelques instructions dans la procédure DrawAxis de l'unité TAGraph du composant TChart (ne pas oublier de recompiler cette unité).

    Par exemple, pour l'axe X, on trouvera aux lignes 1262 et 1372 l'instruction :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MyText:= Trim(FloatToStr(Marque));
    Il suffit tout simplement de la remplacer par :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    MyText:= Ma_Transfo_d_un_Nombre_en_Chaine(Marque);
    où la fonction "Ma_Transfo_d_un_Nombre_en_Chaine" effectue la transformation que vous souhaitez.

    En l'occurrence, pour transformer un nombre en format hh:mm:ss, il y a une fonction toute faite et qui s'appelle TimeToStr. Elle a ceci de particulier :

    - seule la partie fractionnaire du nombre est prise en compte et la valeur 1 représente 24 heures. Il vous faut donc faire une conversion en amont de vos données. Par exemple, si vos données sont en secondes, il faudra les diviser par 24x3600.

    - l'affichage est modulo 24 heures.

    Voilà, ce n'est pas plus difficile que cela.

    Bon courage.

    Pierre

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 44
    Par défaut
    C’est parfait la modification marche parfaitement !
    J'ai modifié:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
       //markText := MarkToText(AMark);
        MarkText := FormatDateTime('hh:nn',AMark);
    Dans procédure DrawXMark(AMark: Double); et maintenant j'ai le temps en abscisse en disant X1:=now;

    Autre petit problème je voudrais que l'échelle m'indique des pas de 5 minutes actuellement elle est automatique et me donne donc plusieurs fois la même valeur car mon acquisition est relativement rapide.

  4. #4
    Membre émérite
    Avatar de ChPr
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    2 120
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 79
    Localisation : France, Val d'Oise (Île de France)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 2 120
    Par défaut
    C'est amusant, nous n'avons pas les mêmes noms de variables, de procédures et de fonctions.

    Quelle version de TChart avez-vous ? Où l'avez-vous eu ?

    Cordialement.

    Pierre

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 44
    Par défaut
    Je ne pourrais pas vous répondre car je ne sais pas.
    Le composant TChart est celui que j'ai eu d'origine avec la version windows 0.9.26.2 de lazarus !!
    les variables change mais pas le principe en tout cas, par contre les graduations de l'échelle ne me plaise pas!

  6. #6
    Membre émérite
    Avatar de ChPr
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    2 120
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 79
    Localisation : France, Val d'Oise (Île de France)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 2 120
    Par défaut
    OK, vu pour la version.

    Pour ce qui est des graduations, le "Pas" est calculé automatiquement et grosso-modo, il me semble qu'il soit affiché entre 6 et 10 pas. Votre problème doit relever de la troncature. Je m'explique. Supposons que votre abscisse aille de 100 s à 101 s. Si on ne modifie pas TChart, il va afficher :

    100 100.1 100.2 100.3 ... 100.9 101

    Si maintenant votre modification d'affichage ne fait pas la distinction entre une seconde et la suivante, vous verrez s'afficher :

    100 100 100 100 ... 100 101

    Est-ce que votre problème ne vient pas de là ?

    Cordialement.

    Pierre

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 44
    Par défaut
    oui c'est bien mon problème !!
    par exemple le graphe m'affiche en graduation des abcisses :

    15:50 15:50 15:50 15:51 15;51 .....
    alors que je souhaiterais que le graphe m'indique
    15:50 15:51 15:52 ...
    ou
    15:50 15:55 16:00...

  8. #8
    Membre émérite
    Avatar de ChPr
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    2 120
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 79
    Localisation : France, Val d'Oise (Île de France)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 2 120
    Par défaut
    A mon sens, si tu ne veux que tes unités soit des minutes et qu'il n'y ait pas de répétition, il faut ruser de la manière suivante :

    1 - quand tu entres un point tu écris :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    AddXY(Now*24*60, Valeur_Y, '', Ta_Couleur);
    2 - la modification dans Tchart doit maintenant être :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MarkText := FormatDateTime('hh:nn',AMark/(24*60));
    NOTA : Je n'ai pas essayé, mais ça devrait fonctionner.

    Cordialement.

    Pierre

  9. #9
    Membre averti
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 44
    Par défaut
    merci Chp pour ta proposition cela fonctionne !

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

Discussions similaires

  1. affichage en temps réel sur une page web
    Par time_w dans le forum Débuter
    Réponses: 2
    Dernier message: 26/08/2011, 15h52
  2. [JSP] affichage de resultat sur plusieurs pages
    Par de LANFRANCHI dans le forum Servlets/JSP
    Réponses: 13
    Dernier message: 10/02/2005, 11h00
  3. Affichage du temps d'exécution d'une requête
    Par milka dans le forum PostgreSQL
    Réponses: 1
    Dernier message: 22/03/2004, 18h48
  4. affichage de controles sur un splash screen
    Par shrek dans le forum C++Builder
    Réponses: 3
    Dernier message: 20/11/2003, 20h59
  5. [Delphi] Affichages de caractères sur l'écran
    Par julie20 dans le forum Débuter
    Réponses: 12
    Dernier message: 18/09/2003, 00h21

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