Шаг 177.
Автоматизация Microsoft Excel. Диаграммы в рабочей книге Excel.
Легенда

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

    Доступ к свойствам легенды диаграммы осуществляется посредством объекта Legend, являющегося свойством диаграммы Chart. Для открытия доступа к объекту Legend необходимо присвоить свойству HasLegend объекта Chart значение True, после чего легенда диаграммы отобразится в области диаграммы и будет доступна для изменений.

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

    Legend:=Chart.Legend;

возвращает в переменную Legend:variant ссылку на объект "легенда". После этого можно непосредственно обращаться к этой легенде. Доступ к линии границы легенды обеспечивает свойство Border, к заливке - свойство Interior или Fill. Используя эти свойства, изменим внешний вид легенды.

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;

    Результат использования представленных процедур показан на рисунке 1.


Рис.1. Изменены заливка и линия границы легенды

    Приведем полный текст приложения.

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;
    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);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation
var
  E:variant;
  Chart:Variant;
  Legend: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;  // Перечеркнутый
  //Подчеркивание
  if fsUnderline in font.Style then c.Font.Underline:=2 //xlUnderlineStyleSingle
  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 5 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;

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

    На следующем шаге мы закончим изучение этого вопроса.




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