2017-02-07 1 views
-1

Actuellement, j'ai un DBChart avec plusieurs séries de lignes. Je mets la date-heure de chaque enregistrement sur les axes x.Delphi et Teechart - modification de la date et de l'heure d'exécution sur les axes X

Maintenant, ce dont j'ai besoin est de changer la date-heure pour une exécution. Donc, fondamentalement, la première date-heure enregistrée représenterait 0.0hrs.

Voici quelques exemples de ce que je veux dire:

  1. 2017-01-05 08:00:00 = Point annonciez 0.0hrs sur les axes X
  2. 2017-01-05 08:30:00 = Le point devrait indiquer 0.5hrs sur les axes X
  3. 2017-01-05 09:00:00 = Le point devrait montrer 1.0hrs sur les axes X
  4. 2017-01-05 09:30:00 = Le point devrait montrer 1.5hrs sur les axes X
  5. 2017-01-05 10:00:00 = Le point devrait indiquer 2.0hrs sur les axes X
  6. 2017-01-05 10:30:00 = Point devrait afficher sur les axes X 2.5hrs
  7. ETC ............

Fondamentalement, le tableau montrent ce qui se passe entre le moment où je commence et arrête d'enregistrer ma valeur dans la base de données. Il est plus important de savoir comment le temps doit s'écouler depuis le début de l'enregistrement.

Alors, est-ce qu'il y a une fonction ou un autre moyen dans DBChart qui peut m'aider à faire cela?

Merci pour votre aide

Répondre

0

Vous pouvez utiliser l'événement OnGetAxisLabel pour calculer la différence et le montrer. C'est à dire:

var startDate: TDateTime; 

procedure TForm1.FormCreate(Sender: TObject); 
var i: Integer; 
begin 
    Series1.FillSampleValues(10); 

    startDate:=StrToDateTime('08/02/2017 10:00:00'); 

    Series1.XValue[0]:=startDate; 
    for i:=1 to Series1.Count-1 do 
    Series1.XValue[i]:=Series1.XValue[i-1]+Round(random*10)*DateTimeStep[dtTenMinutes]; 
end; 

procedure TForm1.Chart1GetAxisLabel(Sender: TChartAxis; Series: TChartSeries; 
    ValueIndex: Integer; var LabelText: string); 
var tmpDate: TDateTime; 
begin 
    if (Sender = Chart1.Axes.Bottom) then 
    begin 
    tmpDate:=StrToDateTime(LabelText); 
    tmpDate:=tmpDate-startDate; 
    LabelText:=FormatDateTime('hh:mm:ss', tmpDate); 
    end; 
end; 
+0

Merci pour les réponses, c'était ce que je cherchais. Je devais juste le modifier un peu car le graphique pouvait enregistrer sur plusieurs jours, donc la formatage ne fonctionnerait pas pour moi. Maintenant, est-il possible de montrer le premier enregistrement à 0.0hrs parce qu'en ce moment, le graphique du bas me montrera -0.5, 0.5, 1.5, 2.5 etc. Je préférerais qu'il montre 0hrs, 1 hrs, 2 hrs etc. En gros, est-il possible de dire à la carte quel enregistrement je devrais utiliser pour marquer les axes inférieurs. En ce moment, il le fait automatiquement. – Carl