Модераторы: Poseidon, Snowy, bems, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Richedit, работа с компонентом 
:(
    Опции темы
beginner
Дата 5.10.2004, 07:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 2
Регистрация: 5.10.2004

Репутация: нет
Всего: нет



Помогите! У меня есть Richedit, в который постоянно добавляются строки текста.
Необходимо разбить на страницы по n-строк и вывести на печать только полные! листы с сохранением аттрибутов текста (подчеркивание и др.).
PM MAIL   Вверх
Alex
Дата 5.10.2004, 20:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 4147
Регистрация: 25.3.2002
Где: Москва

Репутация: 80
Всего: 162



А страницы нужно нумеровать?

Это сообщение отредактировал(а) Alex - 5.10.2004, 20:08


--------------------
Написать можно все - главное четко представлять, что ты хочешь получить в конце. 
PM Skype   Вверх
Alex
Дата 5.10.2004, 21:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 4147
Регистрация: 25.3.2002
Где: Москва

Репутация: 80
Всего: 162



Лови:
Код
uses
   Printers
 , RichEdit
;

procedure PrintSelTextRichedit(r: TRichEdit);
var
 printarea: TRect;
 richedit_outputarea: TRect;
 printresX, printresY: Integer;
 fmtRange: TFormatRange;
 nextChar: Integer;
 S: string;
begin
 Printer.BeginDoc;
 try
   with Printer.Canvas do begin
     printresX:= GetDeviceCaps(Handle, LOGPIXELSX);
     printresY:= GetDeviceCaps(Handle, LOGPIXELSY);
     printarea:= Rect(printresX,  // 1 inch left margin
                      printresY * 3 div 2,  // 1.5 inch top margin
                      Printer.PageWidth - printresX, // 1 inch right margin
                      Printer.PageHeight - printresY * 3 div 2); // 1.5 inch Bottom, Margin);
     // Define a rectangle for the rich edit text. The height is set      to the
     // maximum. But we need to convert from device units to twips,
     // 1 twip = 1/1440 inch or 1/20 point.
     richedit_outputarea:= Rect(printarea.Left * 1440 div printresX,
                                printarea.Top * 1440 div printresY,
                                printarea.Right * 1440 div printresX,
                                printarea.Bottom * 1440 div printresY);

     // Tell rich edit to format its text to the printer. First set
     // up data record for message:
     fmtRange.hDC:= Handle;            // printer handle
     fmtRange.hdcTarget:= Handle;     // ditto
     fmtRange.rc:= richedit_outputarea;
     fmtRange.rcPage:= Rect(0, 0, Printer.PageWidth * 1440 div printresX,
                             Printer.PageHeight * 1440 div printresY);
     // set range of characters to print to selection
     fmtRange.chrg.cpMin := r.selstart;
     fmtRange.chrg.cpMax := r.selStart + r.sellength - 1;

     // remove characters that need not be printed from end of selection.
     // failing to do so screws up the repeat loop below.
     S := r.SelText;
     while (fmtRange.chrg.cpMax > 0) and (S[fmtRange.chrg.cpMax] <= ' ') do
       Dec(fmtRange.chrg.cpMax);

     repeat
        // Render the text
       nextChar := r.Perform(EM_FORMATRANGE, 1, Longint(@fmtRange));
       if nextchar < fmtRange.chrg.cpMax then begin
         // more text to print
         printer.newPage;
         fmtRange.chrg.cpMin := nextChar;
       end; { If }
     until nextchar >= fmtRange.chrg.cpMax;

     // Free cached information
     r.Perform(EM_FORMATRANGE, 0, 0);
   end;
 finally
   Printer.EndDoc;
 end;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
 CountPage: Integer;
 k, n: Integer;
begin
 CountPage:= (RichEdit1.Lines.Count-1) div 4;
 k:= 0;

 RichEdit1.SelLength:= 1;
 while CountPage <> 0 do begin
   RichEdit1.SelStart:= RichEdit1.SelLength;
   for n:= k to k + 4 do
     RichEdit1.SelLength:= RichEdit1.SelLength + RichEdit1.Perform(EM_LINELENGTH,n, 0);
   Inc(k, 4);
   //RichEdit1.Perform(EM_SETSEL, RichEdit1.SelStart, RichEdit1.SelLength);
   //RichEdit1.SetFocus;
   PrintSelTextRichedit(RichEdit1);
   dec(CountPage);
 end;
end;



--------------------
Написать можно все - главное четко представлять, что ты хочешь получить в конце. 
PM Skype   Вверх
beginner
Дата 6.10.2004, 13:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 2
Регистрация: 5.10.2004

Репутация: нет
Всего: нет



Спасибо, буду разбираться...
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0752 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.