Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / C++ [игнор отключен] [закрыт для гостей] / Печать из RichEdit / 5 сообщений из 5, страница 1 из 1
16.11.2006, 15:58
    #34133857
AlexeyStaf
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Печать из RichEdit
Необходимо распечатать содержимое RichEdit'а из диалога. Содержимое печатается, но немного криво. Поэтому есть несколько вопросов. Вот код вывода текста на печать:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
long textSize = richEdit.GetWindowTextLength();
long printTextSize =  0 ;

formatPage.hdc = printer.GetSafeHdc();
formatPage.hdcTarget = printer.GetSafeHdc();
// fieldPage - отступы от края листа в твипах
formatPage.rc.left = fieldPage.left;
formatPage.rc.top = fieldPage.top;
formatPage.rc.bottom = ::MulDiv(printer.GetDeviceCaps(PHYSICALHEIGHT),
     1440 , printer.GetDeviceCaps(LOGPIXELSY)) - fieldPage.bottom;
formatPage.rc.right = ::MulDiv(printer.GetDeviceCaps(PHYSICALWIDTH),
     1440 , printer.GetDeviceCaps(LOGPIXELSX)) - fieldPage.right;
formatPage.rcPage = formatPage.rc;

while (printTextSize < textSize)
{
StartPage();
printTextSize += richEdit.FormatRange(&formatPage, FALSE);
formatPage.chrg.cpMin = printTextSize;
richEdit.DisplayBand(&formatPage.rc);
EndPage();
}
1. Возникает такой глюк: если весь текст умещается на одном листе, то цикл выполняется два раза. На первый лист помещается текст, а второй лист просто выходит пустым. Если же печатается несколько страниц, то все нормально.
Я так понимаю, что не так считаю количество распечатанного текста. Но как тогда надо?
2. Пытаюсь задать поля для печати в миллиметрахВот формула перевода миллиметров в твипы:
Код: plaintext
1.
2.
3.
4.
5.
6.
// Перевожу миллиметры в пиксели
result = ::MulDiv(printer.GetDeviceCaps(HORZRES), 
	mmeters, printer.GetDeviceCaps(HORZSIZE));

// Перевожу пиксели в twip'ы
result = ::MulDiv(result,  1440 , printer.GetDeviceCaps(LOGPIXELSX));
Допустим, что задаю все поля по 15 мм. Но при печати они получаются вовсе не такими: по горизонтали 17, а по вертикали - 20. В чем тут проблема?
Заранее благодарен.
...
Рейтинг: 0 / 0
16.11.2006, 16:20
    #34133959
Ой Вэй
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Печать из RichEdit
По поводу второго вопроса: может быть дело в непечатной области принтера (см. GetDeviceCaps(PHYSICALOFFSETX)).
...
Рейтинг: 0 / 0
16.11.2006, 16:25
    #34133983
AlexeyStaf
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Печать из RichEdit
Ой ВэйПо поводу второго вопроса: может быть дело в непечатной области принтера (см. GetDeviceCaps(PHYSICALOFFSETX)).
Я уже думал про это. Но смущает то, что эти отступы по 4 мм. Все равно не получается нужная цифра.
...
Рейтинг: 0 / 0
05.12.2006, 16:11
    #34178063
AlexeyStaf
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Печать из RichEdit
2 Ой Вэй: Может быть ответите на этот вопрос http://www.sql.ru/forum/actualthread.aspx?tid=370008
...
Рейтинг: 0 / 0
05.12.2006, 16:22
    #34178112
Ой Вэй
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Печать из RichEdit
К сожалению, могу только догадываться. Сам я печатал много, но только из CScrollView.
См. http://www.sql.ru/forum/actualthread.aspx?tid=370008
...
Рейтинг: 0 / 0
Форумы / C++ [игнор отключен] [закрыт для гостей] / Печать из RichEdit / 5 сообщений из 5, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]