Шаг 191.
Автоматизация Microsoft Excel. Диаграммы в рабочей книге Excel.
Полоса погрешностей

    На этом шаге мы рассмотрим создание полосы погрешностей.

    Полоса погрешностей (планки погрешностей) представляет собой линии в точках построения, отображающие потенциальную ошибку (или степень недостоверности) каждой точки данных ряда данных. Полосы погрешностей строятся в точках ряда, могут иметь различные тип, толщину и цвет линий, а также величину отклонения, которая выражается как расстояние между точкой данных и конечными точками линии полосы погрешностей. Доступ к полосе погрешностей обеспечивает объект ErrorBars, принадлежащий элементу коллекции Series. Отображение полос погрешностей обеспечивается путем записи значения True в свойство HasErrorBars и последующей настройкой свойств объекта ErrorBars или использованием метода ErrorBar, принадлежащего элементу коллекции Series. Синтаксис вызова метода ErrorBar:

    Series.ErrorBar(Direction,   Include,   Type,   Amount,   MinusValues);
где

    В таблице 1 приведены возможные значения параметра Type.

Таблица . 1Константы, используемые при задании параметра Type
Константа Значение
xlErrorBarTypeCustom -4114
xlErrorBarTypeFixedValue 1
xlErrorBarTypePercent 2
xlErrorBarTypeStDev -4155
xlErrorBarTypeStError 4

    Рассмотрим следующие процедуры.

procedure TForm1.Button21Click(Sender: TObject);
//Построение полосы погрешностей
const xlLine=4;
begin
  Chart.ChartType:=xlLine;
  Chart.SeriesCollection(1).ErrorBar(
    Direction:=1 {xlY},
    Include:=1 {xlErrorBarIncludeBoth},
    Type:=1 {xlErrorBarTypeFixedValue},
    Amount:=200);
end;

procedure TForm1.CheckBox10Click(Sender: TObject);
//Построение полосы погрешностей
const xlLine=4;
begin
  Chart.ChartType:=xlLine;
  Chart.SeriesCollection(1).HasErrorBars:=CheckBox10.Checked;
  if CheckBox10.Checked then
  begin
   Chart.SeriesCollection(1).ErrorBars.EndStyle:=2{xlNoCap};
   Chart.SeriesCollection(1).ErrorBars.Border.ColorIndex:=13;
   Chart.SeriesCollection(1).ErrorBars.Border.Weight:=3;
  end;
end;

    Обе процедуры обеспечивают построение полос погрешностей, которые могут выглядеть так, как показано на рисунке 1.


