Thor писал(а) 19. Декабря 2007 :: 09:16:Проблема состоит в том, что при обычном отображении схема выводится с нормальным масштабом, в режиме предварительного просмотра (Print Preview) масштаб схемы не подгоняется под масштабы листа (обычно больше), а при печати масштаб схемы очень маленький.
Как я понял, проблема заключается в изменении графического контекста (у экрана и принтера разное разрешение) и в режиме вывода изображения в контекст, наверное используется MM_TEXT.
Да, скорее всего, ты понял правильно. MM_TEXT - отображение одной единицы в физический пиксел устройства. В принципе, подойдет практически любой другой режим при правильном подходе
Thor писал(а) 19. Декабря 2007 :: 09:16:Вопрос к знатокам: как для компоненты назначить другой режим отображения, или как перехватить изменение контекста (есть ли такое событие?).
Перехватить событие? Зачем?! Что тебе это даст?
Не знаю Дельфи. В C++ все элементарно - SetMapMode. Плюс, возможно, SetWindowExtEx и SetViewportExtEx. Да! При принт-превью нельзя использовать контекст рисования для получения информации о характеристиках устройства (например, для получения ширины символа и, соответственно, ширины строки). Поэтому для получения характеристик нужно использовать некий специальный "информационный" контекст. А чтобы данные с этого контекста могли быть пригодны и для экрана, и для принтера (с любыми разрешениями), контекст должен быть настроен устройствонезависимым образом.
Thor писал(а) 19. Декабря 2007 :: 09:16:P.S. Я экспериментировал со вставкой различных контролов и заметил, что все стандартные ActiveX от Microsoft (то есть написанные с использованием Visual C++/MFC) отображаются нормально, а все компоненты, написанные на Delphi, отображаются, так, как описано выше.
Дельфи - суксь, C++ - рулез!