Шаг 263.
Автоматизация Microsoft PowerPoint.
Объект ThreeDFormat (методы)

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

    Перечислим основные методы этого объекта.

    Метод IncrementRotationX поворачивает объект вокруг оси X на заданный угол. Общий вид этого метода:

  IncrementRotationX(Angle)
где Angle - угол поворота в градусах.

    Метод IncrementRotationY поворачивает объект вокруг оси Y на заданный угол. Общий вид этого метода:

  IncrementRotationY(Angle)
где Angle - угол поворота в градусах.

    Метод ResetRotation возвращает значения углов поворота объекта вокруг осей X и Y к исходным величинам. Этот метод не имеет параметров.

    Метод SetExtrusionDirection задает направление линий проекции. Общий вид этого метода:

  SetExtrusionDirection (PresetExtrusionDirection), 
где PresetExtrusionDirection - константа, определяющая направление проекции. Может принимать одно из следующих значений (в скобках - числовое значение константы): msoExtrusionBottom (2), msoExtrusionBottomLeft (3), msoExtrusionBottomRight (1), msoExtrusionLeft (6), msoExtrusionNone (5), msoExtrusionRight (4), msoExtrusionTop (8), msoExtrusionTopLeft (9), msoExtrusionTopRight (7), msoPresetExtrusionDirectionMixed (-2).

    Метод SetThreeDFormat задает формат объемной проекции. Общий вид этого метода:

  SetThreeDFormat (PresetThreeDFormat),
где PresetThreeDFormat - константа, определяющая формат объемной проекции. Может принимать одно из следующих значений (в скобках - числовое значение константы): msoThreeD1 (1), msoThreeD2 (2), msoThreeD3 (3), msoThreeD4 (4), msoThreeD5 (5), msoThreeD6 (6), msoThreeD7 (7), msoThreeD8 (8), msoThreeD9 (9), msoThreeD10 (10), msoThreeD11 (11), msoThreeD12 (12), msoThreeD13 (13), msoThreeD14 (14), msoThreeD15 (15), msoThreeD16 (16), msoThreeD17 (17), msoThreeD18 (18), msoThreeD19 (19), msoThreeD20 (20).

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

    Структура приложения не отличается от приложений, приведенных на предыдущих шагах.

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

procedure TForm1.Button3Click(Sender: TObject);
const
  msoShapeHexagon = 10;
var
 V: Variant;
begin
 W.Presentations.Add;
 W.ActivePresentation.Slides.Add(1,1); //Второй параметр - ppLayoutTitle
 Slide1(Self); // Заполнить 1-й слайд
 W.ActivePresentation.Slides.Item(1).Shapes
       .AddShape(msoShapeHexagon, 50,5, 200,200);
 V:=W.ActivePresentation.Slides.Item(1).Shapes.Item(3)
   .TextFrame.TextRange;
 V.Characters(Start:=1,Length:=0).Text:='Шестиугольник';
 V:=W.ActivePresentation.Slides.Item(1).Shapes.Item(3).ThreeD;
 // Начальные значения объемности
 V.Depth:=100;
 V.Visible := True;
 V.ExtrusionColor.RGB := RGB(255, 100, 255);
 V.ExtrusionColorType:=1; // msoExtrusionColorAutomatic
 V.Perspective:=True;
 V.PresetLightingSoftness:=3; // msoLightingBright
 V.PresetLightingDirection:=8; // msoLightingBottom
 V.PresetMaterial:=3; // msoMaterialMetal
 V.RotationX:=45;