Рис.1. Построение полосы погрешностей для графика

    Обратите внимание на свойство EndStyle объекта ErrorBars. Оно определяет, будут ли отмечены концы отрезков (xlCap=1) или нет (xlNoCap=2).

    В заключение приведем полный текст приложения.

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ComObj, Spin, ExtDlgs, ExtCtrls, ComCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    Button3: TButton;
    Button4: TButton;
    Button5: TButton;
    ComboBox1: TComboBox;
    Label1: TLabel;
    PageControl1: TPageControl;
    TabSheet1: TTabSheet;
    Label4: TLabel;
    Label5: TLabel;
    Label6: TLabel;
    Label7: TLabel;
    Label8: TLabel;
    Button6: TButton;
    SpinEdit1: TSpinEdit;
    ScrollBar1: TScrollBar;
    ComboBox2: TComboBox;
    Button7: TButton;
    ComboBox3: TComboBox;
    Label2: TLabel;
    TabSheet2: TTabSheet;
    CheckBox1: TCheckBox;
    Label3: TLabel;
    Edit1: TEdit;
    CheckBox2: TCheckBox;
    Button8: TButton;
    Button9: TButton;
    FontDialog1: TFontDialog;
    ColorDialog1: TColorDialog;
    TabSheet3: TTabSheet;
    Label9: TLabel;
    SpinEdit2: TSpinEdit;
    Label10: TLabel;
    ComboBox4: TComboBox;
    Panel1: TPanel;
    Label11: TLabel;
    Label12: TLabel;
    SpinEdit3: TSpinEdit;
    Label13: TLabel;
    Label14: TLabel;
    SpinEdit4: TSpinEdit;
    SpinEdit5: TSpinEdit;
    SpinEdit6: TSpinEdit;
    Label15: TLabel;
    Label16: TLabel;
    Panel2: TPanel;
    Label17: TLabel;
    Label18: TLabel;
    Label19: TLabel;
    Label20: TLabel;
    Label21: TLabel;
    Label22: TLabel;
    SpinEdit7: TSpinEdit;
    SpinEdit8: TSpinEdit;
    SpinEdit9: TSpinEdit;
    SpinEdit10: TSpinEdit;
    TabSheet4: TTabSheet;
    Label23: TLabel;
    Label24: TLabel;
    ComboBox5: TComboBox;
    Label25: TLabel;
    Label26: TLabel;
    SpinEdit11: TSpinEdit;
    SpinEdit12: TSpinEdit;
    SpinEdit13: TSpinEdit;
    ListBox1: TListBox;
    Label27: TLabel;
    Button10: TButton;
    Button11: TButton;
    TabSheet5: TTabSheet;
    Button12: TButton;
    Button13: TButton;
    Label28: TLabel;
    Button14: TButton;
    Button15: TButton;
    Button16: TButton;
    TabSheet6: TTabSheet;
    ListBox2: TListBox;
    Label29: TLabel;
    Button17: TButton;
    Label30: TLabel;
    ComboBox6: TComboBox;
    Label31: TLabel;
    ComboBox7: TComboBox;
    Edit2: TEdit;
    Label32: TLabel;
    Label33: TLabel;
    ComboBox8: TComboBox;
    Label34: TLabel;
    SpinEdit14: TSpinEdit;
    TabSheet7: TTabSheet;
    Label35: TLabel;
    Button18: TButton;
    ListBox3: TListBox;
    ListBox4: TListBox;
    Label36: TLabel;
    Label37: TLabel;
    ComboBox9: TComboBox;
    SpinEdit15: TSpinEdit;
    Label38: TLabel;
    Label39: TLabel;
    ComboBox10: TComboBox;
    Label40: TLabel;
    ComboBox11: TComboBox;
    TabSheet8: TTabSheet;
    Button19: TButton;
    Button20: TButton;
    TabSheet9: TTabSheet;
    Label41: TLabel;
    Label42: TLabel;
    Label43: TLabel;
    CheckBox3: TCheckBox;
    CheckBox4: TCheckBox;
    Label44: TLabel;
    SpinEdit16: TSpinEdit;
    SpinEdit17: TSpinEdit;
    SpinEdit18: TSpinEdit;
    SpinEdit19: TSpinEdit;
    TabSheet10: TTabSheet;
    Label45: TLabel;
    Label46: TLabel;
    CheckBox5: TCheckBox;
    TabSheet11: TTabSheet;
    CheckBox6: TCheckBox;
    TabSheet12: TTabSheet;
    CheckBox7: TCheckBox;
    TabSheet13: TTabSheet;
    CheckBox8: TCheckBox;
    TabSheet14: TTabSheet;
    Label47: TLabel;
    Label48: TLabel;
    CheckBox9: TCheckBox;
    TabSheet15: TTabSheet;
    Button21: TButton;
    CheckBox10: TCheckBox;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
    procedure Button4Click(Sender: TObject);
    procedure Button5Click(Sender: TObject);
    procedure ComboBox1Change(Sender: TObject);
    procedure Button6Click(Sender: TObject);
    procedure Button7Click(Sender: TObject);
    procedure CheckBox1Click(Sender: TObject);
    procedure CheckBox2Click(Sender: TObject);
    procedure Button8Click(Sender: TObject);
    procedure Button9Click(Sender: TObject);
    procedure SpinEdit2Change(Sender: TObject);
    procedure ComboBox4Change(Sender: TObject);
    procedure SpinEdit3Change(Sender: TObject);
    procedure SpinEdit4Change(Sender: TObject);
    procedure SpinEdit7Change(Sender: TObject);
    procedure SpinEdit8Change(Sender: TObject);
    procedure SpinEdit11Change(Sender: TObject);
    procedure ComboBox5Change(Sender: TObject);
    procedure SpinEdit12Change(Sender: TObject);
    procedure SpinEdit13Change(Sender: TObject);
    procedure Button10Click(Sender: TObject);
    procedure Button11Click(Sender: TObject);
    procedure Button12Click(Sender: TObject);
    procedure Button14Click(Sender: TObject);
    procedure Button13Click(Sender: TObject);
    procedure Button15Click(Sender: TObject);
    procedure Button16Click(Sender: TObject);
    procedure ComboBox7Change(Sender: TObject);
    procedure ComboBox8Change(Sender: TObject);
    procedure SpinEdit14Change(Sender: TObject);
    procedure Button17Click(Sender: TObject);
    procedure ListBox2Click(Sender: TObject);
    procedure ComboBox6Change(Sender: TObject);
    procedure Edit2Change(Sender: TObject);
    procedure PageControl1Change(Sender: TObject);
    procedure Button18Click(Sender: TObject);
    procedure ListBox3Click(Sender: TObject);
    procedure ListBox4Click(Sender: TObject);
    procedure ComboBox9Change(Sender: TObject);
    procedure SpinEdit15Change(Sender: TObject);
    procedure ComboBox10Change(Sender: TObject);
    procedure ComboBox11Change(Sender: TObject);
    procedure Button19Click(Sender: TObject);
    procedure Button20Click(Sender: TObject);
    procedure SpinEdit16Change(Sender: TObject);
    procedure SpinEdit17Change(Sender: TObject);
    procedure SpinEdit18Change(Sender: TObject);
    procedure CheckBox3Click(Sender: TObject);
    procedure CheckBox4Click(Sender: TObject);
    procedure SpinEdit19Change(Sender: TObject);
    procedure CheckBox5Click(Sender: TObject);
    procedure CheckBox6Click(Sender: TObject);
    procedure CheckBox7Click(Sender: TObject);
    procedure CheckBox8Click(Sender: TObject);
    procedure CheckBox9Click(Sender: TObject);
    procedure Button21Click(Sender: TObject);
    procedure CheckBox10Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation
