Marco Cantù 1998, Mastering Delphi 4

Project: GRAPH.DPR


Project Structure


GRAPH.DPR

program Graph;

uses
  Forms,
  GraphF in 'GraphF.pas' {Form1};

{$R *.RES}

begin
  Application.CreateForm(TForm1, Form1);
  Application.Run;
end.

GRAPHF.PAS

unit GraphF;

interface

uses
  SysUtils, Windows, Messages, Classes, Graphics, Controls,
  Forms, Dialogs, Grids, StdCtrls, TeEngine,
  Series, ExtCtrls, TeeProcs, Chart;

type
  TForm1 = class(TForm)
    Chart1: TChart;
    Series1: TBarSeries;
    Series2: TBarSeries;
    Series3: TBarSeries;
    Series4: TBarSeries;
    Panel1: TPanel;
    ChBoxMarks: TCheckBox;
    UpdateButton: TButton;
    StringGrid1: TStringGrid;
    ComboBox1: TComboBox;
    ComboBox2: TComboBox;
    ComboBox3: TComboBox;
    ComboBox4: TComboBox;
    procedure FormCreate(Sender: TObject);
    procedure UpdateButtonClick(Sender: TObject);
    procedure StringGrid1GetEditMask(Sender: TObject; ACol, ARow: Longint;
      var Value: string);
    procedure ChBoxMarksClick(Sender: TObject);
    procedure ComboChange(Sender: TObject);
  private
    Combos: array [0..3] of TComboBox;
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.DFM}

procedure TForm1.FormCreate(Sender: TObject);
var
  I, J: Integer;
begin
  with StringGrid1 do
  begin
    {fills the fixed column and row,
    and the chart series names}
    for I := 1 to 5 do
      Cells [I, 0] := Format ('Group %d', [I]);
    for J := 1 to 4 do
    begin
      Cells [0, J] := Format ('Series %d', [J]);
      Chart1.Series [J-1].Title := Format ('Series %d', [J]);
    end;

    {fills the grid with random values}
    Randomize;
    for I := 1 to 5 do
      for J := 1 to 4 do
        Cells [I, J] := IntToStr (Random (100));
  end; // with

  // fill the Combos array
  Combos [0] := ComboBox1;
  Combos [1] := ComboBox2;
  Combos [2] := ComboBox3;
  Combos [3] := ComboBox4;

  // show the initial chart type
  for I := 0 to 3 do
    Combos [I].ItemIndex := 1;

  // update the chart
  UpdateButtonClick (self);
end;

procedure TForm1.UpdateButtonClick(Sender: TObject);
var
  I, J: Integer;
begin
  for I := 1 to 4 do
  begin
    Chart1.Series [I-1].Clear;
    for J := 1 to 5 do
      Chart1.Series [I-1].Add (
        StrToInt (StringGrid1.Cells [J, I]),
        '', Chart1.Series [I-1].SeriesColor);
  end;
end;

procedure TForm1.StringGrid1GetEditMask(Sender: TObject; ACol,
  ARow: Longint; var Value: string);
begin
  // edit mask for the grid cells
  Value := '09;0';
end;

procedure TForm1.ChBoxMarksClick(Sender: TObject);
var
  I: Integer;
begin
  for I := 1 to 4 do
    Chart1.Series [I-1].Marks.Visible :=
      ChBoxMarks.Checked;
end;

procedure TForm1.ComboChange(Sender: TObject);
var
  I: Integer;
  SeriesClass: TChartSeriesClass;
  NewSeries: TChartSeries;
begin
  // destroy the existing series (in reverse order)
  for I := 3 downto 0 do
    Chart1.Series [I].Free;
  // create the new series
  for I := 0 to 3 do
  begin
    case Combos [I].ItemIndex of
      0: SeriesClass := TLineSeries;
      1: SeriesClass := TBarSeries;
      2: SeriesClass := TAreaSeries;
    else // 3: and default
      SeriesClass := TPointSeries;
    end;
    NewSeries := SeriesClass.Create (self);
    NewSeries.ParentChart := Chart1;
    NewSeries.Title :=
      Format ('Series %d', [I + 1]);
  end;
  // update the marks and update the data
  ChBoxMarksClick (self);
  UpdateButtonClick (self);
end;

end.

GRAPHF.DFM

