Как подогнать размер Fonta под размеры прямоугольника
От: Аноним  
Дата: 27.10.10 11:34
Оценка:
Windows.Forms

Необходимо вывести на Graphics текст, вписав его в заданный прямоугольник, фактически известны все настройки Font кроме размера.
Как подогнать размер? (Graphics.MeasureString или проще?)
Re: Как подогнать размер Fonta под размеры прямоугольника
От: Pavel Dvorkin Россия  
Дата: 27.10.10 11:45
Оценка: +1
Здравствуйте, Аноним, Вы писали:

А>Windows.Forms


А>Необходимо вывести на Graphics текст, вписав его в заданный прямоугольник, фактически известны все настройки Font кроме размера.

А>Как подогнать размер? (Graphics.MeasureString или проще?)

Насколько мне известно, в GDI нет средств определить размер шрифта для заданного прямоугольника. Это и понятно — чтобы размер этот оценить, надо шрифт в контексте выбрать, а для этого его надо создать. Обратная задача (оценить размер прямоугольника по шрифту) — хорошо известна.

Так что только методом проб и ошибок.
With best regards
Pavel Dvorkin
Re: Как подогнать размер Fonta под размеры прямоугольника
От: shakm Россия  
Дата: 27.10.10 12:12
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Windows.Forms


А>Необходимо вывести на Graphics текст, вписав его в заданный прямоугольник, фактически известны все настройки Font кроме размера.

А>Как подогнать размер? (Graphics.MeasureString или проще?)

ну да, пробы и ошибки

вот такую штуку я когда-то написал себе, и ушло то на это минут 20 (так много потому, что мало что знал по теме..)


        public static Font FindTextFont(Graphics targetGraphics, string fontName, string text, Size paintSize, FontStyle fontStyle, float widthStart, float widthStep)
        {
            Font lastFont = new Font(fontName, widthStart, fontStyle);
            while (true)
            {
                Font testFont = new Font(fontName, widthStart, fontStyle);
                SizeF sz = targetGraphics.MeasureString(text, testFont);
                if ((sz.Width > paintSize.Width) || (sz.Height > paintSize.Height))
                    break;
                lastFont = testFont;
                widthStart += widthStep;
            }
            return lastFont;
        }
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.