var
  E:variant;
  Chart:Variant;
  Legend:Variant;
  Axis:Variant;
  Series:Variant;
  DataLabels:Variant;
  PNTS,PNT:Variant;
const
  xlLocationAsNewSheet=1; //Размещение диаграммы на новом листе
  xlLocationAsObject=2; //Размещение диаграммы на листе с данными

{$R *.dfm}
//Функция задания шрифта заголовка диаграммы
Function  SetFontRange(c:variant;font:Tfont):boolean;
begin
  SetFontRange:=true;
  try
  c.Font.Name:=font.Name;
  if fsBold in font.Style  then c.Font.Bold:=True // Жирный
  else c.Font.Bold:=False; // Тонкий
  if fsItalic in font.Style then c.Font.Italic:=True // Наклонный
  else c.Font.Italic:=False;  // Наклонный
  c.Font.Size:=font.Size;  // Размер
  if fsStrikeOut in font.Style then c.Font.Strikethrough:=True // Перечеркнутый
  else c.Font.Strikethrough:=False;  // Перечеркнутый
  //xlUnderlineStyleSingle - Подчеркивание
  if fsUnderline in font.Style then c.Font.Underline:=2
  else c.Font.Underline:=-4142; //xlUnderlineStyleNone - Подчеркивание
  c.Font.Color:=font.Color; // Цвет
  except
  SetFontRange:=false;
  end;
end;

procedure TForm1.Button1Click(Sender: TObject);
//Создание объекта Excel и отображение окна
begin
  E:=CreateOleObject('Excel.Application');
  E.Visible:=True;
end;

