Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > RichEdit


Автор: WIN32API 2.9.2005, 14:28
Ребятки, если есть у кого пример, как распечатать (например) первую страницу в двух экземплярах, а вторую в одном из RichEdit за один раз (например, за одно нажатие кнопки) - то бросьте, пожалуйста! Сенкс! Вообще это реально?

Автор: WIN32API 2.9.2005, 20:05
У меня есть добротная процедура печати:

Код

procedure PrintRichEdit(const Cpt: string; const RichEdt: TRichEdit);
var
 Range: TFormatRange;
 LastChar, MaxLen, LogX, LogY, OldMap: Integer;
begin
 FillChar(Range, SizeOf(TFormatRange), 0);
  with Printer, Range do begin
   BeginDoc;
   hdc := Handle;
   hdcTarget := hdc;
   LogX := GetDeviceCaps(Handle, LOGPIXELSX);
   LogY := GetDeviceCaps(Handle, LOGPIXELSY);
    if IsRectEmpty(RichEdt.PageRect) then begin
     rc.right := PageWidth * 1440 div LogX;
     rc.bottom := PageHeight * 1440 div LogY;
    end else begin
     rc.left := RichEdt.PageRect.Left * 1440 div LogX;
     rc.top := RichEdt.PageRect.Top * 1440 div LogY;
     rc.right := RichEdt.PageRect.Right * 1440 div LogX;
     rc.bottom := RichEdt.PageRect.Bottom * 1440 div LogY;
    end;
   rcPage := rc;
   Title := Cpt;
   LastChar := 0;
   MaxLen := RichEdt.GetTextLen;
   chrg.cpMax := -1;
   OldMap := SetMapMode(hdc, MM_TEXT);
   SendMessage(RichEdt.Handle, EM_FORMATRANGE, 0, 0);
    try repeat
     chrg.cpMin := LastChar;
     LastChar := SendMessage(RichEdt.Handle, EM_FORMATRANGE, 1, Longint(@Range));
      if (LastChar < MaxLen) and (LastChar <> -1) then NewPage;
    until (LastChar >= MaxLen) or (LastChar = -1);
   EndDoc;
  finally
   SendMessage(RichEdt.Handle, EM_FORMATRANGE, 0, 0);
   SetMapMode(hdc, OldMap);
  end;
 end;
end;


Помогите сдесь реализовать такую ерунду.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)