Шаг 243.
Автоматизация Microsoft PowerPoint.
Работа со слайдами. Обращение к слайду. Методы Paste и Range

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

    Обратиться к слайду можно по его номеру, например:

  Арр.Presentations.Item(1).Slides.Item(1);

    Так как порядковые номера слайдов в процессе редактирования презентации могут меняться, для обращения к слайду можно также пользоваться уникальным идентификатором SlideID, являющимся свойством объекта Slide. В этом случае для поиска слайда можно использовать метод FindBySlideID:

  var MyID: integer;
  const
   ppLayoutText = $00000002;
  .   .   .   .
  MyID := App.Presentations.Item(1).Slides.Item(2).SlideID;
  App.Presentations.Item(1).Slides.FindBySlideID(MyID).Layout := ppLayoutText;

    Отметим, что при копировании слайда в другую презентацию его идентификатор SlideID изменяется.

    Свойство Layout объекта Slide, использованное в приведенном примере, позволяет изменить тип слайда.

    Метод Paste позволяет вставить слайд из буфера обмена в коллекцию Slides данной презентации. Данный метод возвращает объект SlideRange, который и представляет собой вставленный слайд. Метод Paste может содержать необязательный числовой параметр, который определяет порядковый номер слайда, перед которым будет вставлен слайд из буфера обмена. Если этот аргумент отсутствует, то слайд будет помещен в конец коллекции.

    Метод Range возвращает объект SlideRange, который позволяет работать с диапазоном слайдов. При этом объект SlideRange имеет свойства и методы, аналогичные объекту Slide. Это связано с тем, что диапазон слайдов имеет те же свойства, что и одиночный слайд. Метод Range имеет один необязательный параметр, который определяет слайд, включаемый в заданный диапазон. Значением данного свойства может быть целое число, которое задает порядковый номер слайда в коллекции, или строка, которая задает имя слайда. Наряду с этим может быть задан массив целых чисел или строк, которые определяют слайды, включаемые в диапазон. Если этот аргумент отсутствует, то в диапазон включаются все слайды данной презентации.

    В заключение приведем пример использования метода Range. Будем задавать номера слайдов, у которых изменим цвета фона и текста.

    Вот полный текст приложения:

unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    Button1: TButton;
    CheckBox1: TCheckBox;
    Button2: TButton;
    Button3: TButton;
    Button4: TButton;
    ComboBox1: TComboBox;
    ComboBox2: TComboBox;
    Label1: TLabel;
    Label2: TLabel;
    Button5: TButton;
    Button6: TButton;
    Edit1: TEdit;
    Label3: TLabel;
    Label4: TLabel;
    procedure Button1Click(Sender: TObject);
    procedure CheckBox1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
    procedure Button4Click(Sender: TObject);
    procedure Button5Click(Sender: TObject);
    procedure Button6Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
const
//Работа с цветом
  ppBackground = $00000001;
  ppForeground = $00000002;
  ppShadow     = $00000003;
  ppTitle      = $00000004;
  ppFill       = $00000005;
  ppAccent1    = $00000006;
  ppAccent2    = $00000007;
  ppAccent3    = $00000008;
//Виды текста
  ppDefaultStyle = $00000001;	// стандартный текст
  ppTitleStyle   = $00000002;	// текст заголовков
  ppBodyStyle    = $00000003;	// основной текст

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.Button2Click(Sender: TObject);
//Закрытие документа
begin
W.ActivePresentation.Close;

end;

procedure TForm1.Button3Click(Sender: TObject);
begin
 W.Presentations.Add;
end;

procedure TForm1.Button5Click(Sender: TObject);
begin
 W.ActivePresentation.Slides.Add(1,2{ppLayoutText});
end;


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

procedure TForm1.Button6Click(Sender: TObject);
var
   A: Array [0..10] Of Variant;
   S:Variant;
   i,kol: Integer;
   B: string;
begin
  S := VarArrayCreate([0, 0], varVariant);
  // Заполнение массива А номерами слайдов
  B:=Edit1.Text;
  i:=pos (',',B);
  kol:=0;
  while i<>0 do
  begin
     A[kol] := StrToInt(Copy(B,1,i-1));
     delete (B,1,i);
     kol:=kol+1;
     i:=pos (',',B);
  end;
  if (length(B)<>0) then A[kol] := StrToInt(B)
  else kol:=kol-1;
  S[0]:= VarArrayOf(A);
 case ComboBox1.ItemIndex of
  0 : W.ActivePresentation.Slides.Range(S[0])
         .ColorScheme.Colors(ppBackGround).RGB:=clRed;
  1 : W.ActivePresentation.Slides.Range(S[0])
         .ColorScheme.Colors(ppBackGround).RGB:=clGreen;
  2 : W.ActivePresentation.Slides.Range(S[0])
         .ColorScheme.Colors(ppBackGround).RGB:=clBlue;
  3 : W.ActivePresentation.Slides.Range(S[0])
         .ColorScheme.Colors(ppBackGround).RGB:=clBlack;
  4 : W.ActivePresentation.Slides.Range(S[0])
         .ColorScheme.Colors(ppBackGround).RGB:=clWhite;
 end;
 case ComboBox2.ItemIndex of
  0 : W.ActivePresentation.Slides.Range(S[0])
         .ColorScheme.Colors(ppForeground).RGB:=clRed;
  1 : W.ActivePresentation.Slides.Range(S[0])
         .ColorScheme.Colors(ppForeground).RGB:=clGreen;
  2 : W.ActivePresentation.Slides.Range(S[0])
         .ColorScheme.Colors(ppForeground).RGB:=clBlue;
  3 : W.ActivePresentation.Slides.Range(S[0])
         .ColorScheme.Colors(ppForeground).RGB:=clBlack;
  4 : W.ActivePresentation.Slides.Range(S[0])
         .ColorScheme.Colors(ppForeground).RGB:=clWhite;
 end;

end;

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

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


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

    Прокомментируем приведенный текст. Изменения цветов происходят в процедуре Button6Click(). Основная сложность заключается в том, чтобы передать в метод Range вариантный массив, содержащий номера слайдов, подлежащих изменению. Сначала создаем вариантный массив S, состоящий из одного элемента, который будет содержать одномерный массив, состоящий из номеров слайдов. Эти номера помещаются в массив A. Помещение элементов массива A в нулевой элемент массива S выполняется функцией VarArrayOf.

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

    На следующем шаге мы рассмотрим объект Slide.




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