Вывод цветного текста как DrawText
От: Vladimir Россия  
Дата: 25.12.16 05:20
Оценка:
Подскажите идею как вывести текст в прямоугольнике цветным текстом, так ка это делает функция DrawText с флагом DT_WORDBREAK и возможностью горизонтального форматирования.
Re: Вывод цветного текста как DrawText
От: Pavel Dvorkin Россия  
Дата: 25.12.16 06:42
Оценка:
Здравствуйте, Vladimir, Вы писали:

V>Подскажите идею как вывести текст в прямоугольнике цветным текстом, так ка это делает функция DrawText с флагом DT_WORDBREAK и возможностью горизонтального форматирования.


Хм, а в чем проблема ?

SetTextColor — цвет текста,
SetBkColor — цвет фона ,
SetBkMode — можно поставить TRANSPARENT
With best regards
Pavel Dvorkin
Re[2]: Вывод цветного текста как DrawText
От: Vladimir Россия  
Дата: 25.12.16 07:34
Оценка:
Здравствуйте, Pavel Dvorkin, Вы писали:

PD>Здравствуйте, Vladimir, Вы писали:


V>>Подскажите идею как вывести текст в прямоугольнике цветным текстом, так ка это делает функция DrawText с флагом DT_WORDBREAK и возможностью горизонтального форматирования.


PD>Хм, а в чем проблема ?


PD>SetTextColor — цвет текста,

PD>SetBkColor — цвет фона ,
PD>SetBkMode — можно поставить TRANSPARENT
Пример вывода:

Это пример вывода
текста функцией
DrawText с флагами
форматирования DT_LEFT
| DT_WORDBREAK

Нельзя вывести весь текст одной функцией DrawText. Необходимо менять DC.
Вывод текст надо так:
TextOut(hdc, Это пример вывода);
TextOut(hdc, текста);
TextOut(hdcBOLD, функцией);
TextOut(hdcBOLD, DrawText);
и т.д.
hdcBOLD — это контекст связанный с жирным фонтом.
Может быть есть пример реализации подобного вывода текста.
Интересует также флаги DT_RIGHT, DT_CENTER и DT_JUSTIFY (такого флага нет, но SetTextJustification нельзя применить)
Re[3]: Вывод цветного текста как DrawText
От: Pavel Dvorkin Россия  
Дата: 25.12.16 10:35
Оценка: +1
Здравствуйте, Vladimir, Вы писали:

V>Нельзя вывести весь текст одной функцией DrawText. Необходимо менять DC.


Не надо менять DC, надо его настраивать. Надо просто с помощью CreateFont[Indirect] создать 2 шрифта : обычный и жирный, и поочередно перед TextOut выбирать (SelectObject) нужный шрифт. Более одного HDC вывод текста не требует.
With best regards
Pavel Dvorkin
Re[2]: Вывод цветного текста как DrawText
От: Vladimir Россия  
Дата: 25.12.16 10:51
Оценка:
Здравствуйте, Pavel Dvorkin, Вы писали:

PD>Здравствуйте, Vladimir, Вы писали:


V>>Подскажите идею как вывести текст в прямоугольнике цветным текстом, так ка это делает функция DrawText с флагом DT_WORDBREAK и возможностью горизонтального форматирования.


PD>Хм, а в чем проблема ?


PD>SetTextColor — цвет текста,

PD>SetBkColor — цвет фона ,
PD>SetBkMode — можно поставить TRANSPARENT

Я знаю как выводить, как подставлять шрифты.
Меня интересует алгоритм расчета координат вывода текста.
Есть предложение посчитать координаты начала и конца каждого слова, потом пересчитать их относительно прямоугольника вывода.
Внутреннее чутье подсказывает что можно как-то проще !

Конечная задача вывести текст который на HTML выглядел бы так:
<div width="200">Текст, <b>который</b> нужно <i>вывести</i> в окне div, <span style="color:red;">выровненный</spzn> по ширине</div>
Re[3]: Вывод цветного текста как DrawText
От: Pavel Dvorkin Россия  
Дата: 25.12.16 11:33
Оценка:
Здравствуйте, Vladimir, Вы писали:

V>Меня интересует алгоритм расчета координат вывода текста.


