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


Автор: Jey_k 3.11.2004, 12:41
Сабж, нужно срочно.
Через 2 недели сдаю работу.

Автор: Pakshin A. S. 3.11.2004, 19:07
Насколько я понял, вся эта потехо организуется через TPrinter. Там есть такая штука Printer.TextOut(x,y, text);, где x и y - как понимается, положение начала печати. В этом случае надо будет ещё с канвой яцейки работать, т. к. надо будет рассчитывать положение текста... короче, морока.

Автор: p0s0l 3.11.2004, 19:10
Принтеров не имею, но могу предположить, что:
для печати TRichEdit - RichEdit1.Print
StringGrid1 - это надо вручную на Printer.Canvas рисовать (Printer.Canvas.TextRect-ами)...
Либо же делать PaintTo, только там пикселизированно будет при распечатке (возможно), и при том, это подойдёт если StringGrid - небольшой, влазит на страницу...

Автор: Jey_k 4.11.2004, 00:54
Цитата(p0s0l @ 3.11.2004, 19:10)

StringGrid1 - это надо вручную на Printer.Canvas рисовать (Printer.Canvas.TextRect-ами)...
Либо же делать PaintTo, только там пикселизированно будет при распечатке (возможно), и при том, это подойдёт если StringGrid - небольшой, влазит на страницу...

В ширину всего 5 ячеек, а вот по высоте может быть на несколько листов.
Народ!!! Хелп. Я с этим раньше не сталкивался.

Автор: Medved 4.11.2004, 03:13
А через поисковики найти или в FAQ заглянуть не пробовал?

Автор: Jey_k 4.11.2004, 10:41
Цитата(Pegas @ 4.11.2004, 03:13)

в FAQ заглянуть не пробовал?

нету

Автор: Jey_k 4.11.2004, 11:03
Вот нарыл. Рекомендую в FAQ вставить. Это частенько спрашивают.
Код

procedure PrintGrid(sGrid: TStringGrid; sTitle: string);
var
 X1, X2: Integer;
 Y1, Y2: Integer;
 TmpI: Integer;
 F: Integer;
 TR: TRect;
begin
 Printer.Title := sTitle;
 Printer.BeginDoc;
 Printer.Canvas.Pen.Color  := 0;
 Printer.Canvas.Font.Name  := 'Times New Roman';
 Printer.Canvas.Font.Size  := 12;
 Printer.Canvas.Font.Style := [fsBold, fsUnderline];
 Printer.Canvas.TextOut(0, 100, Printer.Title);
 for F := 1 to sGrid.ColCount - 1 do
 begin
   X1 := 0;
   for TmpI := 1 to (F - 1) do
     X1 := X1 + 5 * (sGrid.ColWidths[TmpI]);
   Y1 := 300;
   X2 := 0;
   for TmpI := 1 to F do
     X2 := X2 + 5 * (sGrid.ColWidths[TmpI]);
   Y2 := 450;
   TR := Rect(X1, Y1, X2 - 30, Y2);
   Printer.Canvas.Font.Style := [fsBold];
   Printer.Canvas.Font.Size := 7;
   Printer.Canvas.TextRect(TR, X1 + 50, 350, sGrid.Cells[F, 0]);
   Printer.Canvas.Font.Style := [];
   for TmpI := 1 to sGrid.RowCount - 1 do
   begin
     Y1 := 150 * TmpI + 300;
     Y2 := 150 * (TmpI + 1) + 300;
     TR := Rect(X1, Y1, X2 - 30, Y2);
     Printer.Canvas.TextRect(TR, X1 + 50, Y1 + 50, sGrid.Cells[F, TmpI]);
   end;
 end;
 Printer.EndDoc;
end;


Автор: Medved 4.11.2004, 23:47
Спасибо!

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