Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Вывод строки на экран (!)  (Прочитано 4344 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Alex White
Участник

ua
Offline Offline
Пол: Мужской

« : 20-08-2004 16:04 » 

Есть строка текста. И два параметра задачи - double wordSpace и double charSpace (поумолчанию оба 1). Эти параметры показывают во сколько раз пробел между словами (буквами) в тексте больше обычного.
Как реализовать ? не хочется бить весь текст на char'ы  Я шокирован!  
Если кто сталкивался - подскажите плз.
Записан
Dimka
Деятель
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #1 : 20-08-2004 21:20 » 

А можно иначе сформулировать? Лично мне не понятно, что такое обычный и необычный пробелы в данном контексте. Лучше пример строчки... Или в строчке разделителями много пробелов, а надо при выводе отображать один?
Записан

Программировать - значит понимать (К. Нюгард)
Невывернутое лучше, чем вправленное (М. Аврелий)
Многие готовы скорее умереть, чем подумать (Б. Рассел)
Anonymous
Гость
« Ответ #2 : 21-08-2004 06:59 » 

Думаю, что без разбиения текста на символы обойтись нельзя. Но это довольно просто:
Код:
private void Form1_Paint(object sender, System.Windows.Forms.PaintEventArgs e)
{
string text = "Some text";
float x = 0;
const float wordSpace = 2.3F, charSpace = 1.2F;
System.Drawing.Graphics gr = this.CreateGraphics();
Font font = new Font("Arial", 16);
SolidBrush brush = new SolidBrush(Color.Black);
CharacterRange[] ranges = new CharacterRange[text.Length];
for (int i = 0; i < text.Length; i++)
ranges[i] = new CharacterRange(i, 1);
StringFormat sf = new StringFormat();
sf.SetMeasurableCharacterRanges(ranges);
Region[] regions = gr.MeasureCharacterRanges(text, font,
new RectangleF(0, 0, 200, 100), sf);

for (int i = 0; i < text.Length; i++)
{
if (char.IsWhiteSpace(text, i))
x += regions[i].GetBounds(gr).Width * wordSpace;
else
{
gr.DrawString(text.Substring(i, 1), font, brush, x, 0);
x += regions[i].GetBounds(gr).Width * charSpace;
}
}
}
« Последнее редактирование: 30-11-2007 22:47 от Алексей1153++ » Записан
Dimka
Деятель
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #3 : 21-08-2004 07:58 » 

ааа, вывод строчки в графике. Так бы сразу и сказали. Можно вырезать в буфер слова, используя функцию взятия подстроки (если моноширный фонт), а не посимвольно читать, но от цикла это не избавит, просто сократит число итераций.
Записан

Программировать - значит понимать (К. Нюгард)
Невывернутое лучше, чем вправленное (М. Аврелий)
Многие готовы скорее умереть, чем подумать (Б. Рассел)
Alex White
Участник

ua
Offline Offline
Пол: Мужской

« Ответ #4 : 23-08-2004 10:55 » 

спасибо, это то что "доктор прописал"  Отлично
Записан
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines