Шаг 269.
Автоматизация Microsoft PowerPoint.
Работа с несколькими рисованными объектами

    На этом шаге мы рассмотрим пример использования объекта ShapeRange.

    Для работы с несколькими объектами одновременно можно использовать объект ShapeRange.

    С помощью его методов возможно выполнять действия через интерфейс пользователя, а также некоторые действия над несколькими рисованными объектами, которые невозможно выполнить через интерфейс пользователя. Например, с помощью интерфейса пользователя можно задать текст для нескольких рисованных объектов одновременно. Программно это можно сделать с помощью перебора нескольких рисованных объектов с помощью цикла for.

    Проиллюстрируем использование этого объекта на конкретном примере. Внешний вид приложения изображен на рисунке 1.


Рис.1. Внешний вид приложения

    На слайде имеется три фигуры. Delphi-форма содержит поле для ввода текста и две конопки, которые заменяют текст в фигурах на заданный. Одна из кнопок использует цикл по количеству фигур для доступа к конкретной фигуре, после чего у нее заменяется текущая надпись на заданную. Обработчик события нажатия на эту кнопку выглядит так:

procedure TForm1.Button5Click(Sender: TObject);
// Добавление текста с использованием цикла
// по количеству автофигур
var
 V: Variant;
 i: Byte;
begin
 V:=W.ActivePresentation.Slides.Item(1).Shapes;
 // Count - количество автофигур на слайде
 for i:=1 to V.Count do
   // У каждой автофигуры изменяем надпись
   V.Item(i).TextFrame.TextRange.Text:=Edit1.Text;
end;

    Обработчик второй кнопки для доступа к тексту использует объект ShapeRange. Сначала все фигуры выделяются, а затем, пользуясь объектом ShapeRange, осуществляется замена надписей на заданный текст, после чего выделение снимается:

procedure TForm1.Button2Click(Sender: TObject);
var
 A: Array [0..2] Of Variant;
 S:Variant;
begin
 // Заполняем массив номерами автофигур
 A[0]:=1; A[1]:=2; A[2]:=3;
 S := VarArrayCreate([0, 0], varVariant);
 S[0]:= VarArrayOf(A);
 // Выделяем все автофигуры
 W.ActivePresentation.Slides.Item(1).Shapes.Range(S[0]).Select;
 // Изменяем текст у выделенных автофигур
 W.ActiveWindow.Selection.ShapeRange.
   TextFrame.TextRange.Text:=Edit1.Text;
 // Снимаем выделение
 W.ActiveWindow.Selection.Unselect;
end;

    Полный текст приложения выглядит так:

unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    Button1: TButton;
    CheckBox1: TCheckBox;
    Button3: TButton;
    Button4: TButton;
    ColorDialog1: TColorDialog;
    Button2: TButton;
    Label1: TLabel;
    Edit1: TEdit;
    Button5: TButton;
    procedure Button1Click(Sender: TObject);
    procedure CheckBox1Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
    procedure Button4Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button5Click(Sender: TObject);
  private
    procedure Slide1(Sender: TObject);
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation
var
  W:Variant;
{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
  W:=CreateOleObject('PowerPoint.Application');
end;

procedure TForm1.CheckBox1Click(Sender: TObject);
begin
  W.Visible:=CheckBox1.Checked;
end;

procedure TForm1.Button3Click(Sender: TObject);
const
  msoShapeHexagon = 10;
var
 V: Variant;
begin
 W.Presentations.Add;
 W.ActivePresentation.Slides.Add(1,1); //Второй параметр - ppLayoutTitle
 Slide1(Self);
 W.ActivePresentation.Slides.Item(1).Shapes
       .AddShape(msoShapeHexagon, 50,5, 250,250);
 V:=W.ActivePresentation.Slides.Item(1).Shapes.Item(3)
   .TextFrame.TextRange;
 V.Text:='Шестиугольник';
end;

procedure TForm1.Slide1(Sender: TObject);
// Заполнить 1-й слайд
var
 V,V1: Variant;
begin
 V:=W.ActivePresentation.Slides.Item(1).Shapes.Item(1)
   .TextFrame.TextRange;
 V.Characters(Start:=1,Length:=0).Text:='Презентация';
 V.Font.Name := 'Times New Roman';
 V.Font.Size := 44;
 V.Font.Bold := 0;  // msoFalse
 V.Font.Italic := 0; // msoFalse
 V.Font.Underline := 0; // msoFalse
 V.Font.Shadow := 0; // msoFalse
 V.Font.Emboss := 0; // msoFalse
 V.Font.BaseLineOffset := 0;
 V.Font.AutoRotateNumbers := 0; // msoFalse
 V.Font.Color.SchemeColor := 4; // ppTitle

 V1:=W.ActivePresentation.Slides.Item(1).Shapes.Item(2)
   .TextFrame.TextRange;
 V1.Characters(Start:=1,Length:=0).Text:='Бизнес-план' + Chr(13)
    + 'директора фирмы "Рога и копыта"';
 V1.Font.Name := 'Times New Roman';
 V1.Font.Size := 32;
 V1.Font.Bold := 0; // msoFalse
 V1.Font.Italic := 0; // msoFalse
 V1.Font.Underline := 0; // msoFalse
 V1.Font.Shadow := 0; // msoFalse
 V1.Font.Emboss := 0; // msoFalse
 V1.Font.BaseLineOffset := 0;
 V1.Font.AutoRotateNumbers := 0; // msoFalse
 V1.Font.Color.SchemeColor := 2; // ppForeground
end;


procedure TForm1.Button4Click(Sender: TObject);
begin
 W.Quit;
 Close;
end;


procedure TForm1.Button2Click(Sender: TObject);
var
 A: Array [0..2] Of Variant;
 S:Variant;
begin
 // Заполняем массив номерами автофигур
 A[0]:=1; A[1]:=2; A[2]:=3;
 S := VarArrayCreate([0, 0], varVariant);
 S[0]:= VarArrayOf(A);
 // Выделяем все автофигуры
 W.ActivePresentation.Slides.Item(1).Shapes.Range(S[0]).Select;
 // Изменяем текст у выделенных автофигур
 W.ActiveWindow.Selection.ShapeRange.
   TextFrame.TextRange.Text:=Edit1.Text;
 // Снимаем выделение
 W.ActiveWindow.Selection.Unselect;
end;

procedure TForm1.Button5Click(Sender: TObject);
// Добавление текста с использованием цикла
// по количеству автофигур
var
 V: Variant;
 i: Byte;
begin
 V:=W.ActivePresentation.Slides.Item(1).Shapes;
 // Count - количество автофигур на слайде
 for i:=1 to V.Count do
   // У каждой автофигуры изменяем надпись
   V.Item(i).TextFrame.TextRange.Text:=Edit1.Text;
end;

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

    Выравнивание, распределение и группировка рисованных объектов могут производиться с помощью следующих методов объекта ShapeRange: Allign (Выравнивание), Distribute (Распределение), Group (Группировка), Regroup (Перегруппировка).

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




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