![]() |
|
Модераторы: Snowy, Alexeis, MetalFan |
![]()
|
|
| кварк |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 91 Регистрация: 2.8.2002 Репутация: нет Всего: нет |
Нужно вывести текст на принтер. И чтобы предпросмотр был. Со скроллингом и зумом. Основная проблема - масштабирование текста. Хотелось бы "как в ворде". Но не особо получается, потому что font.size имеет тип integer и довольно резко скачет при изменении зума.
Единственным выходом вижу создание чего-нибудь а-ля Bitmap с размером в страницу принтера, рисование на нем, предпросмотр через StretchDraw и вывод на принтер через тот же StretchDraw. Так как опыта у меня в этом деле нет, то вопрос: может, есть алгоритм лучше? Я хочу разобраться в этом вопросе, поэтому особо нужны теоретические размышления. P.S. нарыл мнение, что для "буфера" надо использовать TMetafile. Но как на нем рисовать - не ясно. и в D6 примера не нашел. [Допишу, пожалуй] Пытаюсь применить Metafile в качестве буфера.
Вместо вопросов надо вставить код, отрисовывающий содержимое метафайла на канве (ну, например, Form1). Никак не могу этого сделать. Это сообщение отредактировал(а) кварк - 16.11.2004, 12:56 |
|||
|
||||
| Kesh |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Эксперт Сообщений: 2488 Регистрация: 31.7.2002 Где: Германия, Saarbrü cken Репутация: 1 Всего: 54 |
А почему не на Bitmap рисовать?
-------------------- ![]() |
|||
|
||||
| p0s0l |
|
|||
![]() Г-н Посол ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 3668 Регистрация: 13.7.2003 Где: 58°38' с.ш. 4 9°41' в.д. Репутация: 16 Всего: 112 |
TMetaFileCanvas передаёт рисунок метафайлу при разрушении.
Поэтому, прежде чем выводить метафайл, надо уничтожить метаканвас...
-------------------- С уважением, г-н Посол. |
|||
|
||||
| кварк |
|
||||||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 91 Регистрация: 2.8.2002 Репутация: нет Всего: нет |
Полагаю, что Bitmap размером со страницу на принтере немало памяти отъест. А если страниц будет штук 50? (но пока я об этом не думаю - главное с одной разобраться, а там проще будет) А может, подумаю над алгоритмом рендеринга, где создается Bitmap, на него выводится содержимое страницы, потом оно отправляется либо на предпросмотр, либо на принтер, потом Bitmap очищается и на нем рисуется следующая следующая страница (по-моему, в Ворде так и сделано).
Да. Я нашел пример. Но вот незадача: код
выводит прямоугольник (*1) четко по краям img, а вот эллипс (*2) получается какой-то маленький в левом верхнем углу. Я ожидал, что эллипс будет точно вписан в прямоугольник. Что не так? |
||||||
|
|||||||
| p0s0l |
|
|||
![]() Г-н Посол ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 3668 Регистрация: 13.7.2003 Где: 58°38' с.ш. 4 9°41' в.д. Репутация: 16 Всего: 112 |
Дело в том, что в TMetafileCanvas.Create во втором параметре указывается контекст устройства, на котором предполагается выводить картинку...
Ты указываешь 0 - это значит текущий экран, например, разрешением 1024x768... А в mf.Width и mf.Height указываешь разрешение канваса принтера... Например, будет 2500x2000 к примеру... Поэтому Ellipse (Cliprect) рисуется не на всём метафайле, а только на левой-верхней четверти... Блин, принтера нет, чтобы проверить... Но предполагаю, что заменив второй параметр в создании метаканваса (0) на Printer.Canvas.Handle проблема уйдёт:
-------------------- С уважением, г-н Посол. |
|||
|
||||
| кварк |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 91 Регистрация: 2.8.2002 Репутация: нет Всего: нет |
Подниму свою старую тему... Продолжаю дописывать компонент. Столкнулся с проблемой масштабирования текста. Как бы так сделать, чтобы текст (или отдельный символ - неважно) точно вписывался в заданный прямоугольник (как, например, это сделано в редакторе Macromedia Flash)? Просто если менять Font.Size, то получается топорно.
Может, в WinApi есть функции для этого? Пока реализовал то, что первым пришло на ум, но это медленно работает. |
|||
|
||||
![]()
|
| Правила форума "Delphi: Звук, графика и видео" | |
|
|
Запрещено: 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делится вскрытыми компонентами
FAQ раздела лежит здесь! Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Girder, Snowy. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Delphi: Звук, графика и видео | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |