пОЛУЧИТЬ дЛИНУ кУСКА тЕКСТА, сТРОКИ, сЛОВА, сИМВОЛА в мМ
RE: почитал окружающие посты, видимо под vb стоит понимать vba, т.к. речь идет именно о word
пишем фразу в word xp "маша ела кашу" как получить ее длину в чем-нибудь? желательно в мм или см, но сойдет и в "поинтах", на самый тяжелый случай даже в пикселях сойдет. Ответ нужен на vb. Пишу на bcb 6.0 и уперся в принципиальное отсутствие подобных свойств. Если бы кто-нибудь намек дал куда копать на vb, я бы раскопал. Заранее всем спасибо.
RE: почитал окружающие посты, видимо под vb стоит понимать vba, т.к. речь идет именно о word
Честно гоаоря, могу предложить тольео "дубовый" вариант. Использовать только шрифт, в котором все символы одинаковой ширины (типа Tahoma, по-моему) и вычислять длинну исходя из количества символов. Я с такой задачей справлялся в своё время только при помощи перебора....:{
Справка Microsoft Visual Basic:
Selection.FitTextWidth = CentimetersToPoints(5)
Интерпритация для bcb (это побольшей части для себя, чтоб не сбится):
Неужели невозможен обратный процесс? Буду пробывать еще. Вариант перебора я уже рассматривал, как крайний, т.к. очень не удобный, не практичный и вообще не очень, т.к. преполагается передавать данные из сразу многих форм в один документ и короче на выходе получится огромная некрасивая загагулина кода. Даже если все впихнуть в одну ф-цию. Вариант с API тоже самое. Некрасиво. Как минимум. Юзабилити->0, но при случае буду и так пробовать. Может кто еще что-нибудь предложит.:(
RE: на bcb есть такой интересный момент, если FitTextWidth для selection не задано кодером, то по определению равно 0, а то что текст при этом на 8 листов word вообще не интересует, вот я и подумал, может я что-нибудь не так делаю и(или) на vb/vba таких проблем нет(а просто компонент криво сделан), а видимо не я один такой и это не может не удручать.
1. код маленький,
2. универсальный (никакие вспомог. библиотеки не нужны)
3. работает быстро и точно.
Насчет проблем. Что касается VB, то тут токо одно решение - это API (если токо см разработчик компонента не напишит через API обсуждаемое свойство).
VBA тоже разная бывает, в Excel'е например тоже приходится использовать API (если ты ищешь конечно не ширину столбца).
Так что ты должен отдавать себе отчет что вариант решения с помощью методов и свойств Word'а будет действовать токо в макросах под Word, или тебе придется подключать библиотеку word к своим программам, но это уже маразм (если твоя программа не использует word, то только ради этого грузить и еще ограничивать себя обязательным установл. word'а на комп.. :() )
Не знаю, меня как раз API и устраивает, потому что:
1. код маленький,
2. универсальный (никакие вспомог. библиотеки не нужны)
3. работает быстро и точно.
Если бы меня все перечисленное волновало - я не писал бы на bcb. К слову сказать механизм предложенный в файле mdlSysMetrics.bas ничего принципиально нового не дает, это просто вычисление для данного шрифта средней длины символа. Может я чего-то не доглядел, но вроде речь шла о получении дескриптора текста (если такое в принципе можно, но имхо это уже лучше на WIN API запостить, что уже и проделал).
А по теме топа могу сказать, что в поисках справки уже добрался до office.microsoft.com, уже просто спортивный интерес, я не верю, что это принципиально не возможно, причем красиво, а не через одно место... и видимо я не прав, а может ищу не там, ррррр:devil:
Средн. ширина символов нужна была иключительно для Excel'я, потому что у него была нехорошая привычка мерить ширину столбцов в мифических кол-вах символ шрифта по умолч.
В том же модуле, ниже есть независимая удобная функция которая использует API функцию GetTextExtentPoint32 - эта функция возвращает ИТОГОВУЮ РЕАЛЬНУЮ ДЛИНУ/ВЫСОТУ ПЕРЕДАННОЙ ЕЙ СТРОКИ. для вычисления этих данных она использует шрифт который выбран в указанном hdc. Чтобы скрыть от обычных пользователей премудрости использования API функций и была написана VB функция, выполняющая роль обертки - это GetTextPoint, ей достаточно указать имя шрифта и строку, чтобы получить итоговую длину строки.
КУ: нету там кстати такой ф-ции, это так о птичках
RE2:скачай файлик - давай посмеемся вместе и GetTextExtentPoint32 вообще в тексте не упоминается нигде даже, может ссылка не та, хотя тут вообще по офису не так много ссылок, хм
RE: а вот за наводку на нужную ф-цию спасибо, я ее скорее сам прикручу, хотя если вдруг таки проясниться возможность применения твоей ф-ции, буду очень признателен
в этом модуле оставил только то что тебе нужна, там одна указанная выше public функция и комментария к ней.
Большое спасибо. Я еще забегу с вопросиками))) потом.
Большое спасибо. Я еще забегу с вопросиками))) потом.
В принципе, если ты найдешь в Word'е возможность получить длину текста в point, см. или еще в чем угодно, будет не проблема перевести их пиксели или еще во что.
Моя функция в примере рассчитывает длину текста одним шрифтом с указанием размера, но не учитывает курсив, насыщенность. Это доп. параметры можно задать в самой API функции, я там по умолч. задаю эти доп. характеристики по умолч.. Мне просто это не надо было, а ты можешь расширить VB функцию и добавить в нее эти доп. переменные передавая их в API GetTextExtentPoint32.
Ну вообщем, если ты хочешь узнать обо всех возможностях API GetTextExtentPoint32, то советую почитать на MSDN, там все достаточно подробно описано, тем более что пример использования на VB у тебя перед глазами.
В принципе, если ты найдешь в Word'е возможность получить длину текста в point, см. или еще в чем угодно, будет не проблема перевести их пиксели или еще во что.
Моя функция в примере рассчитывает длину текста одним шрифтом с указанием размера, но не учитывает курсив, насыщенность. Это доп. параметры можно задать в самой API функции, я там по умолч. задаю эти доп. характеристики по умолч.. Мне просто это не надо было, а ты можешь расширить VB функцию и добавить в нее эти доп. переменные передавая их в API GetTextExtentPoint32.
Ну вообщем, если ты хочешь узнать обо всех возможностях API GetTextExtentPoint32, то советую почитать на MSDN, там все достаточно подробно описано, тем более что пример использования на VB у тебя перед глазами.
Блин, перлепутал немного, речь идет конечно о функции API CreateFont, которая и создает в памяти фонт с нужными характеристиками, а GetTextExtentPoint32 уже только измеряет получившиюся длину.
RE: возможно проблема в nSize (PointSize если следовать MSDN), поигаюсь