Тема: DrawText
Показать сообщение отдельно
Старый 24.10.2005, 17:57     # 6
kot_
Junior Member
 
Аватар для kot_
 
Регистрация: 19.11.2004
Адрес: Dnepropetrovsk
Пол: Male
Сообщения: 67

kot_ Путь к славе только начался
Цитата:
Сообщение от 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;
...
__________________
kot_ вне форума