Цитата:
|
Сообщение от doro
_Lynx_
В rect что определяется? Размер области печати?
Вот что родил:
Код:
TPrinter *Prntr = Printer();
TRect r = Rect(0,0, Prntr->PageWidth, Prntr->PageHeight);
AnsiString MyText="Проверка";
Prntr->BeginDoc();
DrawText(Prntr->Canvas->Handle, MyText.c_str(), MyText.Length(), &r, DT_SINGLELINE |DT_VCENTER | DT_CENTER);
Prntr->EndDoc();
Но вот другая проблема появилась. Как перевести каретку на новую строку (насильно), чтобы следующий DrawText можно было напечатать. А то лепятся в одну строку или в конце текста.
И всё же на счёт rect'а не совсем ясно.
|
Rect определяет границы в которых ты рисуешь. Его размеры вовсе не обязательно должны быть на всю страницу. Потому у тебя текст и лепится один к одному - используй для каждой строки свой rect и все нормально будет. Пример как перенести строку - извини правда что с текстаут - но разницы большой нет - фрагмент -
pCanvas->TextOutA(PosGor,PosVert,String); просто заменяешь на
DrawText(Prntr->Canvas->Handle, MyText.c_str(), MyText.Length(), &r, DT_SINGLELINE |DT_VCENTER | DT_CENTER); а в
TRect r = Rect(PosGor,PosVer,Prntr->Canvas->TextWidth(MyText), Prntr->Canvas->TextHeight(MyText)); указывай соответственно координаты нужной тебе строки.
PosGor - горизонтальная координата,PosVer - вертикальная координата, BottomWidth&&RightWidth - отступы соответственно снизу и справа от края страницы.
Код:
...
if(g!="\r"&&g!="\n"){
pCanvas->TextOutA(PosGor,PosVert,g);
PosGor += pCanvas->TextWidth(g);
}
j++;
}while(String.Length()>= j);
String = "Получатель: "+Form1->stFirmAddress->Caption+"\r\n";
j = 1;
PosGor = LeftWidth;
do{
AnsiString g = String[j];
if(PosGor >= (Prn->PageWidth-RightWidth)||g=="\r"){
PosGor = LeftWidth+pCanvas->TextWidth("Поставщик: ");
if(PosVert >= (Prn->PageHeight-BottomWidth)){
Prn->NewPage();
PosVert = TopWidth;
}
PosVert += pCanvas->TextHeight(String);
}
if(PosVert >= (Prn->PageHeight-BottomWidth)){
Prn->NewPage();
PosVert = TopWidth;
}
PosVert += pCanvas->TextHeight(String)*2;
...