unit graf;

{$mode objfpc}{$H+}

interface

uses
  Classes, SysUtils, DB, dbf, Forms, Controls, Graphics, Dialogs, DBGrids,
  StdCtrls, DBCtrls, TAGraph, TASeries, TASources, TAIntervalSources,
  TATransformations, DateUtils, TAChartUtils ;

type

  { TF_Daten }

  TF_Daten = class(TForm)
    Btn_Ende : TButton;
    CAT_LinksAutoScaleAxisTransform1 : TAutoScaleAxisTransform;
    CAT_Rechts : TChartAxisTransformations;
    CAT_RechtsAutoScaleAxisTransform1 : TAutoScaleAxisTransform;
    CAT_Links : TChartAxisTransformations;
    Cha_Grafik : TChart;
    Cha_GrafikTaeglkWh : TLineSeries;
    Cha_GrafikSummekWh : TLineSeries;
    DTC_Daten2 : TDateTimeIntervalChartSource;
    DBGrid_Daten2 : TDBGrid;
    GrB_Daten2 : TGroupBox;
    LCS_Taegl : TListChartSource;
    LCS_Summe : TListChartSource;
    LCS_Datum : TListChartSource;
    Dsc_Daten : TDataSource;
    Daten : TDbf;
    procedure Btn_EndeClick(Sender : TObject);
    procedure DBN_Daten2Click(Sender : TObject; Button : TDBNavButtonType);
    procedure FormCreate(Sender : TObject);
    procedure FormResize(Sender : TObject);
    procedure GrafCreate(Sender : TObject);

  end;

var
  F_Daten : TF_Daten;

implementation

{$R *.lfm}

{ TF_Daten }

{*************************************
* ProgEnde
*
**************************************}

procedure TF_Daten.Btn_EndeClick(Sender : TObject);


begin
  Daten.Close;
  close;
end;                         // procedure TF_Daten.Btn_EndeClick


{*****************************************
* Grafen erstellen
*
******************************************}

procedure TF_Daten.GrafCreate(Sender : TObject);

var
  N    : integer = 1;         // Zahl der Datenpunkte
  I    : integer = 1;         // Zähler

begin
  LCS_Datum.Clear;
  LCS_Taegl.Clear;
  LCS_Summe.Clear;

  N := Daten.recordcount;
  Daten.first;

  DTC_Daten2.DateTimeFormat:='dd.mm.yy';
  with Cha_Grafik.BottomAxis do     //BottomAxis und AxisList[1] ist das Gleiche
  begin
    Marks.Source := DTC_Daten2;
    Marks.Style := smsLabel;
    Range.Min := Daten.FieldByName('DATUM').value;
    Range.UseMin := false;
    Range.UseMax := false;
    Marks.LabelFont.Orientation:=900; // In 1/10 Grad
  end;

  for I := 1 to N do         // TListChartSource füllen
  begin
    LCS_Datum.Add(I,Daten.FieldByName('DATUM').value);
    LCS_Taegl.Add(I,Daten.FieldByName('Daten2').value);
    LCS_Summe.Add(I,Daten.FieldByName('Daten3').value);
    Daten.next;
  end;                       // for I := 1 to N do

end;                         // procedure TF_Daten.GrafCreate

{*****************************************
* Form herstellen
*
******************************************}

procedure TF_Daten.FormCreate(Sender : TObject);

var
  Summe : real = 0.0;
  Datum : TDateTime;
  MJahr : integer = 2022;

begin
  Daten.ReadOnly := false;
  Daten.Active := true;
  Daten.Open;
  Daten.First;

  DBGrid_Daten2.Columns[0].Title.Caption := 'Datum';
  DBGrid_Daten2.Columns[0].Width := 65;
  DBGrid_Daten2.Columns[1].Title.Caption := 'Daten 2';
  DBGrid_Daten2.Columns[1].Width := 60;
  DBGrid_Daten2.Columns[1].Displayformat := '0.00';
  DBGrid_Daten2.Columns[2].Title.Caption := 'Daten3';
  DBGrid_Daten2.Columns[2].Width := 75;
  DBGrid_Daten2.Columns[2].Displayformat := '####0.00';
  DBGrid_Daten2.Columns[2].ReadOnly := true;

  GrafCreate(Sender);

  Daten.last;
end;                         // procedure TF_Daten.FormCreate

{***************************************
* Größen und Positionen definieren
*
****************************************}

procedure TF_Daten.FormResize(Sender : TObject);

begin
  F_Daten2.Width  := 1600;
  F_Daten2.Height := 800;
  F_Daten2.Top    := 150;
  F_Daten2.Left   := 150;

end;                         // procedure TF_Daten.FormResize

end.