procedure TForm1.Button2Click(Sender: TObject);
//Создание рабочей книги
begin
  E.WorkBooks.Add;
end;

procedure TForm1.Button3Click(Sender: TObject);
//Добавление диаграммы и получение ссылки на нее
var
  i:Integer;
const xl3DColumn=-4100;
      xlColumns=2;
begin
  Randomize;
  for i:=1 to 6 do
  begin
    E.ActiveSheet.Cells(1,i):=i*(1+Random(50));
    E.ActiveSheet.Cells(2,i):=i*(1+Random(50));
    E.ActiveSheet.Cells(3,i):=i*(1+Random(50));
    E.ActiveSheet.Cells(4,i):=i*(1+Random(50));
    E.ActiveSheet.Cells(5,i):=i*(1+Random(50));
  end;
  Chart:=E.Charts.Add;
  Legend:=Chart.Legend; //Ссылка на легенду
  Chart.ChartType:=xl3DColumn;
  Chart.SetSourceData(Source:=E.ActiveWorkbook.Sheets.Item['Лист1'].Range['A1:F5'],
     PlotBy:=xlColumns);
end;

procedure TForm1.Button4Click(Sender: TObject);
//Перемещение диаграммы на лист с данными
begin
  Chart.Location(Where:=xlLocationAsObject, Name:='Лист1');
  Chart:=E.ActiveChart;
  Legend:=Chart.Legend; //Ссылка на легенду
end;

procedure TForm1.Button5Click(Sender: TObject);
//Перемещение диаграммы на новый лист
begin
  Chart.Location(Where:=xlLocationAsNewSheet);
  Chart:=E.ActiveChart;
  Legend:=Chart.Legend; //Ссылка на легенду
end;

procedure TForm1.ComboBox1Change(Sender: TObject);
//Изменение типа диаграммы
begin
  Chart.ChartType:=ComboBox1.ItemIndex+51;
end;

procedure TForm1.Button6Click(Sender: TObject);
//Задание цвета заливки
begin
   Chart.ChartArea.Fill.ForeColor.SchemeColor:=
      SpinEdit1.Value;
end;

procedure TForm1.Button7Click(Sender: TObject);
//Одноцветная градиентная заливка
begin
 Chart.ChartArea.Fill.OneColorGradient(ComboBox2.ItemIndex+1,
     ComboBox3.ItemIndex+1, ScrollBar1.Position*0.01);
end;

procedure TForm1.CheckBox1Click(Sender: TObject);
//Показ/скрытие заголовка
begin
  if CheckBox1.State=cbUnChecked then
       Chart.HasTitle:=False
  else
    begin
       Chart.HasTitle:=True;
       Chart.ChartTitle.Text:=Edit1.Text;
    end;
end;

procedure TForm1.CheckBox2Click(Sender: TObject);
//Включение выключение тени
begin
  Chart.ChartTitle.Shadow:=CheckBox2.Checked;
end;

procedure TForm1.Button8Click(Sender: TObject);
//Задание шрифта
begin
   if FontDialog1.Execute then
     SetFontRange(Chart.ChartTitle,FontDialog1.Font);
end;

procedure TForm1.Button9Click(Sender: TObject);
//Задание цвета области Interior
begin
  if ColorDialog1.Execute then
     Chart.ChartTitle.Interior.Color:=ColorDialog1.Color
end;

procedure TForm1.SpinEdit2Change(Sender: TObject);
//Толщина линии области построения диаграммы
begin
  Chart.PlotArea.Border.Weight:=SpinEdit2.Value;
end;

procedure TForm1.ComboBox4Change(Sender: TObject);
//Устанавливаем тип линии границы ячейки
begin
 Case ComboBox4.ItemIndex Of
  0:Chart.PlotArea.Border.LineStyle:=1;    //xlContinuous
  1:Chart.PlotArea.Border.LineStyle:=-4115;//xlDash
  2:Chart.PlotArea.Border.LineStyle:=4;    //xlDashDot
  3:Chart.PlotArea.Border.LineStyle:=5;    //xlDashDotDot
  4:Chart.PlotArea.Border.LineStyle:=-4118;//xlDot
  5:Chart.PlotArea.Border.LineStyle:=-4119;//xlDouble
  6:Chart.PlotArea.Border.LineStyle:=-4142;//xlLineStyleNone
  7:Chart.PlotArea.Border.LineStyle:=13;   //xlSlantDashDot
 End;
