Удачи всем в их проектах!
Теперь мой вопрос.
Цель: печать и превью ричтекста.
С печатью все в порядке: указываю HDC, посылаю EM_FORMATRANGE. Превью без масштабирования --- то же самое, только другой HDC. Проблема с превью с масштабированием.
Пытаюсь сделать так:
1. Создаю TImage.
2. При помощи SetMapMode, SetViewportExtEx, SetWindowExtEx устанавливаю масштаб для битмапки.
3. Посылаю EM_FORMATRANGE и печатаю в битмапку.
4. При помощи SetMapMode, SetViewportExtEx, SetWindowExtEx возвращаю в предыдущее состояние.
Как бы ни так. После посылки EM_FORMATRANGE канва напрочь отказывается возвращаться в предыдущее состояние. И позволяет это сделать только после того, как было обработано текущее сообщение (например, если вся процедура была инициирована нажатием на кнопку, то, пока обработчик не закончится, изменить масштаб нельзя).
Если все шаги производить последовательно, опять же, одно нажатие кнопки --- одна операция, то масштаб меняется как угодно...
Похоже, что при приеме сообщения, получении HDC и прочих "низкоуровневых" операциях Delphi как-то лочит канву (смотрел по коду).
Сталкивался ли кто-нибудь с подобной проблемой и знает ли решение?
P.S. Я использую C++Builder 5, но проблема должна быть глобальной, т.к. сокрыта в VCL.