1

Тема: Как распознать автоматический перенос?

Как с помощью макроса определить, что в слово добавлен автоматический перенос?

Макросы под заказ и готовый пакет - mtdmacro.ru

2

Re: Как распознать автоматический перенос?

Просто предполагаю. Если конец слова совпадает с концом строки, то слово не перенесено:

?selection.Bookmarks("\line").Range.End
?selection.Bookmarks("\line").Range.Words.Last.end
Лучше день потерять — потом за пять минут долететь!

3

Re: Как распознать автоматический перенос?

viter.alex пишет:

Если конец слова совпадает с концом строки, то слово не перенесено

То, что часть слова на одной строке, а часть на другой, еще не значит, что вставлен автоперенос sad
Например:
- авропереносы просто отключены smile
- слова, в которых автоперенос не ставится никогда (числа, смешанные слова, несловарные…)

Для ясности, определю задачу так: поиск и замена автопереносов знаком «мягкий перенос» Chr(31).

Отредактировано Вождь (19.03.2010 06:58:27)

Макросы под заказ и готовый пакет - mtdmacro.ru

4

Re: Как распознать автоматический перенос?

не понимаю. Естественно, автопереносы должны быть включены, чтобы их искать.

Вождь пишет:

- слова, в которых автоперенос не ставится никогда (числа, смешанные слова, несловарные…)

Так ведь и слово будет на одной строке.
Я пробовал, автоперенос на слове никак не отражается, а вот мягкий перенос находится в самом слове.

Лучше день потерять — потом за пять минут долететь!

5

Re: Как распознать автоматический перенос?

viter.alex пишет:

Так ведь и слово будет на одной строке

Не всегда.
Если ширина параграфа, например, 1 см, то 99% слов будет в нескольких (двух, трех...) строках.
Еще можно нажать, например, клавишу с буквой "А" и удерживать ее с минуту. Получим длинное слово без автопереносов.

Отредактировано Вождь (19.03.2010 08:13:47)

Макросы под заказ и готовый пакет - mtdmacro.ru

6

Re: Как распознать автоматический перенос?

Ну ты рассматриваешь какие-то паталогические случаи. Тогда, может проверять символ, которым заканчивается строка?

Лучше день потерять — потом за пять минут долететь!

7

Re: Как распознать автоматический перенос?

viter.alex пишет:

...паталогические случаи...

Ячейка таблицы - это обычный случай. А уж в ячейках ширина параграфа достаточно мала.

По-видимому, простого решения не существует. Я придумал два извращения:
1. Точный метод: сравниваем ширину последнего символа в строке, когда автопереносы включены и когда выключены.
2. Приблизительный метод: делаем кучу проверок вероятности автопереноса, начиная от "автопереносы включены"... "слово в нескольких строках" ... до "наличие слова в словаре переносов".

Макросы под заказ и готовый пакет - mtdmacro.ru

8

Re: Как распознать автоматический перенос?

Вождь пишет:

…1. Точный метод: сравниваем ширину последнего символа в строке, когда автопереносы включены и когда выключены…

На моноширинных шрифтах  не сработает

Лучше день потерять — потом за пять минут долететь!

9

Re: Как распознать автоматический перенос?

viter.alex пишет:

На моноширинных шрифтах  не сработает

Сработает. Шрифт не имеет значения. Расстановка автопереносов на ширину букв не влияет. Визуально символ (character) с автопереносом это "А-", а без "А", естественно первый всегда будет шире.

Макросы под заказ и готовый пакет - mtdmacro.ru

10

Re: Как распознать автоматический перенос?

Кстати, я всегда знал, что области Selection и Selection.Range ведут себя по разному. Интересный результат получится если поставить курсор поближе к концу строки и запустить код:

MsgBox "Range = " & Selection.Range.Information(wdHorizontalPositionRelativeToTextBoundary) & vbLf & "Selection = " & Selection.Information(wdHorizontalPositionRelativeToTextBoundary)

Оказывается Selection шире Selection.Range yikes

Макросы под заказ и готовый пакет - mtdmacro.ru