Шаг 157.
Автоматизация Microsoft Excel. Работа с объектами в книге Excel.
Заливка. Прозрачность

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

    Изменим значение свойства Transparency объекта Fill. Это придаст надписи эффект прозрачности по отношению к листу рабочей книги Excel. Значение свойства Transparency должно иметь тип Extended и находиться в пределах от 0,00 до 1,00. Следующая процедура и результат ее выполнения (рисунок 1) демонстрируют этот эффект.

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


Рис.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;
    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);
  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;

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

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




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