![]() |
DrawText
Господа! Помогите (с помощью реального кода ;) ) погонять текст на принтере на листе А4 с помощью функции DrawText. Т.е. чтобы текст печатался, например, в любом из углов листа, в центре, в верху, внизу и т.д..
Заранее признателен! |
void CMyView::OnPrint(CDC* pDC, CPrintInfo* pInfo)
{ int adx, ady; adx=200; ady=500; CString str; POINT curPos; double mask; CPoemDoc* curDoc = GetDocument(); str.Format("Документ: %s",(LPCSTR)curDoc->GetTitle()); CSize size; size = pDC->GetTextExtent(str); ... pDC->TextOut((pInfo->m_rectDraw.Width()-size.cx)/2, 200, str); curPos.x = 400; curPos.y = ady + curRect.Height()*mask + 200; str = "Информация ..."; pDC->TextOut(curPos.x, curPos.y, str); pDC->SelectStockObject(BLACK_BRUSH); for(i=0;i<curDoc->m_objSel.CountElems();i++){ Temp = curDoc->m_objSel[i]; curPos.y += 100; pDC->Rectangle(curPos.x,curPos.y,1700,curPos.y+3); curPos.y += 30; str.Format("%10.10s %5.50s","...:",Temp->code); str.TrimRight(); if(str.GetLength()>10){ pDC->TextOut(curPos.x, curPos.y, str); curPos.y += 100; } str.Format("%7.10s%15.2d.%.2d.%.4d %5.2d:%.2d","Время:",Temp->dt.wDay,Temp->dt.wMonth,Temp->dt.wYear/*Temp->date*/,Temp->dt.wHour, Temp->dt.wMinute/*Temp->time*/); str.TrimRight(); if(str.GetLength()>7){ pDC->TextOut(curPos.x, curPos.y, str); curPos.y += 100; } ... } |
_Lynx_
Огромное спасибо! Но где же работа DrawText? :idontnow: |
не заметил :) использовал TextOut
RECT rect={0,0,100,20}; pDC->DrawText("Какая-то фраза", -1, &rect, DT_CENTER); |
_Lynx_
В rect что определяется? Размер области печати? Вот что родил: Код:
TPrinter *Prntr = Printer();И всё же на счёт rect'а не совсем ясно. |
Цитата:
PosGor - горизонтальная координата,PosVer - вертикальная координата, BottomWidth&&RightWidth - отступы соответственно снизу и справа от края страницы. Код:
... |
kot_, твоё сообщение добило почти окончательно мою тупость.
Но остатки остались. :) Вот код: Код:
AnsiString VD = "", VM = "", VY = "", StartD="", StartM="", StartY="", EndD="", EndM="", EndY="", ChisloD="", ChisloM="", ChisloY=""; |
Не совсем понял - так а проблема в чем? Проверяй длинну строки перед тем как ее выводить. В приведенном примере - так как объем выводимых данных невелик, и данные жестко вшиты в код, функция автопереноса не выделялись отдельно - то есть я проверяю длину строки прямо в коде, и в принципе это нормально работало:
Код:
String = "Поставщик: " + Form1->stPostav->Caption+"\r\n";То же и у тебя - тебе нужно или проверять всю строку - и выводить ту дельту которая разница между шириной страницы и шириной строки в отдельную строку - используя субстринг - или выводить посимвольно - проверяя не попадает ли символ за пределы страницы. Тут кстати, че-то я накрутил с фигурными скобками и объявлениями, звиняй, ессественно не нужно в конструкции do{}while объявлять переменную, просто реальный код менее читаем, там используется ряд полей класса и т.д. и объем его гораздо более. Я надеюсь общая идея понятна. |
Это всё хорошо, но ведь я рисую на канвасе принтера, который получил, использую в DrawText DT_WORDBREAK. Поэтому мне не совсем понятно почему текст вылезает за пределы страницы вообще. :confused:
|
Цитата:
Код:
TRect r = Rect(30,50, this->Width,this->Height);Угу. удалил пробелы до единиц - результат - строка полезла за границы формы и перенос только на единицах. |
Что-то ни с того ни с сего заработал у меня DrawText. :confused:
|
| Часовой пояс GMT +4, время: 04:35. |
Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.