end;

procedure TForm1.SpinEdit3Change(Sender: TObject);
//Толщина линии основания
begin
  Chart.Floor.Border.Weight:=SpinEdit3.Value;
end;

procedure TForm1.SpinEdit4Change(Sender: TObject);
//Задание цвета основания
begin
  Chart.Floor.Border.Color:=RGB(SpinEdit4.Value,
           SpinEdit5.Value,SpinEdit6.Value);
end;

procedure TForm1.SpinEdit7Change(Sender: TObject);
//Толщина линии стен
begin
  Chart.Walls.Border.Weight:=SpinEdit7.Value;
end;

procedure TForm1.SpinEdit8Change(Sender: TObject);
//Задание цвета стен
begin
  Chart.Walls.Interior.Color:=RGB(SpinEdit8.Value,
           SpinEdit9.Value,SpinEdit10.Value);
end;

procedure TForm1.SpinEdit11Change(Sender: TObject);
//Толщина линии легенды
begin
  Legend.Border.Weight:=SpinEdit11.Value;
end;

procedure TForm1.ComboBox5Change(Sender: TObject);
//Выбор вида штриховки
begin
  Legend.Fill.Patterned(ComboBox5.ItemIndex+1);
end;

procedure TForm1.SpinEdit12Change(Sender: TObject);
//Выбор цвета изображения
begin
  Legend.Fill.ForeColor.SchemeColor:=SpinEdit12.Value;
end;

procedure TForm1.SpinEdit13Change(Sender: TObject);
//Выбор цвета фона
begin
  Legend.Fill.BackColor.SchemeColor:=SpinEdit13.Value;
end;

procedure TForm1.Button10Click(Sender: TObject);
//Заполнение списка элементов легенды
var
  i: Integer;
begin
  ListBox1.Items.Clear;
  for i:=1 to Legend.LegendEntries.Count do
    ListBox1.Items.Add(IntToStr(i));
end;

procedure TForm1.Button11Click(Sender: TObject);
//Изменяем выбранный элемент
Var
  LegendEntry,LegendKey: Variant;
begin
  // Получаем ссылку на элемент легенды
  LegendEntry:=Legend.LegendEntries.item[ListBox1.ItemIndex+1];
  // Получаем ссьшку на ключ легенды
  LegendKey:= LegendEntry.LegendKey;
  // Изменяем толщину пинии.
  LegendKey.Border.Weight:=4;
  // Изменяем цвет заливки
  LegendKey.Interior.Color:=RGB(200,50,0);
  // Получаем доступ к шрифту надписи и изменяем его.
  LegendEntry.Font.Size:=16;
end;

procedure TForm1.Button12Click(Sender: TObject);
//Настройка оси значений
const
  xlValue=2;
var
  Border:variant;
begin
  Axis:=Chart.Axes.Item(xlValue); // Получаем доступ к оси значений
  Border:=Axis.Border;       // Получаем доступ к линии оси значений
  Border.Color:=RGB(200,0,0); // и настраиваем ее свойства
  Border.Weight:=4;
end;

procedure TForm1.Button13Click(Sender: TObject);
// Показываем заголовок оси значений, получаем доступ
// к нему и настраиваем его свойства
var
  AxisTitle:variant;
begin
  Axis.HasTitle:=True;
  AxisTitle:=Axis.AxisTitle;
  AxisTitle.Border.Color:=RGB(0,200,200);
  AxisTitle.Interior.Color:=RGB(200,200,0);
  AxisTitle.Caption:='Значения';
  AxisTitle.Font.Size:=24;
end;

