1

Тема: О принципах вставки объектов в Word

Когда пользователь вставляет в документ такие объекты как прямоугольник, стрелочки и т.д., то есть объекты рисования они автоматически привязываются к по вертикали к ближайшему абзацу, а по горизонтали к 1-му знаку этого абзаца и относительно него в программе проходят вычисления положения созданного объекта. Значения этих параметров можно посмотреть в открыв окно Дополнительные параметры разметки вкладку Положение и настроить его под свои требования. Недостаток Ворда в том, что во-первых окно занимает много места на экране, а во-вторых изменение данных происходит введением данных вручную в поля этого окна. То есть вы не можете одновременно следить за данными положения и одновременно перетаскивать объект по документу. Фактически положение объекта в Ворде осуществляется вслепую, и чтобы точно указать местоположение объекта надо заниматься математикой. В следующем посте я приведу пример простого макроса который будет зачеркивать 5 символ в общем выделении текста. Макрос будет приведен в качестве примера управления объектом Shape типа Line.

2

Re: О принципах вставки объектов в Word

Для понимания настроек объекта Shape типа Line выполните следующие действия:
1. Создайте новый документ.
2. Наберите в 1-ом абзаце текст 123456789 данный текст одновременно показывает и номер знака.
3. Выделите текст этого абзаца.
4. Откройте редактор VBA, в проекте созданного документа в модуль ThisDocument введите код макроса:

Public Sub AddShapeLine()
Dim x1 As Variant, x2 As Variant, y1 As Variant
Dim Shp As Shape
    y1 = Selection.Characters(5).Information(wdVerticalPositionRelativeToTextBoundary)
    y1 = y1 + (Selection.Characters(5).Font.Size / 2)
    x1 = Selection.Characters(5).Information(wdHorizontalPositionRelativeToTextBoundary) + 1
    x2 = Selection.Characters(6).Information(wdHorizontalPositionRelativeToTextBoundary) + 1
    Set Shp = ActiveDocument.Shapes.AddLine(x1, y1, x2, y1, Selection.Range.Characters(5))
    Shp.Line.ForeColor = RGB(255, 0, 0)
End Sub

5. Запустите макрос из меню запуска макросов.
В результате выполнения макроса цифра 5 будет зачеркнута красной линией.
В следующем посте мы подробно рассмотрим код данного макроса.

3

Re: О принципах вставки объектов в Word

Немного изменив макрос, можно этот знак отдельно в рамочку обвести или кружочком выделить. Главное понять принцип вставки.

4

Re: О принципах вставки объектов в Word

Рассмотрим построчно действие приведенного выше макроса:

Dim x1 As Variant, x2 As Variant, y1 As Variant
Dim Shp As Shape

Эти строки объявляют процедуре переменные, где x1, x2, y1 координаты для создания объекта Shp типа Line(линия), при чем координату y2 не назначаем, так как для ровной горизонтальной линии она будет совпадать с переменной y1
Далее строки:

y1 = Selection.Characters(5).Information(wdVerticalPositionRelativeToTextBoundary)
y1 = y1 + (Selection.Characters(5).Font.Size / 2)

назначают координату по вертикальной оси
y1 = Selection.Characters(5).Information(wdVerticalPositionRelativeToTextBoundary) дает значение верхнего положения знака Characters(5)(Знак 5) объекта Selection(Выделение).
Для того чтобы зачеркнуть знак по середине мы должны к ранее полученному значению прибавить половину размера шрифта определенного нами знака для этого мы пишем окончательную строку со значением y1: y1 = y1 + (Selection.Characters(5).Font.Size / 2)
Следующая строка:

x1 = Selection.Characters(5).Information(wdHorizontalPositionRelativeToTextBoundary) + 1

, здесь + 1 добавляет 1 пункт к нормальному крекингу шрифта, чтобы начало линии по оси х не соприкасалось с предыдущим знаком и определяет начало линии по оси х, а строка:

x2 = Selection.Characters(6).Information(wdHorizontalPositionRelativeToTextBoundary) + 1

определяет конец линии.
Теперь мы создаем непосредственно объект Shape типа Line с определенными нами координатами и задаем цвет линии красным строки:

Set Shp = ActiveDocument.Shapes.AddLine(x1, y1, x2, y1, Selection.Range.Characters(5))
Shp.Line.ForeColor = RGB(255, 0, 0)

Ву аля. smile

5

Re: О принципах вставки объектов в Word

Результат до выполнения макроса и после показан в скриншотах приложенного архива!

Post's attachments

Shape.rar 206.21 Кб, 2 скачиваний с 2012-09-27 

You don't have the permssions to download the attachments of this post.