Заливка. Градиентная заливка

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

   
При градиентной заливке получается плавный переход между двумя и более тонами одного цвета или разными цветами.
При этом дополнительно задаются тип штриховки градиента и варианты ее исполнения из числа возможных.

   
Для градиентной заливки с одним цветом используем метод OneColorGradient, первый аргумент которого
задает тип, а второй - вариант штриховки. Последний аргумент имеет тип Extended и определяет яркость фона
заливки. Двухцветная градиентная заливка области выполняется методом TwoColorGradient, первый аргумент
которого определяет тип, а второй - вариант штриховки.

   
Использование методов OneColorGradient и TwoColorGradient представлено на следующем примере.

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;

   
На рисунке 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;
    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);
  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;

end.

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

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

Таблица 1. Стили градиента

Мнемоническое обозначениеКонстанта
msoGradientHorizontal1
msoGradientVertical2
msoGradientDiagonalUp3
msoGradientDiagonalDown4
msoGradientFromCorner5
msoGradientFromTitle6
msoGradientFromCenter7

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



Вы можете оставить комментарий, или Трекбэк с вашего сайта.

Оставить комментарий