procedure TForm1.Button14Click(Sender: TObject);
// Получаем доступ к меткам делений оси и настраиваем их свойства
// (шрифт, формат числовых меток и направление текста (угол))
var
  TickLabels:variant;
begin
  TickLabels:=Axis.TickLabels;
  TickLabels.Font.Size:=20;
  TickLabels.NumberFormat:='$0000';
  TickLabels.Orientation:=0;
end;


procedure TForm1.Button15Click(Sender: TObject);
// Получаем доступ к меткам делений оси и настраиваем их свойства
// (толщину и цвет основных линий меток)
var
  MajorGridlines:variant;
begin
  Axis.HasMajorGridlines:=True;
  Axis.HasMinorGridlines:=False;
  MajorGridlines:=Axis.MajorGridlines;
  MajorGridlines.Border.Weight:=2;
  MajorGridlines.Border.Color:=RGB(0,0,0);
end;

procedure TForm1.Button16Click(Sender: TObject);
// Показываем линии основных и промежуточных меток.
const
  xlTickMarkCross=4;
  xlTickMarkInside=2;
begin
  Axis.MajorTickMark:=xlTickMarkCross;
  Axis.MinorTickMark:=xlTickMarkInside;
end;

procedure TForm1.ComboBox7Change(Sender: TObject);
//Задание горизонтального выравнивания
begin
 case ComboBox1.ItemIndex of
  0: DataLabels.HorizontalAlignment:=-4108; //xlHAlignCenter
  1: DataLabels.HorizontalAlignment:=-4131; //xlHAlignLeft
  2: DataLabels.HorizontalAlignment:=-4152; //xlHAlignRight
 end;
end;

procedure TForm1.ComboBox8Change(Sender: TObject);
//Задание вертикального выравнивания
begin
 case ComboBox2.ItemIndex of
  0: DataLabels.VerticalAlignment:=-4107; //xlVAlignBottom
  1: DataLabels.VerticalAlignment:=-4108; //xlVAlignCenter
  2: DataLabels.VerticalAlignment:=-4160; //xlVAlignTop
 end;
end;

procedure TForm1.SpinEdit14Change(Sender: TObject);
// Угол (направление) текста
begin
  DataLabels.Orientation:=SpinEdit14.Value;
end;

procedure TForm1.Button17Click(Sender: TObject);
//Заполнение рядов диаграмм
var
  a: Integer;
begin
  ListBox2.Items.Clear;
  for a:=1 to Chart.SeriesCollection.Count do
    ListBox2.Items.Add(Chart.SeriesCollection.Item(a).Name{IntToStr(a)});
end;

procedure TForm1.ListBox2Click(Sender: TObject);
//Выбор ряда
begin
  Series:=Chart.SeriesCollection(ListBox2.ItemIndex+1);
  DataLabels:=Series.DataLabels;
end;

procedure TForm1.ComboBox6Change(Sender: TObject);
//Выбор типа подписи
var
  XlDataLabelsType: Integer;
begin
 case ComboBox6.ItemIndex of
  0: XlDataLabelsType:=6;    //xlDataLabelsShowBubbleSizes
  1: XlDataLabelsType:=4;    //xlDataLabelsShowLabel
  2: XlDataLabelsType:=5;    //xlDataLabelsShowLabelAndPercent
  3: XlDataLabelsType:=-4142;//xlDataLabelsShowNone
  4: XlDataLabelsType:=3;    //xlDataLabelsShowPercent
  5: XlDataLabelsType:=2;    //xlDataLabelsShowValue
 end;
  Series.ApplyDataLabels(Type:=XlDataLabelsType);
  //Выбор числового формата
  DataLabels.NumberFormat:=Edit2.Text;
end;

procedure TForm1.Edit2Change(Sender: TObject);
//Выбор числового формата для отображения значений
begin
  DataLabels.NumberFormat:=Edit2.Text;
end;

procedure TForm1.PageControl1Change(Sender: TObject);
begin

end;
//--------------- Работа с отдельными точками
procedure TForm1.Button18Click(Sender: TObject);
//Заполнение рядов диаграмм
var
  a: Integer;
