Шаг 159.
Автоматизация Microsoft Excel. Работа с объектами в книге Excel.
Заливка. Выбор градиента

    На этом шаге мы рассмотрим выбор градиента для надписи.

    Выбор градиента из списка заготовок осуществляется с помощью метода PresetGradient, первый и второй аргументы которого также определяют тип и вариант штриховки. Вариант штриховки определяется числом в диапазоне от 1 до 4. Последний аргумент определяет заготовку из списка MS Office.

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

procedure TForm1.ComboBox4Change(Sender: TObject);
//Выбор заготовки градиентной заливки из списка
begin
  Fill.PresetGradient(ComboBox2.ItemIndex+1,
     ComboBox3.ItemIndex+1, ComboBox4.ItemIndex+1);
end;

    Результат выбора варианта заготовки показан на рисунке 1.


Рис.1. Выбран вариант заготовки градиентной заливки для надписи

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

unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    Button3: TButton;
    Memo1: TMemo;
    Label1: TLabel;
    Label2: TLabel;
    ComboBox1: TComboBox;
    ListBox1: TListBox;
    Label3: TLabel;
    Button4: TButton;
    Button5: TButton;
    ColorDialog1: TColorDialog;
    Label4: TLabel;
    SpinEdit1: TSpinEdit;
    ScrollBar1: TScrollBar;
    Label5: TLabel;
    Label6: TLabel;
    ComboBox2: TComboBox;
    Label7: TLabel;
    Button6: TButton;
    Button7: TButton;
    Label8: TLabel;
    ComboBox3: TComboBox;
    Label9: TLabel;
    ComboBox4: TComboBox;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
    procedure Button4Click(Sender: TObject);
    procedure ListBox1Click(Sender: TObject);
    procedure Memo1Change(Sender: TObject);
    procedure ComboBox1Change(Sender: TObject);
    procedure Button5Click(Sender: TObject);
    procedure SpinEdit1Change(Sender: TObject);
    procedure Button6Click(Sender: TObject);
    procedure Button7Click(Sender: TObject);
    procedure ComboBox4Change(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation
var
  E:variant;
  TextBox:variant;
  Fill:Variant;
{$R *.dfm}


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);
//Создание надписи
const msoTextOrientationHorizontal=1;
var
  left,top:Extended;
begin
  left:=10;
  top:=11;
  if E.ActiveWorkBook.ActiveSheet.Shapes.Count>0 then
  begin
   left:=E.ActiveWorkBook.ActiveSheet.Shapes.
      item(E.ActiveWorkBook.ActiveSheet.Shapes.count).Left+20;
   top:=E.ActiveWorkBook.ActiveSheet.Shapes.
      item(E.ActiveWorkBook.ActiveSheet.Shapes.count).Top+20;
  end;
  E.ActiveWorkBook.ActiveSheet.Shapes.AddTextbox(msoTextOrientationHorizontal,
     left, top, 200, 100);
end;

procedure TForm1.Button4Click(Sender: TObject);
//Заполнить список надписей
var
  a: Integer;
begin
  ListBox1.Items.Clear;
  for a:=1 to E.ActiveWorkBook.ActiveSheet.Shapes.Count do
    ListBox1.Items.Add(E.ActiveWorkBook.ActiveSheet.Shapes.Item(a).Name);
end;

procedure TForm1.ListBox1Click(Sender: TObject);
// При активизации строки объекта ListBoxl, используя имя объекта,
// выделяем его из коллекции Shapes и записываем ссылку на этот объект
//в переменную TextBox.
begin
  TextBox:=E.ActiveWorkBook.ActiveSheet.Shapes.Item(
    ListBox1.Items.Strings[ListBox1.ItemIndex]);
  Fill:=TextBox.Fill; //Ссылка на объект Fill
end;

procedure TForm1.Memo1Change(Sender: TObject);
//Помещение текста в надпись
begin
  TextBox.TextFrame.Characters.Text:=Memo1.Text;
end;

procedure TForm1.ComboBox1Change(Sender: TObject);
//Направление (ориентация) текста
begin
 case ComboBox1.ItemIndex of
  0: TextBox.TextFrame.Orientation:=3; //msoTextOrientationDownward
  1: TextBox.TextFrame.Orientation:=1; //msoTextOrientationHorizontal
  2: TextBox.TextFrame.Orientation:=6; //msoTextOrientationHorizontalRotatedFarEast
  3: TextBox.TextFrame.Orientation:=-2;//msoTextOrientationMixed
  4: TextBox.TextFrame.Orientation:=2; //msoTextOrientationUpward
  5: TextBox.TextFrame.Orientation:=5; //msoTextOrientationVertical
  6: TextBox.TextFrame.Orientation:=4; //msoTextOrientationVerticalFarEast
 end;
end;

procedure TForm1.Button5Click(Sender: TObject);
//Задание цвета заливки
begin
  if ColorDialog1.Execute then
     Fill.ForeColor.RGB:=ColorDialog1.Color;
end;

procedure TForm1.SpinEdit1Change(Sender: TObject);
//Задание прозрачности заливки
begin
  Fill.Transparency:=SpinEdit1.Value*0.01;
end;

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

procedure TForm1.Button7Click(Sender: TObject);
//Двухцветная градиентная заливка
begin
 Fill.TwoColorGradient(ComboBox2.ItemIndex+1,
     ComboBox3.ItemIndex+1);
end;

procedure TForm1.ComboBox4Change(Sender: TObject);
//Выбор заготовки градиентной заливки из списка
begin
  Fill.PresetGradient(ComboBox2.ItemIndex+1,
     ComboBox3.ItemIndex+1, ComboBox4.ItemIndex+1);
end;

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

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

Таблица 1. Заготовки
Мнемоническое обозначение Константа
msoGradientEarlySunset 1
msoGradientLateSunset 2
msoGradientNightfall 3
msoGradientDaybreak 4
msoGradientHorizon 5
msoGradientDesert 6
msoGradientOcean 7
msoGradientCalmWater 8
msoGradientFire 9
msoGradientFog 10
msoGradientMoss 11
msoGradientPeacock 12
msoGradientWheat 13
msoGradientParchment 14
msoGradientMahogany 15
msoGradientRainbow 16
msoGradientRainbowII 17
msoGradientGold 18
msoGradientGoldII 19
msoGradientBrass 20
msoGradientChrome 21
msoGradientChromeII 22
msoGradientSilver 23
msoGradientSapphire 24

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




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