Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Word
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 24.06.2013, 14:55   #1
IAGor1960
Новичок
Джуниор
 
Регистрация: 24.06.2013
Сообщений: 3
По умолчанию Как программно в VBA рассчитать "Ширину текста"?

Добрый всем день!

Подскажите пожалуйста, как в Word`е программно рассчитать "ширину текста"?

Например, шрифтом "Times New Roman", 14 размера, набран следующий текст "Пример текста".
Какой ширины будет этот текст при печати?
IAGor1960 вне форума Ответить с цитированием
Старый 25.06.2013, 14:52   #2
IAGor1960
Новичок
Джуниор
 
Регистрация: 24.06.2013
Сообщений: 3
По умолчанию

Отвечу сам же.

Использую свойство Information объекта Word.Selection.
Можно использовать как Information(wdHorizontalPositionRel ativeToTextBoundary), так и Information(wdHorizontalPositionRel ativeToPage).

Пример функции:

Public Function Selection_TextWidth() As Double
' Возвращает ширину выделенного текста в сантиметрах.
' Выделять можно только не более 1-й строки текста и
' в выделение не должен входить символ перевода строки и/или параграф.

Dim MyRange As Range, MyRange1 As Range, clps As Range
Dim tmpStart As Double, tmpEnd As Double

Application.ScreenUpdating = 0

With Selection
Set MyRange = .Range 'Запомним область выделения для восстановления
Set MyRange1 = .Range 'Запомним область выделения для определения
'Окончания выделенной области

'Определяем Начало выделенной области
Set clps = .Range
clps.Collapse (wdCollapseStart)
clps.Select
tmpStart = PointsToCentimeters(.Information(wd HorizontalPositionRelativeToTextBou ndary))

'Определяем Окончание выделенной области
Set clps = MyRange
clps.Collapse (wdCollapseEnd)
clps.Select
tmpEnd = PointsToCentimeters(.Information(wd HorizontalPositionRelativeToTextBou ndary))
End With

Application.ScreenUpdating = 1
MyRange1.Select

Selection_TextWidth = tmpEnd - tmpStart

End Function
IAGor1960 вне форума Ответить с цитированием
Старый 25.06.2013, 16:06   #3
Sasha_Smirnov
Особый статус
Участник клуба
 
Аватар для Sasha_Smirnov
 
Регистрация: 24.11.2008
Сообщений: 1,535
По умолчанию

Ваша тема (ширина текста, координаты выделения) на удивление популярна: http://programmersforum.ru/showthread.php?t=73854

Хотелось бы узнать, а что так торкнуло?
Sasha_Smirnov вне форума Ответить с цитированием
Старый 25.06.2013, 16:41   #4
IAGor1960
Новичок
Джуниор
 
Регистрация: 24.06.2013
Сообщений: 3
По умолчанию

Необходимость следующая:
Есть некая форма из 2-х полей.
Разделить текст на 2 части (на 2 поля), 1-я часть должна быть строго по заданной ширине.
IAGor1960 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
как программно добавить "виртуальные курсоры" Delphi beegl Общие вопросы Delphi 7 08.03.2013 13:23
Как программно изменить цвет "компонента"? Смотрим внутри... Vova777 Общие вопросы Delphi 3 15.02.2012 05:56
Как обойти "преобразование типа из "string" в "float" невозможно" lexluter1988 Помощь студентам 1 07.08.2010 12:23
Как программно запускать "Дефрагментация дисков" на Windows XP kenta Общие вопросы Delphi 2 29.11.2009 20:12
Как узнать ширину панели "Пуск" Port 111 Win Api 6 01.02.2009 23:05