begin
  ListBox3.Items.Clear;
  for a:=1 to Chart.SeriesCollection.Count do
    ListBox3.Items.Add(Chart.SeriesCollection.Item(a).Name);
end;

procedure TForm1.ListBox3Click(Sender: TObject);
//Выбор ряда и заполнение списка точек
var
  a: Integer;
begin
  Series:=Chart.SeriesCollection(ListBox3.ItemIndex+1);
  PNTS:=Series.Points;
  ListBox4.Items.Clear;
  for a:=1 to PNTS.Count do
    ListBox4.Items.Add(IntToStr(a){PNTS.Item(a).Name});
end;

procedure TForm1.ListBox4Click(Sender: TObject);
//Выбор точки
begin
  PNT:=PNTS.Item(ListBox4.ItemIndex+1);
end;

procedure TForm1.ComboBox9Change(Sender: TObject);
//Выбор типа подписи точки
var
  XlDataLabelsType: Integer;
begin
 case ComboBox9.ItemIndex of
  0: XlDataLabelsType:=6;    //xlDataLabelsShowBubbleSizes
  1: XlDataLabelsType:=4;    //xlDataLabelsShowLabel
  2: XlDataLabelsType:=-4142;//xlDataLabelsShowNone
  3: XlDataLabelsType:=2;    //xlDataLabelsShowValue
 end;
  PNT.ApplyDataLabels(Type:=XlDataLabelsType);
end;


procedure TForm1.SpinEdit15Change(Sender: TObject);
// Угол (направление) текста
begin
  PNT.DataLabel.Orientation:=SpinEdit15.Value;
end;

procedure TForm1.ComboBox10Change(Sender: TObject);
//Задание горизонтального выравнивания
begin
 case ComboBox10.ItemIndex of
  0: PNT.DataLabel.HorizontalAlignment:=-4108; //xlHAlignCenter
  1: PNT.DataLabel.HorizontalAlignment:=-4131; //xlHAlignLeft
  2: PNT.DataLabel.HorizontalAlignment:=-4152; //xlHAlignRight
 end;
end;

procedure TForm1.ComboBox11Change(Sender: TObject);
//Задание вертикального выравнивания
begin
 case ComboBox11.ItemIndex of
  0: PNT.DataLabel.VerticalAlignment:=-4107; //xlVAlignBottom
  1: PNT.DataLabel.VerticalAlignment:=-4108; //xlVAlignCenter
  2: PNT.DataLabel.VerticalAlignment:=-4160; //xlVAlignTop
 end;
end;
//==================== Формулы ============================
procedure TForm1.Button19Click(Sender: TObject);
//Получение формулы
var
  S: String;
begin
  Series:=Chart.SeriesCollection(1);
  S:=Series.Formula;
  MessageBox(handle,pchar(S),'',0);
end;

procedure TForm1.Button20Click(Sender: TObject);
//Изменение формулы
begin
  Series:=Chart.SeriesCollection(2);
  Series.FormulaLocal:='=РЯД(;;Лист1!A2:D2;3)';
end;

//=================Объемные диаграммы====================


procedure TForm1.SpinEdit16Change(Sender: TObject);
//Поворот в горизонтальной плоскости
begin
  Chart.Rotation:=SpinEdit16.Value;
end;

procedure TForm1.SpinEdit17Change(Sender: TObject);
//Поворот в вертикальной плоскости
begin
  Chart.Elevation:=SpinEdit17.Value;
end;

procedure TForm1.SpinEdit18Change(Sender: TObject);
//Перспектива
begin
  Chart.Perspective:=SpinEdit18.Value;
end;

procedure TForm1.CheckBox3Click(Sender: TObject);
//Изомерия
begin
  Chart.RightAngleAxes:=CheckBox3.Checked;
end;

procedure TForm1.CheckBox4Click(Sender: TObject);
//Автомасштаб
begin
  Chart.AutoScaling:=CheckBox4.Checked;
end;

