Длина будущего текста.

Язык Visual Basic на платформе .NET.

Модераторы: Ramzes, Sebas

Ефрейтор
Обычный пользователь
Обычный пользователь
 
Сообщения: 65
Зарегистрирован: 11.02.2005 (Пт) 12:43
Откуда: Алтай

Длина будущего текста.

Сообщение Ефрейтор » 13.03.2006 (Пн) 5:51

Люди добрые, такой вопрос, очень спецефический. Есть какой то текст, известно его размер и тип шрифта, как програмно узнать длину текста в мм при его отображении на экране? (не путать с длиной строки от функции len). Ведь разный шрифт имеет разную ширину символов, в добавок разные буквы имеют разную ширину. Как это програмно можно узнать?

Alex123
Начинающий
Начинающий
 
Сообщения: 13
Зарегистрирован: 16.11.2005 (Ср) 7:14

Сообщение Alex123 » 13.03.2006 (Пн) 7:10

В пикселях можно так:
Код: Выделить всё
Dim h As New IntPtr
h = Me.Handle
Dim g As Graphics = Graphics.FromHwnd(h)
Dim t as String = "Привет"
Dim hw% = g.MeasureString(t, Me.Font).Width
Dim hf% = g.MeasureString(t, Me.Font).Height

В мм переведешь сам.

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 13.03.2006 (Пн) 10:14

Alex123 писал(а):В пикселях можно так:
Код: Выделить всё
Dim h As New IntPtr
h = Me.Handle
Dim g As Graphics = Graphics.FromHwnd(h)


Необычный подход.

Почему бы не так:
Код: Выделить всё
Dim g As Graphics = Me.CreateGraphics()

:?:
Изображение

Nord777
Гуру
Гуру
Аватара пользователя
 
Сообщения: 1144
Зарегистрирован: 22.02.2004 (Вс) 13:15
Откуда: Подольск

Сообщение Nord777 » 13.03.2006 (Пн) 11:41

Код: Выделить всё
        Dim G As Graphics = Me.CreateGraphics()
        G.PageUnit = GraphicsUnit.Millimeter

        'получить размеры строки в мм
        Dim Szf As SizeF = G.MeasureString("Good Day", Fnt, 100)

        G.PageUnit = GraphicsUnit.Display
Microsoft Visual Studio 2008
Microsoft .NET Framework 3.5

Ефрейтор
Обычный пользователь
Обычный пользователь
 
Сообщения: 65
Зарегистрирован: 11.02.2005 (Пт) 12:43
Откуда: Алтай

Сообщение Ефрейтор » 13.03.2006 (Пн) 16:16

Наверное, я плохо объяснил, свой вопрос, сорри. Я не предпологал, что текст будет на форме, в моей проге пользовательский текст будет вставлен в некоторою графическую программу типа автокада и мне нужно знать габариты текстовой области чтоб запозиционировать пользовательский текст должным образом. Поэтому, горячее желание узнать длину текста в мм, используя только тип текста и его размер, высчитать в каком то процедуре какого-либо модуля, вне всякой формы. Вы уж не обессудьте, что сначала коряво высказал просьбу :).

Thomas
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 246
Зарегистрирован: 12.11.2005 (Сб) 0:17
Откуда: "Сказочное королевство"

Сообщение Thomas » 13.03.2006 (Пн) 17:38

Ефрейтор

А ты сам то понял что хочешь, а?
Если ты знаешь только тип и размер шрифта, а сам текст нет, то хоть ты тресни, размер строки в миллиметрах ты ни когда не узнаешь.
Сам же пишешь что разные буквы имеют разную ширину.
Зачем городить огород. Зарезервируй определенное место для будущего текста и все. Текст то может быть два слова, а может десять.
Прикинь примерные варианты вводимого текста, определи размер строки предложенными тебе методами на какой нито форме и вставь в свою прогу место максимального размера. А для нерадивого юзера сделай ToolTip контрола, где укажи что вводить и какой максимальный размер. Ну например 200 символов.

Удачи и самые наилучшие пожелания.

Bier drinken met verstand! :D

Ефрейтор
Обычный пользователь
Обычный пользователь
 
Сообщения: 65
Зарегистрирован: 11.02.2005 (Пт) 12:43
Откуда: Алтай

Сообщение Ефрейтор » 13.03.2006 (Пн) 20:58

Thomas
Не ругайтесь на меня, не ругайтесь.
На крайний случай можно взять форму и считать на ней показывать то её не обязательно.

NicSoft
Обычный пользователь
Обычный пользователь
 
Сообщения: 80
Зарегистрирован: 05.04.2003 (Сб) 18:51
Откуда: Егорьевск

Сообщение NicSoft » 13.03.2006 (Пн) 21:55

Thomas
Насколько я понял Ефрейтор сам текст знает. Я сам бился над похожей проблемой. Надо было в программе-клиенте (AutoCAD) задать позицию текстового примитива так, чтобы его правый нижний край пришелся на точку с заданными мной координатами (т.е. надо знать ширину примитива). Но по описанным Ефрейтором причинам возникли проблемы. Пришлось рассчитывать, принимая одинаковую ширину всех букв (+ изменение ширины в зависимости от высоты символов). Смотрится коряво, но другого решения не нашел :(


Вернуться в Visual Basic .NET

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 58

    TopList