end;

    Затем некоторые из этих параметров изменяются при изменении соответствующих элементов формы Delphi-приложения.

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

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;
    Label1: TLabel;
    Button2: TButton;
    Label13: TLabel;
    ComboBox10: TComboBox;
    Label2: TLabel;
    Label3: TLabel;
    Label4: TLabel;
    Label5: TLabel;
    Edit1: TEdit;
    UpDown1: TUpDown;
    ComboBox1: TComboBox;
    ComboBox2: TComboBox;
    ComboBox3: TComboBox;
    Label6: TLabel;
    ComboBox4: TComboBox;
    Label7: TLabel;
    ComboBox5: TComboBox;
    Label8: TLabel;
    Edit2: TEdit;
    UpDown2: TUpDown;
    Label9: TLabel;
    Edit3: TEdit;
    UpDown3: TUpDown;
    Button5: TButton;
    procedure Button1Click(Sender: TObject);
    procedure CheckBox1Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
    procedure Button4Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure ComboBox10Change(Sender: TObject);
    procedure ComboBox1Change(Sender: TObject);
    procedure ComboBox2Change(Sender: TObject);
    procedure ComboBox3Change(Sender: TObject);
    procedure ComboBox4Change(Sender: TObject);
    procedure ComboBox5Change(Sender: TObject);
    procedure UpDown2Changing(Sender: TObject; var AllowChange: Boolean);
    procedure UpDown1Changing(Sender: TObject; var AllowChange: Boolean);
    procedure UpDown3Changing(Sender: TObject; var AllowChange: Boolean);
    procedure Button5Click(Sender: TObject);
  private
    procedure Slide1(Sender: TObject);
    { 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.Button3Click(Sender: TObject);
const
  msoShapeHexagon = 10;
var
 V: Variant;
begin
 W.Presentations.Add;
 W.ActivePresentation.Slides.Add(1,1); //Второй параметр - ppLayoutTitle
 Slide1(Self); // Заполнить 1-й слайд
 W.ActivePresentation.Slides.Item(1).Shapes
       .AddShape(msoShapeHexagon, 50,5, 200,200);
 V:=W.ActivePresentation.Slides.Item(1).Shapes.Item(3)
   .TextFrame.TextRange;
 V.Characters(Start:=1,Length:=0).Text:='Шестиугольник';
 V:=W.ActivePresentation.Slides.Item(1).Shapes.Item(3).ThreeD;
 // Начальные значения объемности
 V.Depth:=100;
 V.Visible := True;
 V.ExtrusionColor.RGB := RGB(255, 100, 255);
 V.ExtrusionColorType:=1; // msoExtrusionColorAutomatic
 V.Perspective:=True;
 V.PresetLightingSoftness:=3; // msoLightingBright
 V.PresetLightingDirection:=8; // msoLightingBottom
 V.PresetMaterial:=3; // msoMaterialMetal
 V.RotationX:=45;
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
  R,G,B: Byte; // Составляющие цветов
  V: Variant;
begin
   if ColorDialog1.Execute then
   begin
    R:= ColorDialog1.Color and $FF;
    G:= (ColorDialog1.Color and $FF00) shr 8;
    B:= (ColorDialog1.Color and $FF0000) shr 16;
    V:=W.ActivePresentation.Slides.Item(1).Shapes.Item(3).ThreeD;
    V.ExtrusionColor.RGB:=RGB(R,G,B);
   end;
end;

procedure TForm1.ComboBox10Change(Sender: TObject);
// Видимость объема
var
 V: Variant;
begin
 V:=W.ActivePresentation.Slides.Item(1).Shapes.Item(3).ThreeD;
 if ComboBox10.ItemIndex=0 then V.Visible:=True
 else V.Visible:=False;
end;

procedure TForm1.UpDown1Changing(Sender: TObject;
  var AllowChange: Boolean);
// Глубина проекции
var
 V: Variant;
begin
 V:=W.ActivePresentation.Slides.Item(1).Shapes.Item(3).ThreeD;
 V.Depth:=StrToInt(Edit1.Text);
end;

procedure TForm1.ComboBox1Change(Sender: TObject);
// Должен ли цвет линий проекции зависеть от заливки объекта
var
 V: Variant;
begin
 V:=W.ActivePresentation.Slides.Item(1).Shapes.Item(3).ThreeD;
 V.ExtrusionColorType:=ComboBox1.ItemIndex+1;
end;

procedure TForm1.ComboBox2Change(Sender: TObject);
// Перспектива
var
 V: Variant;
begin
  V:=W.ActivePresentation.Slides.Item(1).Shapes.Item(3).ThreeD;
  if ComboBox2.ItemIndex=0 then V.Perspective:=False
  else V.Perspective:=True;
end;

procedure TForm1.ComboBox3Change(Sender: TObject);
// Яркость освещения
var
 V: Variant;
begin
 V:=W.ActivePresentation.Slides.Item(1).Shapes.Item(3).ThreeD;
 V.PresetLightingSoftness:=ComboBox3.ItemIndex+1;
end;

procedure TForm1.ComboBox4Change(Sender: TObject);
// Положени источника света
var
 V: Variant;
begin
 V:=W.ActivePresentation.Slides.Item(1).Shapes.Item(3).ThreeD;
 V.PresetLightingDirection:=ComboBox4.ItemIndex+1;
end;

procedure TForm1.ComboBox5Change(Sender: TObject);
// Материал
var
 V: Variant;
begin
 V:=W.ActivePresentation.Slides.Item(1).Shapes.Item(3).ThreeD;
 V.PresetMaterial:=ComboBox5.ItemIndex+1;
end;

procedure TForm1.UpDown2Changing(Sender: TObject;
  var AllowChange: Boolean);
// Поворот по X
var
 V: Variant;
begin
 V:=W.ActivePresentation.Slides.Item(1).Shapes.Item(3).ThreeD;
 V.RotationX:=StrToInt(Edit2.Text);
end;


procedure TForm1.UpDown3Changing(Sender: TObject;
  var AllowChange: Boolean);
// Поворот по Y
var
 V: Variant;
begin
 V:=W.ActivePresentation.Slides.Item(1).Shapes.Item(3).ThreeD;
 V.RotationY:=StrToInt(Edit3.Text);
end;

procedure TForm1.Button5Click(Sender: TObject);
// Сброс поворотов
var
 V: Variant;
begin
 V:=W.ActivePresentation.Slides.Item(1).Shapes.Item(3).ThreeD;
 V.ResetRotation;
end;

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

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


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

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




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