procedure TForm1.SpinEdit19Change(Sender: TObject);
//Высота в процентах от нормальной высоты
begin
  Chart.HeightPercent:=SpinEdit19.Value;
end;

procedure TForm1.CheckBox5Click(Sender: TObject);
//Отображение линий серий на диаграмме.
//Прежде установите тип диаграммы в xlColumnStacked!
var
  ChartGroup:variant;
begin
  ChartGroup:=Chart.ChartGroups.Item(1);
  ChartGroup.HasSeriesLines:=CheckBox5.Checked;
  if CheckBox5.Checked then
  begin
   //Установить ноые параметры
   ChartGroup.SeriesLines.Border.ColorIndex:=32;
   ChartGroup.SeriesLines.Border.Weight:=4;
  end;
end;

procedure TForm1.CheckBox6Click(Sender: TObject);
//Отображение линий проекции
const xlLine=4;
var ChartGroup:variant;
begin
  Chart.ChartType:=xlLine;
  ChartGroup:=Chart.ChartGroups.Item(1);
  ChartGroup.HasDropLines:=CheckBox6.Checked;
  if CheckBox6.Checked then
     ChartGroup.DropLines.Border.ColorIndex:=3;
end;

procedure TForm1.CheckBox7Click(Sender: TObject);
//Отображение коридора колебания
const xlLine=4;
var ChartGroup:variant;
begin
  Chart.ChartType:=xlLine;
  ChartGroup:=Chart.ChartGroups.Item(1);
  ChartGroup.HasHiLoLines:=CheckBox7.Checked;
  if CheckBox7.Checked then
     ChartGroup.HiLoLines.Border.ColorIndex:=5;
end;

procedure TForm1.CheckBox8Click(Sender: TObject);
//Отображение полос понижения/повышения
const xlLine=4;
var ChartGroup:variant;
begin
  Chart.ChartType:=xlLine;
  ChartGroup:=Chart.ChartGroups.Item(1);
  ChartGroup.HasUpDownBars:=CheckBox8.Checked;
  if CheckBox8.Checked then
  begin
    ChartGroup.UpBars.Border.ColorIndex:=7;
    ChartGroup.DownBars.Border.ColorIndex:=12;
  end;
end;

procedure TForm1.CheckBox9Click(Sender: TObject);
//Задание линий выноски подписей данных диаграммы
var
  Series:variant;
begin
  Series:=Chart.SeriesCollection(1);
  Series.HasDataLabels:=CheckBox9.Checked;
  if CheckBox9.Checked then
  begin
   Series.Points(1).DataLabel.Left:=Series.Points(1).DataLabel.Left+20;
   Series.Points(3).DataLabel.Top:=Series.Points(3).DataLabel.Top+30;
   Series.HasLeaderLines:=CheckBox9.Checked;
   Series.LeaderLines.Border.ColorIndex:=5;
  end;
end;

procedure TForm1.Button21Click(Sender: TObject);
//Построение полосы погрешностей
const xlLine=4;
begin
  Chart.ChartType:=xlLine;
  Chart.SeriesCollection(1).ErrorBar(
    Direction:=1 {xlY},
    Include:=1 {xlErrorBarIncludeBoth},
    Type:=1 {xlErrorBarTypeFixedValue},
    Amount:=200);
end;

procedure TForm1.CheckBox10Click(Sender: TObject);
//Построение полосы погрешностей
const xlLine=4;
begin
  Chart.ChartType:=xlLine;
  Chart.SeriesCollection(1).HasErrorBars:=CheckBox10.Checked;
  if CheckBox10.Checked then
  begin
   Chart.SeriesCollection(1).ErrorBars.EndStyle:=2{xlNoCap};
   Chart.SeriesCollection(1).ErrorBars.Border.ColorIndex:=13;
   Chart.SeriesCollection(1).ErrorBars.Border.Weight:=3;
  end;
end;

end.
Текст этого приложения можно взять здесь (25,5 Кб).

    На следующем шаге мы рассмотрим линию тренда.




Предыдущий шаг Содержание Следующий шаг