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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 21.06.2010, 11:32   #1
beda
Пользователь
 
Регистрация: 07.04.2010
Сообщений: 22
По умолчанию Поиск длины строки

Необходимо определить длину. Сейчас это выполняется с помощью функции:
m_Window->GetPoint(&left, &top, &width, &height, range).
Ведется попытка определить размер с помощью:
GetTextExtentPoint(hdc, text.c_str(), text.length(), &stringSize).
Эти функции возвращают немного разные результаты. Причем на результат влияет шрифт и количество пробелов в строке. Наблюдения показали что word меняет длину пробела зависимости от символов которые стоят по обе стороны пробела. Есть предположение что это зависит от кернинг пар.

Может кто нить подскажет алгоритм поиска длинны строки в word. Или особенности от которых она может меняться.
beda вне форума Ответить с цитированием
Старый 21.06.2010, 11:48   #2
viter.alex
Балуюсь кодами
Участник клуба
 
Аватар для viter.alex
 
Регистрация: 09.01.2009
Сообщений: 1,837
По умолчанию

А если так (длина строки, на которой стоит курсор)
Код:
Sub LineLenght()
  Dim nStart As Long
  Dim nEnd As Long
  Dim oRng As Range
  Set oRng = Selection.Bookmarks("\line").Range
  nStart = oRng.Characters.First.Information(wdHorizontalPositionRelativeToPage)
  nEnd = oRng.Characters.Last.Information(wdHorizontalPositionRelativeToPage)
  MsgBox "Длина строки равна " & PointsToMillimeters(nEnd - nStart) & " мм"
End Sub
Лучше день потерять — потом за пять минут долететь!©
viter.alex вне форума Ответить с цитированием
Старый 21.06.2010, 12:06   #3
beda
Пользователь
 
Регистрация: 07.04.2010
Сообщений: 22
По умолчанию

Хотелось бы вообще избавится от вызова com функциий word. Это связано в первую очередь с быстродействием.
beda вне форума Ответить с цитированием
Старый 21.06.2010, 12:14   #4
viter.alex
Балуюсь кодами
Участник клуба
 
Аватар для viter.alex
 
Регистрация: 09.01.2009
Сообщений: 1,837
По умолчанию

Тогда почему вопрос в раздел VBA?
Лучше день потерять — потом за пять минут долететь!©
viter.alex вне форума Ответить с цитированием
Старый 21.06.2010, 12:25   #5
beda
Пользователь
 
Регистрация: 07.04.2010
Сообщений: 22
По умолчанию

Да может раздел не совсем соответствует. Но собственно меня интересует сам алгоритм по которому word рассчитывает (или расставляет) расстояние между символами. Или в общем случае как word выбирает ширину символов. (подобно особенностям поиска междустрочного интервала зависимости от размера кегля). И возможно кто то с этим сталкивался. Может можно "заставить" word с помощью VBA не менять ширину символа.
beda вне форума Ответить с цитированием
Старый 21.06.2010, 14:27   #6
beda
Пользователь
 
Регистрация: 07.04.2010
Сообщений: 22
По умолчанию

Из рисунка видно что размеры символов для word и для api DrawText одинаковы. Отличаются лишь расстояния между символами. Скорее всего такой эффект дают кернинг пары. Попытка их учитывать с помощью Api (GetKerningPairs) не дала результатов, скорее всего word дополняет таблицу kerningPairs или определяет свою.

Возможно ли, использую VBA, получить список kerningPairs word-a для определенного шрифта?
Изображения
Тип файла: jpg kerning.jpg (113.9 Кб, 121 просмотров)
beda вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Обработка строк:определение длины строки DidT33rus Помощь студентам 6 14.05.2010 11:43
Строки неизвестной длины в си abr_question Общие вопросы C/C++ 18 22.01.2010 00:26
Считывание строки неограниченной длины (Си) 0kopok Помощь студентам 6 05.10.2009 20:46
Поиск цикла длины 4. <Бананан> Помощь студентам 33 25.05.2008 20:10