Я уже что-то запутался. Сначала надо было нарисовать цветом. Потом появился какой-то второй DC, непонятно зачем. Теперь выясняется, что проблема в расчете координат. Ладно.

GetTextExtentPoint32 возвращает размеры прямоугольника текста на заданном HDC при выбранном HFONT.
Если надо выравнять текст по ширине или как-то еще, то предварительно SetTextAlign.
With best regards
Pavel Dvorkin
Re[4]: Вывод цветного текста как DrawText
От: Vladimir Россия  
Дата: 25.12.16 12:15
Оценка:
Здравствуйте, Pavel Dvorkin, Вы писали:

PD>Здравствуйте, Vladimir, Вы писали:


V>>Меня интересует алгоритм расчета координат вывода текста.


PD>GetTextExtentPoint32 возвращает размеры прямоугольника текста на заданном HDC при выбранном HFONT.

PD>Если надо выравнять текст по ширине или как-то еще, то предварительно SetTextAlign.

Попробую совсем просто!
Как вывести следующий текст, выровненный по центру в прямоугольнике размером 300 пикселей.
-- Вывод простого текста
(Слово "простого" выделено жирным шрифтом)
Re[5]: Вывод цветного текста как DrawText
От: Pavel Dvorkin Россия  
Дата: 25.12.16 12:44
Оценка: 9 (1)
Здравствуйте, Vladimir, Вы писали:

V>Попробую совсем просто!

V>Как вывести следующий текст, выровненный по центру в прямоугольнике размером 300 пикселей.
V>-- Вывод простого текста
V>(Слово "простого" выделено жирным шрифтом)

Вот теперь понятно.

AFAIK таких средств (то есть со сменой шрифта) нет, только вручную

1. Выбираем в HDC регулярный шрифт, GetTextExtentPoint32 для слова "Вывод"
2. Выбираем в HDC жирный шрифт, GetTextExtentPoint32 для слова "простого"
3. Выбираем в HDC регулярный шрифт, GetTextExtentPoint32 для слова "текста"
4. Находим сумму длин по x
5. Рассчитываем пропуски между словами, находи координаты слов
6. Вывод пословно по этим координатам, выбирая в HDC нужный шрифт.

В общем, как ты и предлагал.
With best regards
Pavel Dvorkin
Re: Вывод цветного текста как DrawText
От: Alexander G Украина  
Дата: 25.12.16 19:31
Оценка: :)
Здравствуйте, Vladimir, Вы писали:

V>Подскажите идею как вывести текст в прямоугольнике цветным текстом, так ка это делает функция DrawText с флагом DT_WORDBREAK и возможностью горизонтального форматирования.


Rich Edit

HTML
Русский военный корабль идёт ко дну!
Re[6]: Вывод цветного текста как DrawText
От: VladFein США  
Дата: 03.01.17 18:39
Оценка: 9 (2)
Здравствуйте, Pavel Dvorkin, Вы писали:

PD>AFAIK таких средств (то есть со сменой шрифта) нет, только вручную


PD>1. Выбираем в HDC регулярный шрифт, GetTextExtentPoint32 для слова "Вывод"

PD>2. Выбираем в HDC жирный шрифт, GetTextExtentPoint32 для слова "простого"
PD>3. Выбираем в HDC регулярный шрифт, GetTextExtentPoint32 для слова "текста"
PD>4. Находим сумму длин по x
PD>5. Рассчитываем пропуски между словами, находи координаты слов
PD>6. Вывод пословно по этим координатам, выбирая в HDC нужный шрифт.

пересчёт координат можно не делать — вместо этого используйте TA_UPDATECP флаг:
https://msdn.microsoft.com/en-us/library/windows/desktop/dd145133(v=vs.85).aspx
Re: Вывод цветного текста как DrawText
От: VladFein США  
Дата: 03.01.17 18:44
Оценка: 6 (1)
Здравствуйте, Vladimir, Вы писали:

V>Подскажите идею как вывести текст в прямоугольнике цветным текстом, так ка это делает функция DrawText с флагом DT_WORDBREAK и возможностью горизонтального форматирования.


По-моему, удобнее использовать RTF посредством Windowless Rich Edit Control:
ITextServices::TxDraw method
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.