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

kot_ Путь к славе только начался
Не совсем понял - так а проблема в чем? Проверяй длинну строки перед тем как ее выводить. В приведенном примере - так как объем выводимых данных невелик, и данные жестко вшиты в код, функция автопереноса не выделялись отдельно - то есть я проверяю длину строки прямо в коде, и в принципе это нормально работало:
Код:
String = "Поставщик: " + Form1->stPostav->Caption+"\r\n";
   int j = 1;
  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(g!="\r"&&g!="\n"){
    pCanvas->TextOutA(PosGor,PosVert,g);
//Выводится каждый отдельный символ - не строка!!!
    PosGor += pCanvas->TextWidth(g);
    }
     j++;
}while(String.Length()>= j);
Но вобще-то бы стоило делать это отдельным потоком - на больших объемах вывода такой код здорово будет тормозить.
То же и у тебя - тебе нужно или проверять всю строку - и выводить ту дельту которая разница между шириной страницы и шириной строки в отдельную строку - используя субстринг - или выводить посимвольно - проверяя не попадает ли символ за пределы страницы.
Тут кстати, че-то я накрутил с фигурными скобками и объявлениями, звиняй, ессественно не нужно в конструкции do{}while объявлять переменную, просто реальный код менее читаем, там используется ряд полей класса и т.д. и объем его гораздо более. Я надеюсь общая идея понятна.
__________________

Последний раз редактировалось kot_; 30.10.2005 в 00:45.
kot_ вне форума