Всем добрый день.
Есть такая задача: нужно нарисовать строку в заданном прямоугольнике, причем если строка больше чем
прямоугольник, текст переносится. Причем переносится не по целым словам, а по буквам — т.е. нарисовал в первой строке
сколько поместилось текста, остальное начал рисовать на следующей строке — даже если была середина слова.
Можно ли это сделать стандартными средствами? Или хотя бы как измерить какой кусок строки поместится в указанной длине
(чтобы самому нарисовать строку по кускам)?
Здравствуйте, Сергей15, Вы писали:
С>Всем добрый день.
С>Есть такая задача: нужно нарисовать строку в заданном прямоугольнике, причем если строка больше чем
С>прямоугольник, текст переносится. Причем переносится не по целым словам, а по буквам — т.е. нарисовал в первой строке
С>сколько поместилось текста, остальное начал рисовать на следующей строке — даже если была середина слова.
С>Можно ли это сделать стандартными средствами? Или хотя бы как измерить какой кусок строки поместится в указанной длине
С>(чтобы самому нарисовать строку по кускам)?
Graphics.DrawString(string, Font, Brush, RectangleF) может рисовать в прямоугольник. Если уж совсем не влезает, отрезает...
Пример:
private void panel1_Paint(object sender, System.Windows.Forms.PaintEventArgs e)
{
Graphics g = e.Graphics;
RectangleF rect = new RectangleF(0, 0, 50, 50);
g.DrawString("This is a very long string to be fill in a rectangle", this.Font, Brushes.Blue, rect);
}
Размер строки можно вычислить методом Graphics.MeasureString, у него тоже много перегруженных вариантов...
Здравствуйте, VyacheslavZhitomirskiy, Вы писали:
VZ>Graphics.DrawString(string, Font, Brush, RectangleF) может рисовать в прямоугольник. Если уж совсем не влезает, отрезает...
VZ>Пример:
VZ>
VZ> private void panel1_Paint(object sender, System.Windows.Forms.PaintEventArgs e)
VZ> {
VZ> Graphics g = e.Graphics;
VZ> RectangleF rect = new RectangleF(0, 0, 50, 50);
VZ> g.DrawString("This is a very long string to be fill in a rectangle", this.Font, Brushes.Blue, rect);
VZ> }
VZ>
VZ>Размер строки можно вычислить методом Graphics.MeasureString, у него тоже много перегруженных вариантов...
Спасибо. Но это я все знаю, проблема в том что стандартно функция DrawString переносит по словам или вообще не переносит (если я не ошибаюсь).
Т.к. размеры области для вывода могут менятся в произвольные моменты, надо быстро вычислять на лету как нужно переносить строку (т.е. в какой позиции вставить\n например).
Наверное все-таки придется использовать MeasureCharacterRanges для определения длины подстрок и разделять их самому —
а так как надо выводить много строк в ячейках грида, то явно будет тормозить и придется оптимизировать и т.п.
Просто была слабая надежда что есть стандартный метод — типа установки неизвестного мне флага и все зарабтает

.
>>Можно ли это сделать стандартными средствами?
Можно. См. в <a href=
http://irazin.ru/Downloads/Books/Chand.rar>этой книге</a> раздел Working with Text and Strings -> Alignment and Trimming. Просто там много вкусного, и не хотелось бы выдавать "отписку"...
данное сообщение получено с www.gotdotnet.ru
ссылка на оригинальное сообщение
>>Просто была слабая надежда что есть стандартный метод — типа установки неизвестного мне флага и все зарабтает
Заработает, если ты сумеешь прочитать мое предыдущее письмо в этой ветке.
данное сообщение получено с www.gotdotnet.ru
ссылка на оригинальное сообщение
StringFormat format = new StringFormat();
format.Trimming = StringTrimming.Character;
.....DrawString(....., format);
данное сообщение получено с www.gotdotnet.ru
ссылка на оригинальное сообщение