Доброго времени суток всем подписчикам и читателям блога scriptcoding.ru. Сегодня мы рассмотрим класс ShadowFormat объектной модели Word, который отвечает за параметры тени для заданной фигуры, вставленной в текстовый документ Word.
Что бы освежить вашу, а заодно и мою память, давайте рассмотрим, как происходит вставка различных фигур в документ и настройка различных параметров – тень, цвет, объемность и так далее.
Так как я использую редактор Word 2007, то будут делать пояснения основываясь на нем. Переходим на вкладку Вставка, пункт Фигуры. Выбираем нужную фигуру и вставляем ее в документ, далее выбираем фигуру и у нас вверху автоматически появится вкладка Средства редактирования/ Формат. Если следовать в направлении слева-направо, то под вкладкой будут находится следующие параметры форматирования фигур:
- Коллекция фигур – тут можно выбрать понравившуюся фигуру и вставить ее в документ.
- Стили фигур – коллекция различных стилей, содержащих заливки и рамки для заданной фигуры.
- Заливка, контур и изменить – собственно, тут можно выбрать понравившуюся заливку (FillFormat), контур (LineFormat) или изменить уже выбранную фигуру.
- Эффекты тени – собственно, тень фигуры заданных параметров.
Следующие параметры позволяют настроить такие параметры как объем, поворот, размер и так далее.
Хорошо, полагаю, память я немного освежил, как видим, из всего набора различных параметров, класс ShadowFormat отвечает только за формат тени для заданной фигуры.
ShadowFormat – тень фигуры
Доступ к классу ShadowFormat осуществляется через свойство Shadow коллекции Shapes. Всего у класса около 10 свойств, которые представляют интерес и один метод.
Свойства
ForeColor - Возвращает или задает объект ColorFormat, представляющий цвет переднего плана для заполнения, линии или тени.
OffsetX и OffsetY – Свойства возвращают или устанавливают горизонтальное или вертикальное смещение в пунктах для тени. Числовые значения могут быть как положительными, так и отрицательными.
Transparency - Возвращает или устанавливает степень прозрачности тени как значение от 0,0 (непрозрачный) и 1.0 (прозрачный).
Type - Возвращает или задает тип тени. Значение константы MsoShadowType.
Visible – Показать (True) или скрыть (False) тень. Если цвет тени не задан, то она будет серой.
Blur - Возвращает или устанавливает уровень размытия для тени. Числовое значение.
RotateWithShape – Свойство определяет, поворачивать ли тень (true) при повороте фигуры или нет (false). Чтение и запись.
Size - Возвращает или задает ширину тени.
Методы
IncrementOffsetX(Increment) и IncrementOffsetY(Increment) – Методы изменяют горизонтальное или вертикальное смещение тени на заданное число пунктов.
Ниже я привожу два примера программного кода, который работает под управлением сервера сценариев Windows Script Host. После, я дам небольшое пояснение к скриптам.
Пример программного кода на языке VBScript:
' ******************************************************************** ' Объект ShadowFormat ' параметры тени фигуры ' ShadowFormat.vbs ' ******************************************************************** Option Explicit dim oWord, oDoc, i, iCount Set oWord = CreateObject("Word.Application") ' создаем ссылку на Word.Application Set oDoc = oWord.Documents ' создаем ссылку на коллекцию Documents oDoc.Add() oWord.Visible = true dim shpCanvas Set shpCanvas = oDoc(1).Shapes ' создаем ссылку на коллекцию Shapes '-------------------------------------------------------------------------------- ' вставляем 9 фигур в документ '-------------------------------------------------------------------------------- iCount = 10 for i = 1 to 9 shpCanvas.AddShape 1, iCount, 50, 40, 40 iCount = iCount + 65 next ' задаем различные параметры тени фигур iCount = -40 for i =1 to 9 with shpCanvas(i).Shadow .OffsetX = iCount ' смещение по оси Х .ForeColor.RGB = RGB(0,0,255) ' цвет тени фигуры .Visible = true ' делаем тень фигуры видимой end with iCount = iCount + 10 next '-------------------------------------------------------------------------------- iCount = 10 for i = 1 to 9 shpCanvas.AddShape 1, iCount, 120, 40, 40 iCount = iCount + 65 next iCount = -40 for i =10 to 18 with shpCanvas(i).Shadow .OffsetY = iCount ' смещение по оси Y тень фигуры .ForeColor.RGB = RGB(0,100,255) .Visible = true end with iCount = iCount + 10 next '-------------------------------------------------------------------------------- iCount = 10 for i = 1 to 9 shpCanvas.AddShape 1, iCount, 200, 40, 40 iCount = iCount + 65 next iCount = 0.0 for i =19 to 27 with shpCanvas(i).Shadow .OffsetY = 10 .Transparency = iCount ' задаем степень прозрачности тени фигуры .Visible = true end with iCount = iCount + 0.1 next '-------------------------------------------------------------------------------- iCount = 10 for i = 1 to 9 shpCanvas.AddShape 1, iCount, 270, 40, 40 iCount = iCount + 65 next iCount = 10 for i = 1 to 9 shpCanvas.AddShape 1, iCount, 320, 40, 40 iCount = iCount + 65 next iCount = 10 for i = 1 to 2 shpCanvas.AddShape 1, iCount, 370, 40, 40 iCount = iCount + 65 next iCount = 1 for i =28 to 47 with shpCanvas(i).Shadow .OffsetY = 10 .Type = iCount .Visible = true end with iCount = iCount + 1 next |
Пример программного кода на языке JScript:
// ******************************************************************** // Объект ShadowFormat // параметры тени фигуры // ShadowFormat.js // ******************************************************************** var oWord, oDoc, i, iCount1 oWord = WScript.CreateObject("Word.Application"); // создаем ссылку на Word.Application oDoc = oWord.Documents; // создаем ссылку на коллекцию Documents oDoc.Add(); oWord.Visible = true; var shpCanvas; shpCanvas = oDoc(1).Shapes; // создаем ссылку на коллекцию Shapes //-------------------------------------------------------------------------------- // вставляем 9 фигур в документ //-------------------------------------------------------------------------------- iCount1 = 10; for (i = 1; i<=9; i++){ shpCanvas.AddShape(1, iCount1, 50, 40, 40); iCount1 += 65; } // задаем различные параметры тени фигур iCount1 = -40; for (i = 1; i<=9; i++){ with(shpCanvas(i).Shadow){ OffsetX = iCount1; // смещение по оси Х ForeColor.RGB = rgbToHex(0,0,255); // цвет тени фигуры Visible = true; // делаем тень фигуры видимой } iCount1 += 10; } //-------------------------------------------------------------------------------- iCount1 = 10; for (i = 1; i<=9; i++){ shpCanvas.AddShape(1, iCount1, 120, 40, 40); iCount1 += 65; } iCount1 = -40; for (i = 10; i<=18; i++){ with(shpCanvas(i).Shadow){ OffsetY = iCount1; // смещение по оси Y тень фигуры ForeColor.RGB = rgbToHex(0,100,255); Visible = true; } iCount1 += 10; } //-------------------------------------------------------------------------------- iCount1 = 10; for (i = 1; i<=9; i++){ shpCanvas.AddShape(1, iCount1, 200, 40, 40); iCount1 += 65; } iCount1 = 0.0; for (i = 19; i<=27; i++){ with(shpCanvas(i).Shadow){ OffsetY = 10; Transparency = iCount1; // задаем степень прозрачности тени фигуры Visible = true; } iCount1 += 0.1; } //-------------------------------------------------------------------------------- iCount1 = 10; for (i = 1; i<=9; i++){ shpCanvas.AddShape(1, iCount1, 270, 40, 40); iCount1 += 65; } iCount1 = 10; for (i = 1; i<=9; i++){ shpCanvas.AddShape(1, iCount1, 320, 40, 40); iCount1 += 65; } iCount1 = 10; for (i = 1; i<=2; i++){ shpCanvas.AddShape(1, iCount1, 370, 40, 40); iCount1 += 65; } iCount1 = 1; for (i = 28; i<=47; i++){ with(shpCanvas(i).Shadow){ OffsetY = 10; Type = iCount1; Visible = true; } iCount1 += 1; } //***************************************************** // Функция преобразования RGB цвета в // десятичное значение //***************************************************** function rgbToHex (r, g, b){ r = r.toString(16); g = g.toString(16); b = b.toString(16); if (r.length == 1) r = '0' + r; if (g.length == 1) g = '0' + g; if (b.length == 1) b = '0' + b; myStr = (b + g + r).toUpperCase() return parseInt("0x".concat(myStr)) } |
Смотрите, оба сценария практически идентичны, только в скрипте под Jscript есть дополнительная пользовательская функция rgbToHex, ее логика работы идентична функции RGB в скрипте под VBScript. Вставка фигур происходит циклично, в несколько этапов, сам результат работы скриптов, которые задают различные параметры тени для фигур в документе видно на рисунке выше.
Спасибо за внимание. Автор блога Владимир Баталий