|
#1
|
|||
|
|||
печать компонента
У меня такая проблема мне надо вывести на печать содержимое компонента PageControl(или любого другого). Я использую пример из учебника
Код:
procedure TForm2.Button1Click(Sender: TObject); var i, start, stop: integer; begin PrintDialog1.Options:=[poPageNums,poSelection]; PrintDialog1.FromPage:=1; PrintDialog1.ToPage:=PageControl1.PageCount; PrintDialog1.MinPage:=1; PrintDialog1.MaxPage:=PageControl1.PageCount; if not PrintDialog1.Execute then Exit; if PrintDialog1.PrintRange=prAllPages then begin Start:=PrintDialog1.MinPage-1; Stop:=PrintDialog1.MaxPage-1; end else // если выбрано отличное от 'Print All' if PrintDialog1.PrintRange=prSelection then begin Start:=PageControl1.ActivePageIndex; Stop:=Start; end else // если выбрано отличное от 'Выделенный фрагмент' begin Start:=PrintDialog1.FromPage-1; Stop:=PrintDialog1.ToPage-1; end; // начало печати Printer.BeginDoc; for i:=start to stop do begin PageControl1.Pages[i].PaintTo(Printer.Handle,500,500); if i<>stop then Printer.NewPage; end; Printer.EndDoc; end; Вопрос как мне сделать так чтобы печатало нормальным размером в центре листа? |
#2
|
||||
|
||||
Читай учебник дальше, там, как раз в следующем примере, написано как настроить масштаб.
|
#3
|
|||
|
|||
вощем добавил в код:
procedure TForm2.Button1Click(Sender: TObject); Код:
var X1,X2,Y1,Y2:integer; i, start, stop: integer; PointsX,PointsY:double; begin PrintDialog1.Options:=[poPageNums,poSelection]; PrintDialog1.FromPage:=1; PrintDialog1.ToPage:=PageControl1.PageCount; PrintDialog1.MinPage:=1; PrintDialog1.MaxPage:=PageControl1.PageCount; if not PrintDialog1.Execute then Exit; if PrintDialog1.PrintRange=prAllPages then begin Start:=PrintDialog1.MinPage-1; Stop:=PrintDialog1.MaxPage-1; end else // если выбрано отличное от 'Print All' if PrintDialog1.PrintRange=prSelection then begin Start:=PageControl1.ActivePageIndex; Stop:=Start; end else // если выбрано отличное от 'Выделенный фрагмент' begin Start:=PrintDialog1.FromPage-1; Stop:=PrintDialog1.ToPage-1; end; // начало печати Printer.BeginDoc; Printer.Canvas.Refresh; PointsX:=GetDeviceCaps(Printer.Canvas.Handle,LOGPIXELSX)/30; PointsY:=GetDeviceCaps(Printer.Canvas.Handle,LOGPIXELSY)/30; X1:=round((printer.PageWidth - Pagecontrol1.Width*PointsX)/2); Y1:=round((printer.PageHeight - Pagecontrol1.Height*PointsY)/2); X2:=round(X1+Pagecontrol1.Width*PointsX); Y2:=round(Y1+Pagecontrol1.Height*PointsY); Printer.Canvas.CopyRect(Rect(X1,Y1,X2,Y2),Pagecontrol1.Canvas,Rect(0,0,Pagecontrol1.Width,Pagecontrol1.Height)); for i:=start to stop do begin PageControl1.Pages[i].PaintTo(Printer.Handle,500,500); if i<>stop then Printer.NewPage; end; Printer.EndDoc; end; |