object Form1: TForm1
  Left = 172
  Top = 86
  Width = 500
  Height = 462
  Caption = 'Graph'
  Font.Charset = DEFAULT_CHARSET
  Font.Color = clBlack
  Font.Height = -11
  Font.Name = 'MS Sans Serif'
  Font.Style = []
  OnCreate = FormCreate
  PixelsPerInch = 96
  TextHeight = 13
  object Chart1: TChart
    Left = 0
    Top = 0
    Width = 492
    Height = 291
    BackColor = clBtnFace
    AnimatedZoom = True
    BottomWall.Color = clWhite
    Foot.Font.Charset = DEFAULT_CHARSET
    Foot.Font.Color = clRed
    Foot.Font.Height = -11
    Foot.Font.Name = 'Arial'
    Foot.Font.Style = [fsItalic]
    LeftWall.Color = 8454143
    Title.Text.Strings = (
      'Simple TeeChart Demo for Mastering Delphi')
    Align = alClient
    BevelOuter = bvLowered
    TabOrder = 0
    object Series1: TBarSeries
      Marks.ArrowLength = 20
      Marks.Visible = False
      SeriesColor = clRed
      XValues.DateTime = False
      XValues.Name = 'X'
      XValues.Multiplier = 1
      XValues.Order = loAscending
      YValues.DateTime = False
      YValues.Name = 'Bar'
      YValues.Multiplier = 1
      YValues.Order = loNone
    end
    object Series2: TBarSeries
      Marks.ArrowLength = 20
      Marks.Visible = False
      SeriesColor = clGreen
      XValues.DateTime = False
      XValues.Name = 'X'
      XValues.Multiplier = 1
      XValues.Order = loAscending
      YValues.DateTime = False
      YValues.Name = 'Bar'
      YValues.Multiplier = 1
      YValues.Order = loNone
    end
    object Series3: TBarSeries
      Marks.ArrowLength = 20
      Marks.Visible = False
      SeriesColor = clYellow
      XValues.DateTime = False
      XValues.Name = 'X'
      XValues.Multiplier = 1
      XValues.Order = loAscending
      YValues.DateTime = False
      YValues.Name = 'Bar'
      YValues.Multiplier = 1
      YValues.Order = loNone
    end
    object Series4: TBarSeries
      Marks.ArrowLength = 20
      Marks.Visible = False
      SeriesColor = clBlue
      XValues.DateTime = False
      XValues.Name = 'X'
      XValues.Multiplier = 1
      XValues.Order = loAscending
      YValues.DateTime = False
      YValues.Name = 'Bar'
      YValues.Multiplier = 1
      YValues.Order = loNone
    end
  end
  object Panel1: TPanel
    Left = 0
    Top = 291
    Width = 492
    Height = 144
    Align = alBottom
    BevelOuter = bvLowered
    TabOrder = 1
    object ChBoxMarks: TCheckBox
      Left = 429
      Top = 12
      Width = 57
      Height = 17
      Caption = 'Marks'
      TabOrder = 0
      OnClick = ChBoxMarksClick
    end
    object UpdateButton: TButton
      Left = 326
      Top = 8
      Width = 89
      Height = 26
      Caption = '&Update'
      TabOrder = 1
      OnClick = UpdateButtonClick
    end
    object StringGrid1: TStringGrid
      Left = 8
      Top = 8
      Width = 309
      Height = 128
      ColCount = 6
      DefaultColWidth = 50
      Options = [goFixedVertLine, goFixedHorzLine, goVertLine, goHorzLine, goEditing]
      ScrollBars = ssNone
      TabOrder = 2
      OnGetEditMask = StringGrid1GetEditMask
    end
    object ComboBox1: TComboBox
      Left = 328
      Top = 38
      Width = 145
      Height = 21
      Style = csDropDownList
      ItemHeight = 13
      Items.Strings = (
        'Line'
        'Bar'
        'Area'
        'Point')
      TabOrder = 3
      OnChange = ComboChange
    end
    object ComboBox2: TComboBox
      Tag = 1
      Left = 328
      Top = 62
      Width = 145
      Height = 21
      Style = csDropDownList
      ItemHeight = 13
      Items.Strings = (
        'Line'
        'Bar'
        'Area'
        'Point')
      TabOrder = 4
      OnChange = ComboChange
    end
    object ComboBox3: TComboBox
      Tag = 2
      Left = 328
      Top = 86
      Width = 145
      Height = 21
      Style = csDropDownList
      ItemHeight = 13
      Items.Strings = (
        'Line'
        'Bar'
        'Area'
        'Point')
      TabOrder = 5
      OnChange = ComboChange
    end
    object ComboBox4: TComboBox
      Tag = 3
      Left = 328
      Top = 110
      Width = 145
      Height = 21
      Style = csDropDownList
      ItemHeight = 13
      Items.Strings = (
        'Line'
        'Bar'
        'Area'
        'Point')
      TabOrder = 6
      OnChange = ComboChange
    end
  end
end


Copyright Marco Cantù 1998