Author |
Topic |
|
vis
47 Posts |
Posted - 11/20/2009 : 06:53:33
|
Вопрос к гуру. Создаю прямоугольник, ширина которого меняется в зависимости от длины его текста. В добавок, ширина округляется до целого значения в миллиметрах. Для этого в шейп листе в поле width прописал =ROUND(TEXTWIDTH(TheText),0). Все хорошо работает. Если этот шейп копировать Ctrl+C и вставлять потом Ctrl+V, то его способность менять ширину остается. А вот при копировании шейпа при помощи мыши и зажжатым Ctrl приводит к тому, что эта способность исчезает. ПОчему???? |
|
vis
47 Posts |
Posted - 11/20/2009 : 10:40:23
|
и еще вопросик позвольте вопрос.... у меня в визио 2007 эта строка width=ROUND(TEXTWIDTH(TheText),0) округляет ширину прямоугольника до целого числа миллиметров а если этот файл открывается в визио 2003, то там округление производится в дюймах, хотя в настройках документа единица измерения установлена "миллиметр" как быть? |
|
|
Tumanov
Russia
1198 Posts |
Posted - 11/21/2009 : 07:18:15
|
quote: Если этот шейп копировать Ctrl+C и вставлять потом Ctrl+V, то его способность менять ширину остается. А вот при копировании шейпа при помощи мыши и зажжатым Ctrl приводит к тому, что эта способность исчезает. ПОчему????
Интересная особенность. Не знал. Вместо формулы в Width появляется значение. Возможно, это как-то связано с порядком вычисления... Но поставьте Guard и все будет нормально.
quote: там округление производится в дюймах, хотя в настройках документа единица измерения установлена "миллиметр"
Попробуйте жестко задать пересчет через FORMATEX. Надо бы проверить, как это будет себя вести во всех случаях, но примерно вот так: =Guard(ROUND(FORMATEX(TEXTWIDTH(TheText), "0.00 u", "in", "mm"),0)) |
|
|
vis
47 Posts |
Posted - 11/23/2009 : 09:07:56
|
Спасибо.... Как всегда все заработало |
|
|
vis
47 Posts |
Posted - 12/08/2009 : 12:33:30
|
Заработало с GUARD, однако вариант с FORMATEX не привел к положительному результату - как и ранее Visio 2003 ширину шейпа округляет в дюймах. Это приводит к тому, что ширина его приравнивается к нулю, когда текст состоит из пары символов |
Edited by - vis on 12/08/2009 12:34:37 |
|
|
vis
47 Posts |
Posted - 01/21/2010 : 06:36:41
|
Так и не смог я решить эту проблему до конца - повис вопрос с округлением. эта строка FORMATEX(TEXTWIDTH(TheText), "0.00 u", "in", "mm") выдает мне размер шейпа в миллиметрах... Далее мне надо округлить это значение до целого числа, использую ROUND(FORMATEX(TEXTWIDTH(TheText), "0.00 u", "in", "mm"),0), вот тут то и облом... сначала визио переводит миллиметры, полученные FORMATEX(TEXTWIDTH(TheText), "0.00 u", "in", "mm"), в дюймы, а потом округляет. Допустим ширина текста в шейпе 18,5мм. Шейп должен быть шириной 19 мм, а получаю я 0 дюймов, что соответствует 0 мм. Помогите решить проблему......... VISIO2003 |
Edited by - vis on 01/21/2010 06:37:06 |
|
|
Tumanov
Russia
1198 Posts |
Posted - 01/22/2010 : 15:39:28
|
Попробовал тоже в Visio 2003. Не работает. Работает вот такая формула =GUARD(ROUND(TEXTWIDTH(TheText)*25.4+1,0)/25.4)
|
|
|
vis
47 Posts |
Posted - 01/23/2010 : 08:41:16
|
спасибо за формулу - ее я уже давно сам использовал, но необходимо, чтобы ширина прямоугольника = ЦЕЛОМУ числу миллиметров... а в данном случае, оно дробное - а это не подходит |
|
|
Tumanov
Russia
1198 Posts |
Posted - 01/23/2010 : 09:43:21
|
А выглядит, как целое. Если просто наблюдать, как изменяется ширина при вводе разного количества символов. А на основе чего делается заключение, что оно дробное? |
|
|
vis
47 Posts |
Posted - 01/23/2010 : 10:53:33
|
Пардон.... я ошибся....по формуле все верно.. я просто при проверке визио2007 запустил, а там уже эта формула не приводит к нужному результату.. СПАСИБО! |
|
|
|
Topic |
|
|
|